根据我在您之前的答案中读到的内容,您可以使用 2048x2048 的纹理大小。
我在做截图的时候也遇到了类似的问题,屏幕尺寸960x640 -> 1024x1024 纹理尺寸,我就是这么干的:
void *buffer = malloc( x * y * 4 );
glReadPixels(0,0,x,y,GL_RGBA,GL_UNSIGNED_BYTE,buffer);
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &screenShotTexture);
glBindTexture(GL_TEXTURE_2D, screenShotTexture);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_FALSE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
free(buffer);
当然,我确保 x 和 y 是 POT。
我还必须处理纹理贴图,如下所示:
static const float screenTexCoordsR[] = {
0.0, 0.0,
0.0, 0.9375,
0.625, 0.0,
0.625, 0.9375
};
你的不会那么浪费,而不是 0.9375 和 0.625 你会有 0.9453 或其他东西。