Ios GLSL奇怪的IF行为
我正在用OpenGL ES 3.0编写一个在iPad视网膜上运行的iPad应用程序 我第一次尝试使用变换反馈,顶点着色器的行为非常奇怪。IF命令中的布尔表达式似乎总是返回true,例如,此着色器:Ios GLSL奇怪的IF行为,ios,opengl-es,glsl,Ios,Opengl Es,Glsl,我正在用OpenGL ES 3.0编写一个在iPad视网膜上运行的iPad应用程序 我第一次尝试使用变换反馈,顶点着色器的行为非常奇怪。IF命令中的布尔表达式似乎总是返回true,例如,此着色器: #version 300 es in ivec2 coords; out highp uint vertexID; uniform sampler2D depthTexture; uniform int yResolution; void main () { ivec2 textC
#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);
有人知道我做错了什么吗?让if语句检查一个非变量
if (val == false)
{
vertexID = uint(6);
return;
}
如果两个参数都是非变量,则if的行为符合预期。如果至少有一个参数是变量,那么我会得到这种奇怪的行为,它会进入