2017-03-04 3 views
1

Ich erhalte einen GL_INVALID_VALUE beim Aufruf von glTextureStorage3D auf Cubemap-Array-Texturen. Mein Code ist recht abstrahiert aber Dumping den rohen gl Code aus dem Texturbildungs ​​Fehler gl dazu läuft darauf hinaus:GL_INVALID_VALUE auf glTextureStorage3D mit Cubemap-Arrays

[SafeGL DUMP] glCreateTextures(glTargets[uint32_t(type)], 1, &id_) // glTargets[uint32_t(type)] = GL_TEXTURE_CUBE_MAP_ARRAY 
[SafeGL DUMP] glTextureParameteri(id_, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR) 
[SafeGL DUMP] glTextureParameteri(id_, GL_TEXTURE_MAG_FILTER, GL_LINEAR) 
[SafeGL DUMP] glTextureStorage3D(id_, mipLevels, glFormats[uint32_t(format_)], width, height, depth) // mipLevels = 1, glFormats[uint32_t(format_)] = GL_RG16F, width = 1024, height = 1024, depth = 4 
/!\ GL ERROR 501: GL_INVALID_VALUE -- Breaking to debugger. 

Die GL-Spezifikation legt fest, dass „Ein INVALID_VALUE Fehler erzeugt wird, wenn die Breite, Höhe oder Tiefe Negativ." Ausgenommen in meinem Fall ist es nicht ...

Meine einzige Vermutung ist, dass ich entweder einen undokumentierten Fehler habe, der anbieterspezifisch ist (GL 4.4 Kontext auf Nvidia 375.70 Treiber), oder ich mache etwas völlig falsches aber dann bin ich völlig am Ende.

Irgendeine Idee?

EDIT: Nur aktualisierte Treiber zu 378.66, vergeblich.

+0

'glTextureStorage3D' und' glCreateTextures' sind OpenGL 4.5-Funktionen, aber Sie erstellen 4.4 Kontext. – SurvivalMachine

+0

@ SurvivalMachine: wahrscheinlich, dass 4,4 ist das angeforderte Format, aber der Treiber gab 4,5, sonst 'glCreateTextures' wird nicht einmal funktionieren. – peppe

+0

@peppe Yup das war es! Gefunden, dass, während Sie sorgfältig die ganze Spezifikation für glTexStorage3D lesen. Markierung als gelöst :) – xtrium

Antwort

5

Das Problem ist, dass depth nicht durch 6 teilbar ist. Wenn Sie Cubemap-Arrays verwenden, beschäftigen Sie sich nicht mit Ebenen, Sie beschäftigen sich mit "LayerFaces".

Siehe auch here.