2015-10-21 13 views
9

mio codice è (dentro il vuoto principale):Come eseguire il cast di int per fluttuare in GLSL (WebGL)?

float res; 

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

    res = float(i)/15.0; 

    //... 

} 

Purtroppo ottengo un errore di sintassi a float(i)/15.0

Se ho appena scrivo i/15.0, allora l'errore è:

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) 

Se Ho appena provato i/15 quindi il risultato è un numero intero, ma mi piacerebbe ottenere un float.

Come è possibile trasmettere int a float?

+0

In javascript questa conversione viene eseguita automaticamente - res = i/15; – jeff

+0

Questo è GLSL, non javascript –

+1

I [incollato il codice sopra in glslsandbox.com e funziona bene] (http://glslsandbox.com/e#28445.0). Sei sicuro di non aver ricevuto quell'errore da una linea diversa nello shader? – gman

risposta

11

It seems che non è possibile eseguire il cast in GLSL. Pertanto, "devi utilizzare a constructor".

Prova questo:

// 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: Se si dispone di uno sguardo at the documentation, si dice che " ... In ogni tipo intero può essere convertito in carri, e gli interi e carri possono essere convertite in doppie ". ... Trovo strano che il tuo codice non sia accettato dal compilatore GLSL. (il commento di Reto Koradi)

+0

Stai guardando la documentazione per GLSL completo. La versione GLSL utilizzata con WebGL è basata su GLSL ES 1.00 (la versione GLSL che accompagna OpenGL ES 2.0), che non supporta le conversioni di tipo implicito. –

+0

Grazie per averlo indicato. Ho aggiunto un nuovo riferimento: http://www.shaderific.com/glsl-types/ – 865719

+0

Ricevo ancora l'errore di sintassi per qualche motivo: "Si è verificato un errore durante la compilazione degli shader: ERRORE: 0:33: '1.0': errore di sintassi ' –