aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/effects/GrBitmapTextGeoProc.cpp
diff options
context:
space:
mode:
authorGravatar Jim Van Verth <jvanverth@google.com>2017-09-08 12:29:07 -0400
committerGravatar Jim Van Verth <jvanverth@google.com>2017-09-08 17:23:00 +0000
commit6c251d24cf90a5c4c091bb7b7373e72705f716d2 (patch)
tree2883b63c128631fdf71a6f08c970bde05779d637 /src/gpu/effects/GrBitmapTextGeoProc.cpp
parent71b45fbc4f6661fcea31415fec1ca77e74c96c22 (diff)
Revert "Revert "Add multitexture support to text and path shaders""
This does not add additional textures to the atlases, just adds the ability to access those textures in the shaders. Bug: skia:3550 Change-Id: I552e2c2e4713a5ea68801fdb8e3bab3867e77988 Reviewed-on: https://skia-review.googlesource.com/44261 Reviewed-by: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/gpu/effects/GrBitmapTextGeoProc.cpp')
-rw-r--r--src/gpu/effects/GrBitmapTextGeoProc.cpp30
1 files changed, 14 insertions, 16 deletions
diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp
index c2cf8ebc22..8013d2e4b8 100644
--- a/src/gpu/effects/GrBitmapTextGeoProc.cpp
+++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp
@@ -7,6 +7,7 @@
#include "GrBitmapTextGeoProc.h"
+#include "GrAtlasedShaderHelpers.h"
#include "GrTexture.h"
#include "glsl/GrGLSLFragmentShaderBuilder.h"
#include "glsl/GrGLSLGeometryProcessor.h"
@@ -36,12 +37,10 @@ public:
"AtlasSizeInv",
&atlasSizeInvName);
- GrGLSLVertToFrag v(kVec2f_GrSLType);
- varyingHandler->addVarying("TextureCoords", &v, kHigh_GrSLPrecision);
- vertBuilder->codeAppendf("%s = float2(%s.x, %s.y) * %s;", v.vsOut(),
- btgp.inTextureCoords()->fName,
- btgp.inTextureCoords()->fName,
- atlasSizeInvName);
+ GrGLSLVertToFrag uv(kVec2f_GrSLType);
+ GrGLSLVertToFrag texIdx(kFloat_GrSLType);
+ append_index_uv_varyings(args, btgp.inTextureCoords()->fName, atlasSizeInvName,
+ &uv, &texIdx, nullptr);
GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder;
// Setup pass through color
@@ -64,18 +63,16 @@ public:
btgp.localMatrix(),
args.fFPCoordTransformHandler);
+ fragBuilder->codeAppend("float4 texColor;");
+ append_multitexture_lookup(args, btgp.numTextureSamplers(),
+ texIdx, uv.fsIn(), "texColor");
+
if (btgp.maskFormat() == kARGB_GrMaskFormat) {
- fragBuilder->codeAppendf("%s = ", args.fOutputColor);
- fragBuilder->appendTextureLookupAndModulate(args.fOutputColor,
- args.fTexSamplers[0],
- v.fsIn(),
- kVec2f_GrSLType);
- fragBuilder->codeAppend(";");
+ // modulate by color
+ fragBuilder->codeAppendf("%s = %s * texColor;", args.fOutputColor, args.fOutputColor);
fragBuilder->codeAppendf("%s = float4(1);", args.fOutputCoverage);
} else {
- fragBuilder->codeAppendf("%s = ", args.fOutputCoverage);
- fragBuilder->appendTextureLookup(args.fTexSamplers[0], v.fsIn(), kVec2f_GrSLType);
- fragBuilder->codeAppend(";");
+ fragBuilder->codeAppendf("%s = texColor;", args.fOutputCoverage);
}
}
@@ -89,7 +86,7 @@ public:
fColor = btgp.color();
}
- SkASSERT(btgp.numTextureSamplers() == 1);
+ SkASSERT(btgp.numTextureSamplers() >= 1);
GrTexture* atlas = btgp.textureSampler(0).peekTexture();
SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height()));
@@ -108,6 +105,7 @@ public:
key |= (btgp.usesLocalCoords() && btgp.localMatrix().hasPerspective()) ? 0x1 : 0x0;
key |= btgp.maskFormat() << 1;
b->add32(key);
+ b->add32(btgp.numTextureSamplers());
}
private: