Index: include/gpu/GrProcessor.h |
diff --git a/include/gpu/GrProcessor.h b/include/gpu/GrProcessor.h |
index b41f94d25af08c48c82a9df15a9843146f9bf838..63ab7ba6f728a000c98851cc38fb12a52265e9dd 100644 |
--- a/include/gpu/GrProcessor.h |
+++ b/include/gpu/GrProcessor.h |
@@ -17,16 +17,13 @@ |
class GrContext; |
class GrCoordTransform; |
-/** Provides custom vertex shader, fragment shader, uniform data for a particular stage of the |
- Ganesh shading pipeline. |
- Subclasses must have a function that produces a human-readable name: |
- static const char* Name(); |
- GrProcessor objects *must* be immutable: after being constructed, their fields may not change. |
+/** Provides custom shader code to the Ganesh shading pipeline. GrProcessor objects *must* be |
+ immutable: after being constructed, their fields may not change. |
Dynamically allocated GrProcessors are managed by a per-thread memory pool. The ref count of an |
- effect must reach 0 before the thread terminates and the pool is destroyed. To create a static |
- effect use the macro GR_CREATE_STATIC_EFFECT declared below. |
- */ |
+ processor must reach 0 before the thread terminates and the pool is destroyed. To create a |
+ static processor use the helper macro GR_CREATE_STATIC_PROCESSOR declared below. |
+ */ |
class GrProcessor : public GrProgramElement { |
public: |
SK_DECLARE_INST_COUNT(GrProcessor) |
@@ -141,7 +138,7 @@ public: |
/** |
* This function is used to perform optimizations. When called the invarientOuput param |
- * indicate whether the input components to this effect in the FS will have known values. |
+ * indicate whether the input components to this processor in the FS will have known values. |
* In inout the validFlags member is a bitfield of GrColorComponentFlags. The isSingleComponent |
* member indicates whether the input will be 1 or 4 bytes. The function updates the members of |
* inout to indicate known values of its output. A component of the color member only has |
@@ -161,17 +158,17 @@ public: |
GrGLProcessor created by the factory. |
Example: |
- class MyCustomEffect : public GrProcessor { |
+ class MyCustomProcessor : public GrProcessor { |
... |
virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE { |
- return GrTBackendEffectFactory<MyCustomEffect>::getInstance(); |
+ return GrTBackendEffectFactory<MyCustomProcessor>::getInstance(); |
} |
... |
}; |
*/ |
virtual const GrBackendProcessorFactory& getFactory() const = 0; |
- /** Human-meaningful string to identify this effect; may be embedded |
+ /** Human-meaningful string to identify this prcoessor; may be embedded |
in generated shader code. */ |
const char* name() const; |
@@ -184,7 +181,7 @@ public: |
/** Shortcut for textureAccess(index).texture(); */ |
GrTexture* texture(int index) const { return this->textureAccess(index).getTexture(); } |
- /** Will this effect read the fragment position? */ |
+ /** Will this processor read the fragment position? */ |
bool willReadFragmentPosition() const { return fWillReadFragmentPosition; } |
void* operator new(size_t size); |
@@ -204,7 +201,7 @@ public: |
protected: |
/** |
- * Subclasses call this from their constructor to register GrTextureAccesses. The effect |
+ * Subclasses call this from their constructor to register GrTextureAccesses. The processor |
* subclass manages the lifetime of the accesses (this function only stores a pointer). The |
* GrTextureAccess is typically a member field of the GrProcessor subclass. This must only be |
* called from the constructor because GrProcessors are immutable. |
@@ -215,9 +212,9 @@ protected: |
: fWillReadFragmentPosition(false) {} |
/** |
- * If the effect will generate a backend-specific effect that will read the fragment position |
- * in the FS then it must call this method from its constructor. Otherwise, the request to |
- * access the fragment position will be denied. |
+ * If the prcoessor will generate a backend-specific processor that will read the fragment |
+ * position in the FS then it must call this method from its constructor. Otherwise, the |
+ * request to access the fragment position will be denied. |
*/ |
void setWillReadFragmentPosition() { fWillReadFragmentPosition = true; } |
@@ -236,4 +233,14 @@ private: |
typedef GrProgramElement INHERITED; |
}; |
+ |
+/** |
+ * This creates a processor outside of the memory pool. The processor's destructor will be called |
+ * at global destruction time. NAME will be the name of the created instance. |
+ */ |
+#define GR_CREATE_STATIC_PROCESSOR(NAME, PROC_CLASS, ARGS) \ |
+static SkAlignedSStorage<sizeof(PROC_CLASS)> g_##NAME##_Storage; \ |
+static PROC_CLASS* NAME SkNEW_PLACEMENT_ARGS(g_##NAME##_Storage.get(), PROC_CLASS, ARGS); \ |
+static SkAutoTDestroy<GrProcessor> NAME##_ad(NAME); |
+ |
#endif |