Può essere fatto, tutto ciò che devi fare è ottenere la potenza successiva di 2 più grande del non-POT.
quindi generare un framebuffer:
GLuint aFramebuffer;
glGenFramebuffersOES(1, &aFramebuffer);
e una consistenza:
GLuint aTexturebuffer;
glGenTextures(1, &aTexturebuffer);
poi si fa la stessa texture come le cose:
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);
Qui ho usato l'estensione draw_texture. textureWidth
e textureHeight
sono la potenza di 2 più grandi, e renderWidth
e renderHeight
sono la larghezza e l'altezza del trucco. Quindi, quando si esegue il binding a aFramebuffer
, verrà disegnato su texture.
Sfortunatamente, non funziona. glCheckFramebufferStatusOES restituisce GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS. – GhassanPL
@Kronikarz: hai creato anche un renderbuffer? Come in 'glRenderbufferStorageOES (GL_RENDERBUFFER_OES, GL_RGBA8_OES, width, height);' per connettersi al framebuffer? –
@Kronikarz: Nella mia esperienza, dovresti anche essere in grado di eseguire il rendering su una trama non POT senza dover arrotondare le dimensioni, credo. –