| Index: src/gpu/gl/GrGLShaderBuilder.cpp
|
| ===================================================================
|
| --- src/gpu/gl/GrGLShaderBuilder.cpp (revision 8091)
|
| +++ src/gpu/gl/GrGLShaderBuilder.cpp (working copy)
|
| @@ -258,6 +258,22 @@
|
| return fUniforms[handle_to_index(u)].fVariable;
|
| }
|
|
|
| +bool GrGLShaderBuilder::addAttribute(GrSLType type,
|
| + const char* name) {
|
| + for (int i = 0; i < fVSAttrs.count(); ++i) {
|
| + const GrGLShaderVar& attr = fVSAttrs[i];
|
| + // if attribute already added, don't add it again
|
| + if (attr.getName().equals(name)) {
|
| + GrAssert(attr.getType() == type);
|
| + return false;
|
| + }
|
| + }
|
| + fVSAttrs.push_back().set(type,
|
| + GrGLShaderVar::kAttribute_TypeModifier,
|
| + name);
|
| + return true;
|
| +}
|
| +
|
| void GrGLShaderBuilder::addVarying(GrSLType type,
|
| const char* name,
|
| const char** vsOutName,
|
| @@ -491,6 +507,18 @@
|
| samplerHandles->push_back(textureSamplers[i].fSamplerUniform);
|
| }
|
|
|
| + int numAttributes = stage.getVertexAttribIndexCount();
|
| + const int* attributeIndices = stage.getVertexAttribIndices();
|
| + SkSTArray<GrEffect::kMaxVertexAttribs, SkString> attributeNames;
|
| + for (int i = 0; i < numAttributes; ++i) {
|
| + SkString attributeName("aAttr");
|
| + attributeName.appendS32(attributeIndices[i]);
|
| +
|
| + if (this->addAttribute(effect->vertexAttribType(i), attributeName.c_str())) {
|
| + fEffectAttributes.push_back().set(attributeIndices[i], attributeName);
|
| + }
|
| + }
|
| +
|
| GrGLEffect* glEffect = effect->getFactory().createGLInstance(effect);
|
|
|
| // Enclose custom code in a block to avoid namespace conflicts
|
| @@ -508,3 +536,16 @@
|
|
|
| return glEffect;
|
| }
|
| +
|
| +const SkString* GrGLShaderBuilder::getEffectAttributeName(int attributeIndex) const {
|
| + const AttributePair* attribEnd = this->getEffectAttributes().end();
|
| + for (const AttributePair* attrib = this->getEffectAttributes().begin();
|
| + attrib != attribEnd;
|
| + ++attrib) {
|
| + if (attrib->fIndex == attributeIndex) {
|
| + return &attrib->fName;
|
| + }
|
| + }
|
| +
|
| + return NULL;
|
| +}
|
|
|