Ich habe einen Vertex-Shader, in dem ich eine Textur-Suche mache, um gl_Position zu bestimmen. Ich verwende dies als Teil eines GPU-Partikel-Simulationssystems, in dem Partikelpositionen in einer Textur gespeichert werden.
Es sieht so aus: vec4 textureValue = texture2D(dataTexture, vec2(1.0, 1.0));
verhält sich im Simulator anders als das iPad-Gerät. Im Simulator ist die Textur-Suche erfolgreich (der Wert an dieser Stelle ist 0,5, 0,5) und mein Partikel erscheint dort. Auf dem iPad selbst liefert die Textur-Suche jedoch ständig 0.0, 0.0.
Ich habe beide Texturen des Formats GL_FLOAT und GL_UNSIGNED_BYTE ausprobiert.
Hat jemand anderes das erlebt? Die GLSL-ES-Spezifikation besagt, dass Textur-Lookups sowohl in den Vertex- als auch in den Fragment-Shadern durchgeführt werden können. Daher sehe ich nicht, was das Problem ist.
Ich verwende die neueste GM-Beta von iOS SDK 4.2
Ich habe das eben auch getestet. Mit iOS 4.3 können Sie auf dem Vertex-Shader sowohl auf dem Gerät als auch auf dem Simulator eine Textur-Suche durchführen. Es gibt jedoch ein bisschen Fremdheit (was vielleicht daran liegt, dass es nicht "offiziell" ist, wie es erwähnt wird). Auf dem eigentlichen Gerät (ich habe es auf dem iPad 2 getestet) müssen Sie sowohl den Fragment-Shader als auch den Vertex-Shader nachschlagen. Das heißt, wenn Sie es nicht tatsächlich für den Fragment-Shader verwenden, müssen Sie es trotzdem irgendwie referenzieren. Hier ist ein triviales Beispiel, in dem ich eine Textur übergebe und das rote Pixel verwende, um den y-Wert des Scheitelpunktes ein wenig zu verändern:
%Vor%Ich habe eine etwas ausführlichere Zusammenfassung darüber bei Ссылка
Dies ist nicht die einzige Sache, die sich im Sim gegenüber dem Gerät anders verhält. Ich mache dir den gleichen Vorschlag, den ich allen anderen mache: Ignoriere den Simulator, wenn du testen musst, wie die Dinge auf dem Gerät aussehen. Testen Sie nur Dinge wie Logik, Funktionalität, schauen Sie nicht auf die Sim und nur wenn Sie können.
Ich habe das Gefühl, GLES auf dem iPad (oder iPhone) unterstützt keine Textursuche in einem Vertex-Shader, aber zitiere mich nicht.
Wenn Texel-Lookup in Vertex-Shadern unterstützt wird, haben Sie vielleicht Ihre Textur-Koordinaten abgeschnitten oder umgebrochen? Weil 1.0x1.0 außerhalb der Textur IIRC ist.
1.0x1.0 im Umbruchmodus sollte 0.0x0.0 sein. 1.0x1.0 in Clipping sollte das letzte Texel sein.
Ich habe es selbst ausprobiert und Texture2D funktioniert auf dem iPad (sowohl Gerät als auch Simulator) unter iOS 4.2, wenn es im Vertex-Shader verwendet wird.
Meine beste Vermutung ist, dass Sie Mip-Mapping aktiviert haben, und das ist das Problem. Ich habe bemerkt, dass mip-mapped-Lookups im Vertex-Shader mit Texture2D im Simulator arbeiten, aber nicht auf dem Gerät. Sie können Mip-Maps mit Texture2D nicht im Vertex-Shader verwenden, da es nicht möglich ist, die zu verwendende Mip-Map-Ebene auszuwählen. Sie müssen Mip-Mapping für diese Textur deaktivieren oder stattdessen Texture2DLod verwenden, das Mip-Maps unterstützt.