编辑:
NVM ......我在这个2000线着色器的逐行扫描后发现了错误。这应该在编译期间打破但它通过了......为什么?它实际上就是这样一条线:
uv2.xy -= (someVec3Var.x * someFloatScale) + (anotherVec3Var2* anotherFloatScal);
所以基本上错误是第一个会生成一个浮点数并且它被添加到vec3并且它被分配给一个vec2 ....这段代码适用于HSLSL:(
我看到一些非常奇怪的东西......我的GLSL编译但是当它链接时,它会投诉我的片段着色器:
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"
我曾经在编译期间遇到这些错误,并且我修复了所有错误,这样它们都很好......但为什么它们会出现在链接中?这些也发生在不同于我修复之前发生的编译错误的行上。任何原因只会在链接时发生?这可能是因为我的制服在顶点和碎片上的名字相同吗?我在OpenGL ES中读到了一些内容,它们会映射到同一个内存中...这对我很好,因为我希望它们是同一个变量...(否则我为什么要将它们命名为相同?)。
谢谢!
答案 0 :(得分:1)
在您调用LinkProgram之前,许多GLSL实现都不会实际编译着色器。当您调用CompileShader时,它只进行基本的语法健全性检查。这是因为要在大多数GPU上获得合理的性能,需要进行整个程序优化。因此,您可能会看到人们通常会考虑的内容"编译"只有当您链接时才会出错。