Je ne suis pas sûr d'utiliser glDrawTex_OES correctement. En fait, je suis sûr que je ne suis pas parce que je reçois un rectangle noir sur l'écran plutôt que la texture voulue.Problèmes avec glDrawTex_OES
Pour supprimer les points stupides: Oui, la chaîne GL Extension contient le jeton OES_draw_texture. Oui, la texture est chargée dans la mémoire/etc. correctement: il s'affiche très bien si je le mappe à un polygone. A la lecture des différents bits de documentation I can find, il semble que je doive "configurer [e] le rectangle de recadrage de texture ... via TexParameteriv() avec pname égal à TEXTURE_CROP_RECT_OES". Selon this post dans les forums khronos (meilleure documentation google peut trouver pour moi), les valeurs pour cela sont "Ucr, Vcr, Wcr, Hcr. C'est, gauche/bas/largeur/hauteur"
Voici le code de rendu :
void SetUpCamera(int windowWidth, int windowHeight, bool ortho) // only called once
{
glViewport(0, 0, windowWidth, windowHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(ortho)
{
float aspect = (float)windowWidth/(float)windowHeight;
float halfHeight = 32;
glOrthof(-halfHeight*aspect, halfHeight*aspect, -halfHeight, halfHeight, 1.0f, 100.0f);
}
else
{
mygluPerspective(45.0f, (float)windowWidth/(float)windowHeight, 1.0f, 100.0f); // I don't _actually_ have glu, but that's irrelevant--this does what you'd expect.
}
}
void DrawTexture(int windowWidth, int windowHeight, int texID)
{
// Clear back/depth buffer
glClearColor(1, 1, 1, 1);
glClearDepth(1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Next 2 lines probably not necessary, but, you know, sanity check:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// set up texture
glBindTexture(GL_TEXTURE_2D, texID); // texID is the glGenTexture result for a 64x64 2D RGB_8 texture - nothing crazy.
GLint coords [] = {0, 0, 64, 64};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, coords);
// blit? =(
glDrawTexiOES(windowWidth/2 - 32, windowHeight - 70, 10, 64, 64);
}
Suis-je manque quelque chose évidente? Faire quelque chose de tout simplement stupide?
Si quelqu'un peut expliquer pourquoi cela devrait être le cas et n'est pas un bug, je serais heureux de les récompenser pour avoir répondu à la question. –
+1 monsieur. J'aurais aimé lire cette réponse il y a quelques jours au lieu de maintenant, après avoir atteint indépendamment la même conclusion. – richq