【已解决】ImageView图片怎么变灰?

    const GLchar* pszFragSource =
    "#ifdef GL_ES \n\
    precision mediump float; \n\
    #endif \n\
    uniform sampler2D u_texture; \n\
    varying vec2 v_texCoord; \n\
    varying vec4 v_fragmentColor; \n\
    void main(void) \n\
    { \n\
    // Convert to greyscale using NTSC weightings \n\
    vec4 col = texture2D(u_texture, v_texCoord); \n\
    float grey = dot(col.rgb, vec3(0.299, 0.587, 0.114)); \n\
    gl_FragColor = vec4(grey, grey, grey, col.a); \n\
    }";
    GLProgram* pProgram = new GLProgram();
    pProgram->initWithByteArrays(ccPositionTextureColor_noMVP_vert, pszFragSource);
    imageview->getVirtualRenderer()->setGLProgram(pProgram);
    pProgram->release();
    CHECK_GL_ERROR_DEBUG();
    imageview->getVirtualRenderer()->getGLProgram()->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
    imageview->getVirtualRenderer()->getGLProgram()->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR);
    imageview->getVirtualRenderer()->getGLProgram()->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORD);
    CHECK_GL_ERROR_DEBUG();
    imageview->getVirtualRenderer()->getGLProgram()->link();
    CHECK_GL_ERROR_DEBUG();
    imageview->getVirtualRenderer()->getGLProgram()->updateUniforms();
    CHECK_GL_ERROR_DEBUG();

在cocos2dx3.4版本把上面的imageview->getVirtualRenderer()改成Sprite可以把图片变灰,而ImageView一点效果都没有?

cocos 源码里面就有 看看吧

在哪里没看到啊?

tests/cpp-tests/classes/ShaderTest 你确定没有?

可能getVirtualRenderer获取的是Scale9Sprite

所以,getVirtualRenderer之后再getSprite 试试

可以考虑用dynamic_cast 测试下对象是不是scale9sprite 然后在getSprite

按你这样做就可以了,果然要getVirtualRenderer后再getSprite,非常感谢。。。。

在请教一下,TextAtlas要怎么设置灰色的呢?setcolor其他颜色可以设置,但是灰色也设置不了。。

楼主 TextAtlas设置灰色解决了吗?