最近小弟在研究cocos shader方面的知识 刚入门 碰到问题自己又无法解决 斗胆请教各位大佬
我原本自己写了一个shader程序 无法运行看不到纹理 后来我又把网上某位大佬的例子 抄了过来 还是无法看到纹理 心中甚是疑惑特来请教:
下面这是大佬的例子 也没有报错就是纹理显示不出来
创建精灵:
auto sprite = Sprite::create("HelloWorld.png");
if (sprite == nullptr)
{
problemLoading("'HelloWorld.png'");
}
else
{
sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
this->addChild(sprite);
shaderNode(sprite);
}
这是方法
void HelloWorld::shaderNode(Node* node)
{
GLProgram* program = GLProgramCache::getInstance()->getGLProgram("testShader");
if (program == nullptr)
{
program = GLProgram::createWithFilenames("test.vert", "test.frag");
GLProgramCache::getInstance()->addGLProgram(program, "testShader");
}
GLProgramState* programState = GLProgramState::getOrCreateWithGLProgram(program);
programState->setUniformVec4("u_grayParam", Vec4(0.2f, 0.3f, 0.5f, 1.0f));
node->setGLProgramState(programState);
}
顶点着色器
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main()
{
gl_Position = CC_PMatrix * a_position;
v_texCoord = a_texCoord;
}
片元着色器
varying vec2 v_texCoord;
uniform vec4 u_grayParam;
void main()
{
vec4 texColor = texture2D(CC_Texture0, v_texCoord);
texColor.rgb = texColor.r * u_grayParam.r + texColor.g * u_grayParam.g + texColor.b * u_grayParam.b;
gl_FragColor = texColor;
}