aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/gpu/GrTBackendProcessorFactory.h
diff options
context:
space:
mode:
authorGravatar joshualitt <joshualitt@chromium.org>2014-12-03 15:34:20 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2014-12-03 15:34:20 -0800
commitc3a6eb23483e5d28073b509a5f637f41660de294 (patch)
tree0d54fe4d853cd53460b1229006c20d99989216ac /include/gpu/GrTBackendProcessorFactory.h
parent829e1b80b1020b17f2078020c990e079b70c077c (diff)
create and thread batch tracker object
I remove the factory on the next CL BUG=skia: Review URL: https://codereview.chromium.org/772513002
Diffstat (limited to 'include/gpu/GrTBackendProcessorFactory.h')
-rw-r--r--include/gpu/GrTBackendProcessorFactory.h86
1 files changed, 67 insertions, 19 deletions
diff --git a/include/gpu/GrTBackendProcessorFactory.h b/include/gpu/GrTBackendProcessorFactory.h
index a86fe38d92..98b5d6cb7e 100644
--- a/include/gpu/GrTBackendProcessorFactory.h
+++ b/include/gpu/GrTBackendProcessorFactory.h
@@ -41,14 +41,6 @@ public:
* described in this class's comment. */
virtual const char* name() const SK_OVERRIDE { return ProcessorClass::Name(); }
-
- /** Implemented using GLProcessor::GenKey as described in this class's comment. */
- virtual void getGLProcessorKey(const GrProcessor& processor,
- const GrGLCaps& caps,
- GrProcessorKeyBuilder* b) const SK_OVERRIDE {
- GLProcessor::GenKey(processor, caps, b);
- }
-
/** Returns a new instance of the appropriate *GL* implementation class
for the given GrProcessor; caller is responsible for deleting
the object. */
@@ -77,24 +69,80 @@ protected:
* typesafe and does not require any casting.
*/
template <class ProcessorClass>
-class GrTBackendGeometryProcessorFactory
- : public GrTBackendProcessorFactory<ProcessorClass,
- GrBackendGeometryProcessorFactory,
- GrGeometryProcessor,
- GrGLGeometryProcessor> {
+class GrTBackendGeometryProcessorFactory : public GrBackendGeometryProcessorFactory {
+public:
+ typedef typename ProcessorClass::GLProcessor GLProcessor;
+
+ /** Returns a human-readable name for the processor. Implemented using GLProcessor::Name as
+ * described in this class's comment. */
+ virtual const char* name() const SK_OVERRIDE { return ProcessorClass::Name(); }
+
+ /** Implemented using GLProcessor::GenKey as described in this class's comment. */
+ virtual void getGLProcessorKey(const GrGeometryProcessor& processor,
+ const GrBatchTracker& bt,
+ const GrGLCaps& caps,
+ GrProcessorKeyBuilder* b) const SK_OVERRIDE {
+ GLProcessor::GenKey(processor, bt, caps, b);
+ }
+
+
+ /** Returns a new instance of the appropriate *GL* implementation class
+ for the given GrProcessor; caller is responsible for deleting
+ the object. */
+ virtual GrGLGeometryProcessor* createGLInstance(const GrGeometryProcessor& gp,
+ const GrBatchTracker& bt) const SK_OVERRIDE {
+ return SkNEW_ARGS(GLProcessor, (*this, gp, bt));
+ }
+
+ /** This class is a singleton. This function returns the single instance. */
+ static const GrBackendGeometryProcessorFactory& getInstance() {
+ static SkAlignedSTStorage<1, GrTBackendGeometryProcessorFactory> gInstanceMem;
+ static const GrTBackendGeometryProcessorFactory* gInstance;
+ if (!gInstance) {
+ gInstance = SkNEW_PLACEMENT(gInstanceMem.get(),
+ GrTBackendGeometryProcessorFactory);
+ }
+ return *gInstance;
+ }
protected:
GrTBackendGeometryProcessorFactory() {}
};
template <class ProcessorClass>
-class GrTBackendFragmentProcessorFactory
- : public GrTBackendProcessorFactory<ProcessorClass,
- GrBackendFragmentProcessorFactory,
- GrFragmentProcessor,
- GrGLFragmentProcessor> {
+class GrTBackendFragmentProcessorFactory : public GrBackendFragmentProcessorFactory {
+public:
+ typedef typename ProcessorClass::GLProcessor GLProcessor;
+
+ /** Returns a human-readable name for the processor. Implemented using GLProcessor::Name as
+ * described in this class's comment. */
+ virtual const char* name() const SK_OVERRIDE { return ProcessorClass::Name(); }
+
+ /** Implemented using GLProcessor::GenKey as described in this class's comment. */
+ virtual void getGLProcessorKey(const GrFragmentProcessor& processor,
+ const GrGLCaps& caps,
+ GrProcessorKeyBuilder* b) const SK_OVERRIDE {
+ GLProcessor::GenKey(processor, caps, b);
+ }
+
+ /** Returns a new instance of the appropriate *GL* implementation class
+ for the given GrProcessor; caller is responsible for deleting
+ the object. */
+ virtual GrGLFragmentProcessor* createGLInstance(const GrFragmentProcessor& gp) const SK_OVERRIDE {
+ return SkNEW_ARGS(GLProcessor, (*this, gp));
+ }
+
+ /** This class is a singleton. This function returns the single instance. */
+ static const GrBackendFragmentProcessorFactory& getInstance() {
+ static SkAlignedSTStorage<1, GrTBackendFragmentProcessorFactory> gInstanceMem;
+ static const GrTBackendFragmentProcessorFactory* gInstance;
+ if (!gInstance) {
+ gInstance = SkNEW_PLACEMENT(gInstanceMem.get(),
+ GrTBackendFragmentProcessorFactory);
+ }
+ return *gInstance;
+ }
protected:
GrTBackendFragmentProcessorFactory() {}
};
-
#endif