我正在尝试使用 openGL ES(用于 iPhone)渲染到纹理,然后在屏幕上显示纹理。一切正常,除了纹理顶部有 32 行间隙,底部 32 行被切断。就像我所有的绘图都向下偏移了 32 个像素,这导致底部的 32 行没有被绘制,因为它们在纹理之外。
这是一个非常简单的例子:
void RenderToTexture( int texture )
{
unsigned char buffer[4 * 320 * 480];
unsigned char colour[4];
colour[0] = 255;
colour[1] = 0;
colour[2] = 0;
colour[3] = 128;
for ( int i = 0; i < 4 * 320 * 480; i += 4 )
{
buffer[i] = colour[0];
buffer[i+1] = colour[1];
buffer[i+2] = colour[2];
buffer[i+3] = colour[3];
}
glBindTexture( GL_TEXTURE_2D, texture );
glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 320, 480, GL_RGBA, GL_UNSIGNED_BYTE, buffer );
}
结果如下:
只需使用 glColor4f() 而不是调用 RenderToTexture() 设置颜色,就会按预期产生红屏。