summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Sakhartchouk <alexst@google.com> 2010-09-02 18:43:24 -0700
committer Alex Sakhartchouk <alexst@google.com> 2010-09-02 18:43:24 -0700
commitcaaac0f8271ddc34c1163cb45b4026c014b3ec12 (patch)
treeb48bebd4da2ab473d6c6b7af6235b6ebf1ec5830
parent8e95466b5aa16b13c9e39b7ff8167f47a643c4ba (diff)
Fixing fragment shader bounding code
Change-Id: I743dae12bb3f226f758a065d9b353eff36e2f964
-rw-r--r--libs/rs/rsProgramFragment.cpp26
-rw-r--r--libs/rs/rsProgramFragment.h1
2 files changed, 12 insertions, 15 deletions
diff --git a/libs/rs/rsProgramFragment.cpp b/libs/rs/rsProgramFragment.cpp
index ec9c569fcadd..83321d3c4601 100644
--- a/libs/rs/rsProgramFragment.cpp
+++ b/libs/rs/rsProgramFragment.cpp
@@ -62,15 +62,6 @@ ProgramFragment::ProgramFragment(Context *rsc, const uint32_t * params,
mTextureEnableMask |= 2;
}
- mUniformCount = 0;
- mUniformNames[mUniformCount++].setTo("uni_Tex0");
- mUniformNames[mUniformCount++].setTo("uni_Tex1");
-
- mConstantColorUniformIndex = -1;
- //if (!mVaryingColor) {
- mConstantColorUniformIndex = mUniformCount;
- mUniformNames[mUniformCount++].setTo("uni_Color");
- //}
init(rsc);
}
@@ -89,10 +80,6 @@ ProgramFragment::ProgramFragment(Context *rsc, const char * shaderText,
LOGE("Custom FP");
- mUniformCount = 2;
- mUniformNames[0].setTo("uni_Tex0");
- mUniformNames[1].setTo("uni_Tex1");
-
mTextureEnableMask = (1 << mTextureCount) -1;
init(rsc);
@@ -156,7 +143,7 @@ void ProgramFragment::setupGL2(const Context *rsc, ProgramFragmentState *state,
rsc->checkError("ProgramFragment::setupGL2 tex env");
}
- glUniform1i(sc->fragUniformSlot(ct), ct);
+ glUniform1i(sc->fragUniformSlot(mTextureUniformIndexStart + ct), ct);
rsc->checkError("ProgramFragment::setupGL2 uniforms");
}
@@ -177,12 +164,12 @@ void ProgramFragment::createShader()
mShader.append("uniform vec4 uni_Color;\n");
if (mUserShader.length() > 1) {
+ appendUserConstants();
for (uint32_t ct=0; ct < mTextureCount; ct++) {
char buf[256];
sprintf(buf, "uniform sampler2D uni_Tex%i;\n", ct);
mShader.append(buf);
}
- appendUserConstants();
mShader.append(mUserShader);
} else {
uint32_t mask = mTextureEnableMask;
@@ -275,11 +262,20 @@ void ProgramFragment::createShader()
void ProgramFragment::init(Context *rsc)
{
+ mUniformCount = 0;
+ //if (!mVaryingColor) {
+ mConstantColorUniformIndex = mUniformCount;
+ mUniformNames[mUniformCount++].setTo("uni_Color");
+ //}
+
if (mUserShader.size() > 0) {
for (uint32_t ct=0; ct < mConstantCount; ct++) {
initAddUserElement(mConstantTypes[ct]->getElement(), mUniformNames, &mUniformCount, "UNI_");
}
}
+ mTextureUniformIndexStart = mUniformCount;
+ mUniformNames[mUniformCount++].setTo("uni_Tex0");
+ mUniformNames[mUniformCount++].setTo("uni_Tex1");
createShader();
}
diff --git a/libs/rs/rsProgramFragment.h b/libs/rs/rsProgramFragment.h
index 7c1598ea3032..f08bb2548a28 100644
--- a/libs/rs/rsProgramFragment.h
+++ b/libs/rs/rsProgramFragment.h
@@ -57,6 +57,7 @@ protected:
float mConstantColor[4];
int32_t mConstantColorUniformIndex;
+ int32_t mTextureUniformIndexStart;
};
class ProgramFragmentState