我正在尝试将纹理渲染到屏幕的左下角,例如:
glViewPort(0, 0, width/4, height/4);
我无法执行该渲染。我画了一个四边形并做一些基本的事情。我已经尝试了所有渲染到四边形的变体,如这些链接和其他关于 SO 的讨论:
如何在 OpenGL ES 2.0 中将纹理绘制为 2D 背景?
我的顶点和片段着色器如下:
const char * VERTEX_SHADER =
" \n\
attribute vec4 a_position; \n\
attribute vec4 a_texCoord; \n\
\n\
\n\
#ifdef GL_ES \n\
varying mediump vec2 v_texCoord; \n\
#else \n\
varying vec2 v_texCoord; \n\
#endif \n\
\n\
void main() \n\
{ \n\
gl_Position = a_position; \n\
v_texCoord = a_texCoord.xy; \n\
} \n\
";
const char * FRAGMENT_SHADER =
" \n\
#ifdef GL_ES \n\
precision lowp float; \n\
#endif \n\
\n\
varying vec2 v_texCoord; \n\
uniform sampler2D u_texture; \n\
\n\
void main() \n\
{ \n\
gl_FragColor = texture2D(u_texture, v_texCoord); \n\
} \n\
";
我的渲染代码是这样的:
static const GLfloat squareVertices[] = {
-1.0f, -1.0f,
1.0f, -1.0f,
-1.0f, 1.0f,
1.0f, 1.0f,
};
static const GLfloat textureVertices[] = {
0.0f, 0.0f,
1.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f,
};
// ...
glUseProgram(myProgram_);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glViewPort(0, 0, width/4, height/4); // width and height are defined elsewhere
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, myTexture_); // myTexture_ has been successfully loaded and checked
// Update uniform values
glUniform1i(textureUniformLocation_, 0);
// Update attribute values.
glEnableVertexAttribArray(a_position_location_);
glEnableVertexAttribArray(a_texcoord_location_);
glVertexAttribPointer(a_position_location_, 2, GL_FLOAT, 0, 0, squareVertices);
glVertexAttribPointer(a_texcoord_location_, 2, GL_FLOAT, 0, 0, textureVertices;
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
顶点和片段着色器编译并且 glProgram 链接成功。我得到的只是屏幕左下角的一个白色矩形(当然,在已经渲染的场景的顶部)。我在这里错过了什么吗?