Из того, что я прочитал в ваших предыдущих ответах, вы можете жить с размером текстуры 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 или что-то еще.