2015-10-21 5 views
9

Mein Code ist (innerhalb der void main):Wie kann man int in GLSL (WebGL) floaten?

float res; 

for(int i=0; i<15; i++) { 

    res = float(i)/15.0; 

    //... 

} 

Leider float(i)/15.0

Wenn ich i/15.0 nur einen Syntaxfehler bei ich schreiben, dann ist der Fehler:

wrong operand types no operation '/' exists that takes a left-hand operand of type 'mediump int' and a right operand of type 'const float' (or there is no acceptable conversion) 

Wenn Ich versuche einfach i/15 dann ist das Ergebnis eine ganze Zahl, aber ich möchte einen Float bekommen. Wie ist es möglich int zu float zu übertragen?

+0

In Javascript wird diese Konvertierung automatisch durchgeführt - res = i/15; – jeff

+0

Dies ist GLSL, nicht Javascript –

+1

Ich [fügte Ihren Code oben in glslsandbox.com und es funktioniert gut] (http://glslsandbox.com/e#28445.0). Bist du sicher, dass du diesen Fehler nicht von einer anderen Zeile in deinem Shader erhalten hast? – gman

Antwort

11

It seems, die nicht in GLSL umgewandelt werden dürfen. Daher müssen Sie "a constructor" verwenden.

Try this:

// http://www.shaderific.com/glsl-types/ 
// "Implicit type conversions are not supported. 
// Type conversions can be done using constructors..." 
float i_float = float(i); 
res = i_float/15.0; 

PS: Wenn Sie einen Blick at the documentation haben, heißt es, dass “... So oder Integer-Typ kann in Schwimmern umgewandelt werden, und ganze Zahlen und Schwimmer können in Doppel umgewandelt werden . " ... Ich finde es seltsam, dass Ihr Code vom GLSL-Compiler nicht akzeptiert wird. (vgl. Reto Koradis Kommentar)

+0

Sie suchen nach Dokumentation für vollständige GLSL. Die mit WebGL verwendete GLSL-Version basiert auf GLSL ES 1.00 (die GLSL-Version, die mit OpenGL ES 2.0 einhergeht), die implizite Typkonvertierungen nicht unterstützt. –

+0

Vielen Dank, dass Sie darauf hingewiesen haben. Ich habe eine neue Referenz hinzugefügt: http://www.shaderific.com/glsl-types/ – 865719

+0

Ich bekomme immer noch Syntaxfehler aus irgendeinem Grund: 'Beim Kompilieren der Shader ist ein Fehler aufgetreten: ERROR: 0:33: '1.0': Syntaxfehler ' –