2012-12-20 3 views
7

Ich brauche gl_FragColor, um Fließkommawerte zu "malen", die auch negativ sein können (x < 0) und> 1.0. Ich möchte dann den Farbanhang des FBO verwenden, wo diese Werte gerendert werden und als Textur in einem anderen FBO verwendet werden. Nun habe ich unter http://www.khronos.org/opengles/sdk/docs/man/ (unter glTexImage2D) gelesen, dass alle Werte auf einen Bereich von [0, 1] geklemmt sind und ich auch keinen glClampColor-Befehl gefunden habe. Gibt es eine Möglichkeit, hier einen Workaround zu finden oder hat jemand eine Idee, die mir bei meinem Problem helfen könnte? :)Gleitkommadressuren in OpenGL ES 2.0 auf iOS ohne Klammern auf [0, 1]

GELöST

Es ist möglich, und die Werte werden nicht eingeklemmt auf [0, 1] überhaupt, wenn Gleitkomma-Texturen, aber es funktioniert nur GL_HALF_FLOAT_OES wie die Beschaffenheit der interne Format. Die Verwendung von GL_FLOAT führt stattdessen zu einem unvollständigen Framebuffer-Objekt, was wirklich sehr schade ist, denn ich habe eine sumed area table (SAT) erstellt und hier ein großes Präzisionsproblem bekommen. Im Allgemeinen scheint es so, als ob auf dem iPad2 nur halbe Gleitkommazahlen mit halber Genauigkeit (2 Bytes, 1 Vorzeichenbit + 5 Exponentenbits + 10 Fraktionen) unterstützt werden.

Arbeiten Schaffung der Texturfarbe attachement des FBO

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_HALF_FLOAT_OES, NULL); 

Eine weitere Sache zu erwähnen: Instrumente werden ein „Invalid Enum für Argumente‚Typ‘“ melden Nachricht, aber es trotzdem nicht funktioniert. Außerdem wird der Simulator anstelle der angegebenen halben Genauigkeit Texturen mit voller Genauigkeit verwenden (ich denke, da es keinen solchen Datentyp in C gibt). Aus diesem Grund werden Sie wahrscheinlich weniger Präzisionsprobleme am Simulator bekommen.

Aber die verwirrendste Sache ist, dass "GL_OES_texture_float" beim Drucken von glGetString (GL_EXTENSIONS) unterstützt wird. Wie bereits erwähnt, funktioniert es jedoch nicht.

+1

Was ist der interne Texturtyp, den Sie verwenden? –

+0

Sorry Leute, ich hoffe ihr hattet alle tolle Ferien. Vielen Dank bis jetzt. Das werde ich dieses Wochenende testen. – RayDeeA

+0

Das interne Format ist GL_RGB. Deshalb war ich besorgt, weil der Doc sagt, dass nur GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB und GL_RGBA erlaubt sind und dass alle auf [0,1] geklemmt sind. Siehe: http://www.khronos.org/opengles/sdk/docs/man/unter glTexImage2D – RayDeeA

Antwort

4

Ich glaube nicht, dass dies für Float-Texturen gilt. Überprüfen Sie die Erweiterung docs:

http://www.khronos.org/registry/gles/extensions/OES/OES_texture_float.txt

Es erwähnt.

„Die ausgewählten Gruppen verarbeitet werden, wie in Abschnitt 3.6.2 beschrieben, nach Endausbau zu RGBA stoppen Wenn das interne Format der Textur ist Fixpunkt, Bauteile werden auf [0,1] geklemmt, ansonsten werden die Werte nicht geändert. "

+0

Ich habe versucht, GL_OES_texture_float als Textur-Typ zu verwenden, aber das einzige Ergebnis war ein Protokoll, das besagt, dass es kein vollständiges Framebuffer-Objekt namens 8cd6 geschafft hat. :( – RayDeeA

+0

Es ist definitiv möglich, Float-Texturen auf iOS zu verwenden, aber Sie müssen Code anzeigen, wenn Sie erwarten, dass jemand Ihnen hilft. – Tark

+0

Sie hatten Recht.Es ist möglich und die Werte sind nicht geklammert, aber es funktioniert nur mit GL_HALF_FLOAT_OES als internes Format. Die Verwendung von GL_FLOAT führt stattdessen zu einem unvollständigen Framebuffer-Objekt. Es scheint also so, als ob nur Halbpräzisions-Gleitkommazahlen auf dem iPad2 erlaubt sind. Noch eine Sache zu erwähnen: Instruments meldet eine Meldung "Ungültige Aufzählung für Argument Typ" ", aber es funktioniert trotzdem. Ah und eine andere Sache ist auch das Glreadpixels, funktioniert nur mit GL_FLOAT als das Format GL_HALF_FLOAT_OES führt zu verschiedenen Gleitkommazahlen. Vielen Dank! – RayDeeA