1 /* 2 * Copyright 2013 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef GrGeometryProcessor_DEFINED 9 #define GrGeometryProcessor_DEFINED 10 11 #include "src/gpu/GrPrimitiveProcessor.h" 12 13 /** 14 * A GrGeometryProcessor is a flexible method for rendering a primitive. The GrGeometryProcessor 15 * has complete control over vertex attributes and uniforms (aside from the render target) but it 16 * must obey the same contract as any GrPrimitiveProcessor, specifically it must emit a color and 17 * coverage into the fragment shader. Where this color and coverage come from is completely the 18 * responsibility of the GrGeometryProcessor. 19 * 20 * Note that all derived classes should hide their constructors and provide a Make factory 21 * function that takes an arena (except for CCPR-specific classes). This is because 22 * GrGeometryProcessor's are not ref-counted to must have some other mechanism for managing 23 * their lifetime. In particular, geometry processors can be created in either the 24 * record-time or flush-time arenas which defined their lifetimes (i.e., a DDLs life time in 25 * the first case and a single flush in the second case). 26 */ 27 class GrGeometryProcessor : public GrPrimitiveProcessor { 28 public: GrGeometryProcessor(ClassID classID)29 GrGeometryProcessor(ClassID classID) : INHERITED(classID) {} 30 31 protected: 32 // GPs that need to use either float or ubyte colors can just call this to get a correctly 33 // configured Attribute struct MakeColorAttribute(const char * name,bool wideColor)34 static Attribute MakeColorAttribute(const char* name, bool wideColor) { 35 return { name, 36 wideColor ? kFloat4_GrVertexAttribType : kUByte4_norm_GrVertexAttribType, 37 kHalf4_GrSLType }; 38 } 39 40 private: 41 typedef GrPrimitiveProcessor INHERITED; 42 }; 43 44 #endif 45