Cocos2d iphone CCSpriteBatchNode应用着色器?

Cocos2d iphone CCSpriteBatchNode应用着色器?,cocos2d-iphone,opengl-es-2.0,ccspritebatchnode,Cocos2d Iphone,Opengl Es 2.0,Ccspritebatchnode,我正在使用CoCoS2D2.0将着色器应用于我的BatchNode 我更新了ccV3F_C4B_T2F结构以容纳新的制服,因此它现在看起来如下所示: quad_.bl.NewCoords = (ccVertex2F) { newCoords.x, newCoords.y }; quad_.br.NewCoords = (ccVertex2F) { newCoords.x, newCoords.y }; quad_.tl.NewCoords = (ccVertex

我正在使用CoCoS2D2.0将着色器应用于我的BatchNode

我更新了ccV3F_C4B_T2F结构以容纳新的制服,因此它现在看起来如下所示:

 quad_.bl.NewCoords = (ccVertex2F) { newCoords.x, newCoords.y };
        quad_.br.NewCoords = (ccVertex2F) { newCoords.x, newCoords.y };
        quad_.tl.NewCoords = (ccVertex2F) { newCoords.x, newCoords.y };
        quad_.tr.NewCoords = (ccVertex2F) { newCoords.x, newCoords.y };
类型定义结构ccV3F C4B T2F {

}ccV3F_C4B_T2F

我向CCspritebatchnode的plist添加了一个新属性值,这是我要传递给着色器的值。 因此,当batchnode获得每个帧的偏移量、颜色rect等时。它还将获得我需要传递的值。成功了

然后,我从Batchnodes plist中获取值,并修改“updatetransform”以接收这些值。 看起来是这样的:

 quad_.bl.NewCoords = (ccVertex2F) { newCoords.x, newCoords.y };
        quad_.br.NewCoords = (ccVertex2F) { newCoords.x, newCoords.y };
        quad_.tl.NewCoords = (ccVertex2F) { newCoords.x, newCoords.y };
        quad_.tr.NewCoords = (ccVertex2F) { newCoords.x, newCoords.y };
我将CCSpriteBatchNode子类化并应用着色器:

顶点着色器:

\n\
attribute vec4 a_position;                          \n\
attribute vec2 a_texCoord;                          \n\
attribute vec4 a_color;                             \n\
attribute vec2 a_newcoords;                          \n\
\n\
varying lowp vec4 v_fragmentColor;                  \n\
varying mediump vec2 v_texCoord;                    \n\
varying mediump vec2 v_newcoords;                   \n\
\n\
void main()                                         \n\
{                                                   \n\
   gl_Position = CC_MVPMatrix * a_position;     \n\
   v_fragmentColor = a_color;                       \n\
   v_texCoord = a_texCoord;                     \n\
   v_newcoords = a_newcoords;                        \n\
 }                                                      \n\
";
片段着色器:

#ifdef GL_ES
precision highp float;
#endif

varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
varying vec2 v_newcoords;

 uniform sampler2D u_texture;

void main()
{
     vec2 texCoord = v_texCoord;
     vec4 texColor  = texture2D(u_texture, texCoord);

     vec2 MoveBy = vec2(v_newcoords.x, v_newcoords.y);
     vec4 Color1  = texture2D(u_texture, vec2(v_texCoord.x - MoveBy.x , v_texCoord.y));

     vec4 finalColor = vec4(texColor.r, texColor.g, Color1.b, texColor.a);
     gl_FragColor =  finalColor;
 }
顶点着色器获取“属性vec2 a_newcoords;”正确,但我无法从片段着色器访问“变化的v_newcoords”


有人知道我可能做错了什么吗

好奇您是如何确定顶点着色器获得“属性vec2 a_newcoords;”正确…在顶点着色器中,我写了:v_texCoord=a_texCoord-v_newcoords.x;。这些帧看起来好像有偏移量,偏移量与a_newcoords的值一致。例如,一帧的_newcoords值为30,另一帧为35,另一帧为25,这些值都与减去的值相匹配。你对我可能做错了什么有什么建议吗??