Se puede hacer, todo lo que necesita hacer es obtener la siguiente potencia de 2 más grande que la que no es POT.
luego generar un framebuffer:
GLuint aFramebuffer;
glGenFramebuffersOES(1, &aFramebuffer);
y una textura:
GLuint aTexturebuffer;
glGenTextures(1, &aTexturebuffer);
Luego haces la misma textura que las cosas:
glBindTexture(GL_TEXTURE_2D, aTexturebuffer);
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_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glColor4ub(0, 0, 0, 255);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureWidth, textureHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
int area[] = {0.0, 0.0, renderWidth, renderHeight};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, area);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, aFramebuffer);
glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, aTexturebuffer, 0);
Aquí he utilizado la extensión draw_texture. textureWidth
y textureHeight
son la potencia de 2 más grandes, y renderWidth
y renderHeight
son el ancho y la altura de la representación. Luego cuando se une a aFramebuffer
dibujará en la textura.
Lamentablemente, no funciona. glCheckFramebufferStatusOES devuelve GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS. – GhassanPL
@Kronikarz: ¿Creaste también un renderbuffer? Como en 'glRenderbufferStorageOES (GL_RENDERBUFFER_OES, GL_RGBA8_OES, width, height);' para conectarse al framebuffer? –
@Kronikarz: En mi experiencia, también debería ser capaz de procesar una textura sin POT sin redondear los tamaños, creo. –