From c984dd73c6f96d16e11813ae433ef70f7648ae77 Mon Sep 17 00:00:00 2001 From: Alex Sakhartchouk Date: Tue, 14 Sep 2010 09:50:43 -0700 Subject: Shader changes to allow for more flexible constant binding. Change-Id: Ic66e6e2a371c6e3d5dce1b00f63acab8c09bd110 --- libs/rs/rsFont.cpp | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) (limited to 'libs/rs/rsFont.cpp') diff --git a/libs/rs/rsFont.cpp b/libs/rs/rsFont.cpp index 5889bfb..0f815a2 100644 --- a/libs/rs/rsFont.cpp +++ b/libs/rs/rsFont.cpp @@ -387,14 +387,34 @@ bool FontState::cacheBitmap(FT_Bitmap *bitmap, uint32_t *retOriginX, uint32_t *r void FontState::initRenderState() { - uint32_t tmp[] = { - RS_TEX_ENV_MODE_REPLACE, 1, - RS_TEX_ENV_MODE_NONE, 0, - 0, 0 - }; - ProgramFragment *pf = new ProgramFragment(mRSC, tmp, 6); + String8 shaderString("varying vec4 varTex0;\n"); + shaderString.append("void main() {\n"); + shaderString.append(" lowp vec4 col = UNI_Color;\n"); + shaderString.append(" col.a = texture2D(UNI_Tex0, varTex0.xy).a;\n"); + shaderString.append(" gl_FragColor = col;\n"); + shaderString.append("}\n"); + + const Element *colorElem = Element::create(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 4); + mRSC->mStateElement.elementBuilderBegin(); + mRSC->mStateElement.elementBuilderAdd(colorElem, "Color", 1); + const Element *constInput = mRSC->mStateElement.elementBuilderCreate(mRSC); + + Type *inputType = new Type(mRSC); + inputType->setElement(constInput); + inputType->setDimX(1); + inputType->compute(); + + uint32_t tmp[4]; + tmp[0] = RS_PROGRAM_PARAM_CONSTANT; + tmp[1] = (uint32_t)inputType; + tmp[2] = RS_PROGRAM_PARAM_TEXTURE_COUNT; + tmp[3] = 1; + + mFontShaderFConstant.set(new Allocation(mRSC, inputType)); + ProgramFragment *pf = new ProgramFragment(mRSC, shaderString.string(), + shaderString.length(), tmp, 4); mFontShaderF.set(pf); - mFontShaderF->init(mRSC); + mFontShaderF->bindAllocation(mFontShaderFConstant.get(), 0); Sampler *sampler = new Sampler(mRSC, RS_SAMPLER_NEAREST, RS_SAMPLER_NEAREST, RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP, RS_SAMPLER_CLAMP); @@ -539,7 +559,7 @@ void FontState::issueDrawCommand() { mRSC->setFragmentStore(mFontProgramStore.get()); if(mFontColorDirty) { - mFontShaderF->setConstantColor(mFontColor[0], mFontColor[1], mFontColor[2], mFontColor[3]); + mFontShaderFConstant->data(mRSC, &mFontColor, 4*sizeof(float)); mFontColorDirty = false; } -- cgit v1.1