hah*_*aha 5 iphone shader opengl-es
我正在尝试编写一个相当简单的opengl es 2程序.
我有两个不同的着色器,一个渲染纯色矩形到屏幕,另一个渲染纹理映射矩形.
我想首先绘制纯色矩形,然后在其上绘制纹理映射矩形.
glUseProgram(program1);
glUniform1f(shader1_uniforms[UNIFORM_SCREEN_WIDTH], (GLfloat)screenWidth);
glUniform1f(shader1_uniforms[UNIFORM_SCREEN_HEIGHT], (GLfloat)screenHeight);
glDisableVertexAttribArray(ATTRIB_TEX2);
glVertexAttribPointer(ATTRIB_VERTEX2, 2, GL_FLOAT, 0, 0, squareVertices);
glEnableVertexAttribArray(ATTRIB_VERTEX2);
glVertexAttribPointer(ATTRIB_COLOR2, 4, GL_FLOAT, 1, 0, squareColors);
glEnableVertexAttribArray(ATTRIB_COLOR2);
glDrawArrays(GL_TRIANGLE_STRIP,0,4);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glBindTexture(GL_TEXTURE_2D,1);
glUseProgram(program2);
glUniform1f(shader2_uniforms[UNIFORM_SCREEN_WIDTH], (GLfloat)screenWidth );
glUniform1f(shader2_uniforms[UNIFORM_SCREEN_HEIGHT], (GLfloat)screenHeight);
glUniform1i(shader2_uniforms[UNIFORM_UIMAP], 0);
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_FLOAT, 1, 0, squareColors);
glEnableVertexAttribArray(ATTRIB_COLOR);
glVertexAttribPointer(ATTRIB_TEX, 2, GL_FLOAT, 0, 0, squareTexCoords);
glEnableVertexAttribArray(ATTRIB_TEX);
// Draw
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisable(GL_BLEND);
Run Code Online (Sandbox Code Playgroud)
如果单独执行,则两个着色器正常工作(例如,使用第一个着色器注释零件).但是当我将它们组合在一起时,如上所述,纹理贴图将消失.我花了很长时间试图找出原因......
有人能帮我吗?谢谢.
您不能以这种方式组合着色器,只有使用 glUseProgram 指定的最后一个程序才会被使用。
要组合着色器,您必须手动生成一个新的着色器,它同时执行这两项操作。
| 归档时间: |
|
| 查看次数: |
1688 次 |
| 最近记录: |