| Index: src/gpu/gl/GrGLFragmentProcessor.cpp
|
| diff --git a/src/gpu/gl/GrGLFragmentProcessor.cpp b/src/gpu/gl/GrGLFragmentProcessor.cpp
|
| index d2902c26ac30734cac52a979a3a0898cc8025c71..078491a5bff21d2ea36c76e1521c9399f2e489ab 100644
|
| --- a/src/gpu/gl/GrGLFragmentProcessor.cpp
|
| +++ b/src/gpu/gl/GrGLFragmentProcessor.cpp
|
| @@ -32,8 +32,8 @@ void GrGLFragmentProcessor::emitChild(int childIndex, const char* inputColor,
|
|
|
| /*
|
| * We now want to find the subset of coords and samplers that belong to the child and its
|
| - * descendants and put that into childCoords and childSamplers. To do so, we must do a
|
| - * backwards linear search on coords and samplers.
|
| + * descendants and put that into childCoords and childSamplers. To do so, we'll do a forwards
|
| + * linear search.
|
| *
|
| * Explanation:
|
| * Each GrFragmentProcessor has a copy of all the transforms and textures of itself and
|
| @@ -53,23 +53,20 @@ void GrGLFragmentProcessor::emitChild(int childIndex, const char* inputColor,
|
| * (C) (E) (F)
|
| * [c1] [e1,e2,e3] [f1,f2]
|
| *
|
| - * So if we're inside proc A's emitCode, and A is about to call emitCode on proc B, we want the
|
| - * EmitArgs that's passed onto B to only contain its and its descendants' coords. The
|
| + * So if we're inside proc A's emitCode, and A is about to call emitCode on proc D, we want the
|
| + * EmitArgs that's passed onto D to only contain its and its descendants' coords. The
|
| * EmitArgs given to A would contain the transforms [a1,b1,b2,c1,d1,e1,e2,e3,f1,f2], and we want
|
| - * to extract the subset [b1,b2,c1] to pass on to B. We can do this with a backwards linear
|
| - * search since we know that D's subtree has 6 transforms and B's subtree has 3 transforms (by
|
| - * calling D.numTextures() and B.numTextures()), so we know the start of B's transforms is 9
|
| - * from the end of A's transforms. We cannot do this with a forwards linear search since we
|
| - * don't know how many transforms belong to A (A.numTextures() will return 10, not 1), so
|
| - * we wouldn't know how many transforms to initially skip in A's array if using a forward linear
|
| - * search.
|
| + * to extract the subset [d1,e1,e2,e3,f1,f2] to pass on to D. We can do this with a linear
|
| + * search since we know that A has 1 transform (using A.numTransformsExclChildren()), and B's
|
| + * subtree has 3 transforms (using B.numTransforms()), so we know the start of D's transforms is
|
| + * 4 after the start of A's transforms.
|
| * Textures work the same way as transforms.
|
| */
|
| - int firstCoordAt = args.fFp.numTransforms();
|
| - int firstSamplerAt = args.fFp.numTextures();
|
| - for (int i = args.fFp.numChildProcessors() - 1; i >= childIndex; --i) {
|
| - firstCoordAt -= args.fFp.childProcessor(i).numTransforms();
|
| - firstSamplerAt -= args.fFp.childProcessor(i).numTextures();
|
| + int firstCoordAt = args.fFp.numTransformsExclChildren();
|
| + int firstSamplerAt = args.fFp.numTexturesExclChildren();
|
| + for (int i = 0; i < childIndex; ++i) {
|
| + firstCoordAt += args.fFp.childProcessor(i).numTransforms();
|
| + firstSamplerAt += args.fFp.childProcessor(i).numTextures();
|
| }
|
| TransformedCoordsArray childCoords;
|
| TextureSamplerArray childSamplers;
|
|
|