Index: src/gpu/gl/GrGLProgram.h |
diff --git a/src/gpu/gl/GrGLProgram.h b/src/gpu/gl/GrGLProgram.h |
index defbd61965829377732acb364c80b1974c7efbf8..22afefb0111e881643ffec8091810ea25405b3f0 100644 |
--- a/src/gpu/gl/GrGLProgram.h |
+++ b/src/gpu/gl/GrGLProgram.h |
@@ -90,12 +90,13 @@ public: |
}; |
/** |
- * This function uploads uniforms and calls each GrGLProcessor's setData. It is called before a |
- * draw occurs using the program after the program has already been bound. It also uses the |
- * GrGLGpu object to bind the textures required by the GrGLProcessors. The color and coverage |
- * stages come from GrGLProgramDesc::Build(). |
+ * This function uploads uniforms, calls each GrGLProcessor's setData, and retrieves the |
+ * textures that need to be bound on each unit. It is the caller's responsibility to ensure |
+ * the program is bound before calling, and to bind the outgoing textures to their respective |
+ * units upon return. (Each index in the array corresponds to its matching GL texture unit.) |
*/ |
- void setData(const GrPrimitiveProcessor&, const GrPipeline&, const GrBatchTracker&); |
+ void setData(const GrPrimitiveProcessor&, const GrPipeline&, const GrBatchTracker&, |
+ SkTArray<const GrTextureAccess*>* textureBindings); |
protected: |
typedef GrGLProgramDataManager::UniformHandle UniformHandle; |
@@ -108,21 +109,16 @@ protected: |
const UniformInfoArray&, |
GrGLInstalledGeoProc* geometryProcessor, |
GrGLInstalledXferProc* xferProcessor, |
- GrGLInstalledFragProcs* fragmentProcessors); |
- |
- // Sets the texture units for samplers. |
- void initSamplerUniforms(); |
- template <class Proc> |
- void initSamplers(Proc*, int* texUnitIdx); |
+ GrGLInstalledFragProcs* fragmentProcessors, |
+ SkTArray<UniformHandle>* passSamplerUniforms); |
// A templated helper to loop over effects, set the transforms(via subclass) and bind textures |
- void setFragmentData(const GrPrimitiveProcessor&, const GrPipeline&); |
+ void setFragmentData(const GrPrimitiveProcessor&, const GrPipeline&, |
+ SkTArray<const GrTextureAccess*>* textureBindings); |
virtual void setTransformData(const GrPrimitiveProcessor&, |
const GrPendingFragmentStage&, |
int index, |
GrGLInstalledFragProc*); |
- template <class Proc> |
- void bindTextures(const Proc*, const GrProcessor&); |
/* |
* Legacy NVPR needs a hook here to flush path tex gen settings. |
@@ -150,6 +146,7 @@ protected: |
GrProgramDesc fDesc; |
GrGLGpu* fGpu; |
GrGLProgramDataManager fProgramDataManager; |
+ SkTArray<UniformHandle> fSamplerUniforms; |
friend class GrGLProgramBuilder; |
@@ -172,7 +169,8 @@ protected: |
const UniformInfoArray&, |
GrGLInstalledGeoProc*, |
GrGLInstalledXferProc* xferProcessor, |
- GrGLInstalledFragProcs* fragmentProcessors); |
+ GrGLInstalledFragProcs* fragmentProcessors, |
+ SkTArray<UniformHandle>* passSamplerUniforms); |
private: |
void didSetData() override; |