我正在使用OpenGL ES 3.0编写在iPad Retina上运行的iPad应用程序
我试图第一次使用变换反馈,而顶点着色器的表现非常奇怪。看起来IF命令中的布尔表达式总是返回true,例如这个着色器:
#version 300 es
in ivec2 coords;
out highp uint vertexID;
uniform sampler2D depthTexture;
uniform int yResolution;
void main () {
ivec2 textCoords = coords;
textCoords.y = yResolution - 1 - coords.y;
bool val = true;
bool val2 = false;
if (val == val2) {
vertexID = uint(6);
return;
}
vertexID = uint(4);
return;
}
当我映射VBO并检查值得到6!
我将发布下面的绘图和映射代码:
glUseProgram(_ValidInputPixelsProg);
uniforms[UNIFORM_VALID_INPUT_PIXEL_DEPTH_TEXTURE] = glGetUniformLocation(_ValidInputPixelsProg, "depthTexture");
uniforms[UNIFORM_VALID_INPUT_PIXEL_Y_RESOLUTION] = glGetUniformLocation(_ValidInputPixelsProg, "yResolution");
glUniform1i(uniforms[UNIFORM_VALID_INPUT_PIXEL_DEPTH_TEXTURE], 10);
glUniform1i(uniforms[UNIFORM_VALID_INPUT_PIXEL_Y_RESOLUTION], RESOLUTION_Y);
glEnable(GL_RASTERIZER_DISCARD);
glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, inputTFB);
glBindVertexArray(validPixelsVA);
glBindBuffer(GL_ARRAY_BUFFER, _inputTFBBuffer);
glBeginTransformFeedback(GL_POINTS);
glDrawArrays(GL_POINTS, 0, RESOLUTION_INNER_XY);
glEndTransformFeedback();
glBindVertexArray(0);
glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, 0);
glDisable(GL_RASTERIZER_DISCARD);
glFlush();
glBindBuffer(GL_ARRAY_BUFFER, indexValidInputPixels);
GLuint* ptr = (GLuint*)(glMapBufferRange(GL_ARRAY_BUFFER, 0, RESOLUTION_INNER_XY * sizeof(GLuint), GL_MAP_READ_BIT));
ptr += 320 + 120;
NSLog(@"\nshader value = %u \n", *ptr);
glUnmapBuffer(GL_ARRAY_BUFFER);
有人知道我做错了吗?
答案 0 :(得分:0)
让if语句检查非变量。
if (val == false)
{
vertexID = uint(6);
return;
}