【发布时间】:2015-03-14 22:41:35
【问题描述】:
我正在使用 SDL2 测试 OpenGL ES 2.0,但由于某种原因,我无法在屏幕上绘制任何内容。我正确配置了我的着色器,它正确编译并由顶点属性绑定,但仍然没有。如果我为 MacOSX 或 Windows 编译应用程序,三角形会绘制。
这是我的着色器:
[顶点着色器]
attribute vec3 vPosition;
void main() {
gl_Position = vec4(vPosition.xyz, 1.0);
}
[片段着色器]
precision mediump float;
varying vec4 _color;
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
还要注意,在链接着色器之前,我称之为:
glBindAttribLocation(programObj, 0, "vPosition");
[绘图代码]
glUseProgram(programObj);
GLfloat vVertices[] = {0.0f, 0.5f, 0.0f,
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f};
glViewport(0, 0, 320, 480);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// Load the vertex data
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 3);
SDL_GL_SwapWindow(window);
正如我之前提到的,这在 MacOSX 或 Windows 上运行良好,但是当我为 iOS 编译它时,没有任何效果。谁能指出我做错了什么?
【问题讨论】:
-
我注意到的一件事是您在片段着色器中声明了一个
varying变量,而该变量未在顶点着色器中声明。我不认为它应该造成任何损害,因为它没有被使用。但您可能想尝试删除它以确保安全。