2012-11-08 15 views
6

Questo è il mio (imbustati) chiamata OpenGL che provoca una GL_INVALID_OPERATION:glTexImage2D provoca GL_INVALID_OPERATION

GLTextures.TexImage2D(TexImage2DTarget.TEXTURE_2D, 0, TexImageInternalFormat.LUMINANCE_ALPHA, Width, Height, TexImageFormat.LUMINANCE_ALPHA, TexImagePixelType.UNSIGNED_BYTE, source.GetData()); 

Questa chiamata funziona su Windows ma non su iOS, in Windows tutto funziona bene e viene visualizzata la texture. Io uso gli stessi valori enum su iOS e Windows e anche lo shader è lo stesso (con alcuni suggerimenti di precisione su iOS). Anche la maggior parte delle trame funziona su iOS.

risposta

3

ho trovato il problema pensando al fatto che venga eseguito sul desktop, ma non su iOS. Le trame OpenGL utilizzano un format e internal format e sono convertite da AFAIK da un formato all'altro quando i formati sono diversi ma l'implementazione OpenGL ES 2.0 di Apple non lo supporta.

Mi è venuto in mente che questo può essere l'unico problema per le trame non funzionanti e lo GL_INVALID_OPERATION. Ho controllato le mie enumerazioni e ho scoperto che la definizione di LUMINANCE_ALPHA in una enumerazione non aveva alcun valore assegnato e appena usato il numero della definizione prima di + 1. OpenGL lo ignora sul desktop perché il numero è stato un formato di trama valido, su iOS fallisce .

3

Le trame di luminanza alfa utilizzano la compressione della trama LATC.

E poiché iPhone non supporta EXT_texture_compression_latc estensione non è possibile utilizzare LATC texture su iPhone.

Maggiori informazioni:

http://www.opengl.org/registry/specs/EXT/texture_compression_latc.txt

http://www.glbenchmark.com/phonedetails.jsp?benchmark=glpro25&D=Apple+iPhone+5&testgroup=gl

+1

Ma le specifiche dicono: 'La ragione più importante per rendere questi nuovi formati compressi mostrano in modo identico a luminanza convenzionale e luminanza-alfa texel è quello di permettere alle applicazioni di sostituire perfettamente i nuovi formati compressi per GL_LUMINANCE esistenti e GL_LUMINANCE_ALPHA trame. Anche la scheda di riferimento rapido mostra che è supportata: http://www.khronos.org/opengles/sdk/docs/reference_cards/OpenGL-ES-2_0-Reference-card.pdf –

+0

Si prega di notare che i formati interni di le trame non sono necessariamente supportate da alcuna GPU (PowerVR nel tuo caso). Il driver OpenGL potrebbe provare a convertire la texture luminance-alpha in alcuni formati interni supportati, ma sui driver dei dispositivi mobili di solito non lo fanno. Non lavoro con l'iPhone ma su Android controllo sempre se è supportato un certo formato di texture controllando le estensioni GL e quindi caricando la texture del formato corretto. Per favore mi scusi per aver visto il tuo problema da un altro punto di vista (Android), sui driver di OpenGL per iPhone può essere migliore. – keaukraine

+0

Nessun problema, grazie. Ma ho pensato che dovrebbe funzionare. È difficile trovare ppl che ha affrontato lo stesso problema su iOS. –

Problemi correlati