diff options
author | joshualitt <joshualitt@chromium.org> | 2014-12-03 15:34:20 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-03 15:34:20 -0800 |
commit | c3a6eb23483e5d28073b509a5f637f41660de294 (patch) | |
tree | 0d54fe4d853cd53460b1229006c20d99989216ac /include/gpu/GrTBackendProcessorFactory.h | |
parent | 829e1b80b1020b17f2078020c990e079b70c077c (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.h | 86 |
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 |