(之前的问题编辑乱了)
我想使用 着色器 做个一个平铺的9宫格,在使用 setUniformLocationWith4f 遇到问题, 请问我哪里写错了
着色器代码
#ifdef GL_ES precision mediump float; #endifuniform vec4 u_insets;
varying vec2 v_texCoord;
varying vec4 v_color;void main(void)
{
float oX = 0.25000;//u_insets.x;
float oY = 0.34375;//u_insets.y;
float oW = 0.03125;//u_insets.z;
float oH = 0.15625;//u_insets.w;vec2 texC = v_texCoord;
texC.x = texC.x - oX;
texC.y = texC.y - oY;
texC.x = mod(texC.x, oW);
texC.y = mod(texC.y, oH);
texC.x = texC.x + oX;
texC.y = texC.y + oY;
vec4 col = texture2D(CC_Texture0, texC);gl_FragColor = v_color * col;
}<p> </p> <p><span style=""""color:#333333;font-family:arial;font-size:14px;line-height:normal;""""><br /> </span></p> <p><span style=""""color:#333333;font-family:arial;font-size:14px;line-height:normal;"""">c++代码</span></p> <p></p> <pre class=""""brush:cpp;""" toolbar:="""""" true;="""""" auto-links:="""""" false;"="""""">Texture2D::TexParams texParam; texParam.magFilter = GL_LINEAR; texParam.minFilter = GL_NEAREST; texParam.wrapS = GL_REPEAT; texParam.wrapT = GL_REPEAT; Texture2D* tex = frame->getTexture(); tex->setTexParameters(texParam); Size oSize = tex->getContentSize(); float invSx = 1 / oSize.width; float invSy = 1 / oSize.height; float x = (mOriginRect.origin.x + mLeftPadding)*invSx; float y = (mOriginRect.origin.y + mTopPadding)*invSy; float w = mInnerWidth*invSx; float h = mInnerHeight*invSy; x = 0.25000; y = 0.34375; w = 0.03125; h = 0.15625; GLProgram* pro = createProgram(); GLint insetsLocation = pro->getUniformLocation("u_insets"); pro->setUniformLocationWith4f(insetsLocation, x, y, w, h); log("location:%d", insetsLocation);
原图
左图: 在着色器里面使用 数值的效果(还没做边) 右图:Scale9Sprite
问题是
使用 pro->setUniformLocationWith4f(insetsLocation, x, y, w, h); 无法获取正确值

