J'essaie d'implémenter des shaders à partir de tutoriels en ligne (lighthouse3d.com) dans mon moteur OpenGL ES 2.0.GLSL ES variables locales crash?
Le problème est que, pour une raison quelconque, toutes les variables déclarées dans la portée de main() provoquent l'échec du shader entier. par exemple, cela ne fonctionne pas:
void main(){
vec4 color;
gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);
}
mais cela fonctionne parfaitement:
void main(){
//vec4 color;
gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);
}
Même chose avec mes vertex shaders. (EDIT: NVM, ne semble se produire avec Shaders fragment) La seule façon d'utiliser tout type de valeur non constante est d'utiliser des attributs, varyings, uniformes, etc., par exemple, cela fonctionne comme on peut s'y attendre:
uniform sampler2D texture;
varying lowp vec4 fragcol;
varying lowp vec2 texco;
void main(){
gl_FragColor = fragcol * texture2D(texture, texco);
}
en outre, J'ai beaucoup de mal à essayer de trouver de la documentation ou des ressources spécifiquement sur GLSL ES (ou quelle que soit l'appellation de cette version). Tout ce que j'ai pu trouver est la suivante: http://old.siggraph.org/publications/2006cn/course16/KhronosSpecs/ESLanguageSpec1.10.11.pdf
C'est tout ce que je pouvais trouver en rapport avec des déclarations de variables:
[snip]There are no default types. All variable and function declarations must have a declared type, and optionally qualifiers. A variable is declared by specifying its type followed by one or more names separated by commas.[snip]
Et c'est exactement ce que je faisais:
type déclaré: vec4
suivi d'un ou de plusieurs noms: couleur;
vec4 color
Je suis désemparés
EDIT: GLES20.glGetError() donne l'erreur 1282
Quel compilateur/implémentation utilisez-vous? –
oups! Je savais que j'avais oublié quelque chose. Je développe sur Android en utilisant le kit de développement android .. Je devrais mettre à jour mon poste – AlexRamallo