2016-07-11 23 views
0

Ich habe ein OpenGL-Programm, das OpenGL 3.2 Core-Profil auf Mac OS X und OpenGL ES 2.0 auf iOS verwendet.Punkt Sprites mit gl_PointSize rendert mit einer anderen Größe in OpenGL ES 2.0 und OpenGL 3+

Ein Teil meiner Anwendung rendert Sprites durch Schreiben auf gl_PointSize im Vertex-Shader. Leider scheint gl_PointSize in OpenGL 3 etwa 50x größer zu sein als in OpenGL ES 2.0. Die Dokumentation für jedes API besagt, dass gl_PointSize die Anzahl der Pixel definiert, so dass ich nicht sicher bin, warum dies der Fall sein würde. Gibt es vielleicht einen Standard-OpenGL-Parameter, der die Ausgabe von gl_PointSize geändert hat? Gibt es noch etwas, das den enormen Größenunterschied verursachen könnte?

Jede Plattform verwendet genau den gleichen Shader (Desktop hat ARB_ES2-Kompatibilität). Ich habe auch überprüft, dass alle gleichförmigen Eingänge identisch sind und beide mit der gleichen Auflösung rendern. Außerhalb des Shaders ist der einzige Punkt, den ich mit Sprite in Verbindung bringe, glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);. Auf jeder Plattform unabhängig voneinander kann ich die Punktgröße gut anpassen.

+0

jeweils 50% von X und Y? –

+0

@ NicolBolas Das ist 50x, was eine grobe Schätzung ist, um anzuzeigen, dass das eine viel größer ist als das andere. Da es sich um ein Punkt-Sprite handelt, würde ich annehmen, dass es immer gleich x und y wiedergibt. –

+0

Welche Werte verwenden Sie eigentlich? Eine Erklärung ist, dass Sie Größen verwenden, die über dem unterstützten Limit für iOS liegen. –

Antwort

1

Die Kommentare waren korrekt über die Netzhaut. Eine Kombination von Skalierungs-Multiplikationen führte zu unbeabsichtigten Ergebnissen aufgrund der Retina-Bildschirme mit zweifacher Auflösung. Dies führte dazu, dass die Punkt-Sprites auf OpenGL 3 16x größer gerendert wurden als auf OpenGL ES 2.0.

Wenn rohe Werte in den Shader geschrieben wurden, war der Point Sprite tatsächlich 2x größer, was die Fläche 4x ausfüllt.

die Skalierungsprobleme zu beheben und sie nützlich war dies aus der Beschreibung zu lesen:

Punkt Rasterung ein Fragment für jeden Framebuffer-Pixel erzeugt dessen Zentrum liegt in einem Quadrat auf der der Punkt zentriert (xw, yw) , mit Seitenlänge gleich der aktuellen Punktgröße.