Chromium Code Reviews| Index: src/gpu/gl/GrGLProgram.cpp |
| diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp |
| index c1f5b37b07790fd2fce269d91f157687b0ae2925..5739cce45c8ce79029defc404dbb1a743a9cd7a3 100644 |
| --- a/src/gpu/gl/GrGLProgram.cpp |
| +++ b/src/gpu/gl/GrGLProgram.cpp |
| @@ -31,15 +31,15 @@ GrGLProgram::GrGLProgram(GrGLGpu* gpu, |
| GrGLuint programID, |
| const UniformInfoArray& uniforms, |
| const VaryingInfoArray& pathProcVaryings, |
| - GrGLInstalledGeoProc* geometryProcessor, |
| - GrGLInstalledXferProc* xferProcessor, |
| - GrGLInstalledFragProcs* fragmentProcessors, |
| + GrGLSLPrimitiveProcessor* geometryProcessor, |
| + GrGLSLXferProcessor* xferProcessor, |
| + const GrGLSLFragProcs& fragmentProcessors, |
| SkTArray<UniformHandle>* passSamplerUniforms) |
| : fBuiltinUniformHandles(builtinUniforms) |
| , fProgramID(programID) |
| , fGeometryProcessor(geometryProcessor) |
| , fXferProcessor(xferProcessor) |
| - , fFragmentProcessors(SkRef(fragmentProcessors)) |
| + , fFragmentProcessors(fragmentProcessors) |
| , fDesc(desc) |
| , fGpu(gpu) |
| , fProgramDataManager(gpu, programID, uniforms, pathProcVaryings) { |
| @@ -63,12 +63,9 @@ void GrGLProgram::abandon() { |
| /////////////////////////////////////////////////////////////////////////////// |
| -template <class Proc> |
| -static void append_texture_bindings(const Proc* ip, |
| - const GrProcessor& processor, |
| +static void append_texture_bindings(const GrProcessor& processor, |
| SkTArray<const GrTextureAccess*>* textureBindings) { |
| if (int numTextures = processor.numTextures()) { |
| - SkASSERT(textureBindings->count() == ip->fSamplersIdx); |
|
egdaniel
2016/01/13 17:01:58
This assert is the one casualty of this move, but
|
| const GrTextureAccess** bindings = textureBindings->push_back_n(numTextures); |
| int i = 0; |
| do { |
| @@ -84,37 +81,32 @@ void GrGLProgram::setData(const GrPrimitiveProcessor& primProc, |
| // we set the textures, and uniforms for installed processors in a generic way, but subclasses |
| // of GLProgram determine how to set coord transforms |
| - fGeometryProcessor->fGLProc->setData(fProgramDataManager, primProc); |
| - append_texture_bindings(fGeometryProcessor.get(), primProc, textureBindings); |
| + fGeometryProcessor->setData(fProgramDataManager, primProc); |
| + append_texture_bindings(primProc, textureBindings); |
| this->setFragmentData(primProc, pipeline, textureBindings); |
| const GrXferProcessor& xp = pipeline.getXferProcessor(); |
| - fXferProcessor->fGLProc->setData(fProgramDataManager, xp); |
| - append_texture_bindings(fXferProcessor.get(), xp, textureBindings); |
| + fXferProcessor->setData(fProgramDataManager, xp); |
| + append_texture_bindings(xp, textureBindings); |
| } |
| void GrGLProgram::setFragmentData(const GrPrimitiveProcessor& primProc, |
| const GrPipeline& pipeline, |
| SkTArray<const GrTextureAccess*>* textureBindings) { |
| - int numProcessors = fFragmentProcessors->fProcs.count(); |
| + int numProcessors = fFragmentProcessors.count(); |
| for (int i = 0; i < numProcessors; ++i) { |
| const GrFragmentProcessor& processor = pipeline.getFragmentProcessor(i); |
| - fFragmentProcessors->fProcs[i]->fGLProc->setData(fProgramDataManager, processor); |
| - this->setTransformData(primProc, |
| - processor, |
| - i, |
| - fFragmentProcessors->fProcs[i]); |
| - append_texture_bindings(fFragmentProcessors->fProcs[i], processor, textureBindings); |
| + fFragmentProcessors[i]->setData(fProgramDataManager, processor); |
| + this->setTransformData(primProc, processor, i); |
| + append_texture_bindings(processor, textureBindings); |
| } |
| } |
| void GrGLProgram::setTransformData(const GrPrimitiveProcessor& primProc, |
| const GrFragmentProcessor& processor, |
| - int index, |
| - GrGLInstalledFragProc* ip) { |
| - GrGLSLPrimitiveProcessor* gp = fGeometryProcessor.get()->fGLProc.get(); |
| - gp->setTransformData(primProc, fProgramDataManager, index, |
| - processor.coordTransforms()); |
| + int index) { |
| + fGeometryProcessor->setTransformData(primProc, fProgramDataManager, index, |
| + processor.coordTransforms()); |
| } |
| void GrGLProgram::setRenderTargetState(const GrPrimitiveProcessor& primProc, |