gpt4 book ai didi

iphone - 关于切换着色器程序的问题(ES 2)

转载 作者:行者123 更新时间:2023-12-03 19:01:36 27 4
gpt4 key购买 nike

我正在尝试编写一个相当简单的 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);

如果单独执行,两个着色器可以正常工作(例如,使用第一个着色器注释部分)。但是当我将它们组合在一起时,就像上面一样,纹理贴图就会消失。我花了很长时间试图找出原因......

有人可以帮助我吗?谢谢。

最佳答案

您不能以这种方式组合着色器,只有使用 glUseProgram 指定的最后一个程序才会被使用。

要组合着色器,您必须手动生成一个新的着色器,它同时执行这两项操作。

关于iphone - 关于切换着色器程序的问题(ES 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3095166/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com