2017-06-20 2 views
-4

EDIT:GLSL compile mais ne liera pas

NVM ... J'ai trouvé l'erreur après un balayage ligne par ligne de ce shader ligne de 2000. Cela aurait dû être cassé pendant la compilation mais il est passé ... pourquoi? Il est littéralement une ligne qui est comme ça:

uv2.xy -= (someVec3Var.x * someFloatScale) + (anotherVec3Var2* anotherFloatScal); 

Donc, fondamentalement, l'erreur est que le premier générerait un flotteur et il est ajouté à un vec3 et il est affecté à un vec2 .... Ce code fonctionne dans HSLSL :(

Je vois quelque chose de vraiment bizarre ... mes GLSL compiles mais quand il lie, il les plaintes pour mon shader fragment:

0(1805) : error C7011: implicit cast from "vec3" to "vec2" 
0(1805) : error C7011: implicit cast from "vec4" to "vec3" 
0(1808) : error C7011: implicit cast from "vec3" to "vec2" 
0(1808) : error C7011: implicit cast from "vec4" to "vec3" 

je l'habitude d'avoir ces erreurs lors de la compilation et je fixé tous d'entre eux de telle sorte que tout est bon ... mais pourquoi seraient-ils apparaître dans le lien? T Ils se produisent également sur des lignes différentes que l'erreur de compilation qui se passait avant mon correctif. Pour quelle raison cela ne se produirait que pendant le temps de liaison? Est-ce que cela pourrait être dû au fait que j'ai des uniformes de même nom à travers le sommet et le fragment? J'ai lu quelque chose dans OpenGL ES, ils mapperaient à la même mémoire ... ce qui me convient car je veux qu'ils soient la même variable ... (sinon pourquoi les nommerais-je de la même manière?).

Merci!

+1

Où est le code? –

+0

C'est un shader de ligne 2000 ... lol devrais-je vraiment le mettre ici? – ChaoSXDemon

+4

Non, "lol". Vous devriez plutôt faire un [MCVE] du problème. Réduisez-le à la quantité minimale de code qui reproduit ces erreurs. –

Répondre

1

De nombreuses implémentations GLSL ne compilent pas réellement les shaders jusqu'à ce que vous appeliez LinkProgram. Lorsque vous appelez CompileShader, il effectue simplement une vérification de base de la syntaxe de base. En effet, pour obtenir des performances raisonnables sur la plupart des GPU, une optimisation complète du programme est nécessaire. Ainsi, vous pourriez voir ce que l'on considère normalement comme des erreurs de "compilation" seulement quand vous liez.