2017-06-20 115 views
-4

編輯:GLSL編譯但不會鏈接

NVM ...我發現在這個2000行着色器的逐行掃描後出現的錯誤。這應該在編譯期間破壞,但它通過了......爲什麼?它實際上是一種行是這樣的:

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

所以基本上的錯誤是第一個將產生浮動並且將其添加到VEC3和它分配給VEC 2 ....這個代碼在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中讀了一些東西,他們會映射到相同的內存......這對我來說很好,因爲我希望它們是同一個變量......(否則爲什麼我會將它們命名爲相同?)。

謝謝!

+1

代碼在哪裏? –

+0

這是一個2000行着色器...大聲笑我應該真的把它放在這裏嗎? – ChaoSXDemon

+4

不,「大聲笑」。您應該改爲解決問題的[MCVE]。將其減少到能夠再現這些錯誤的最小代碼量。 –

回答

1

許多GLSL實現在調用LinkProgram之前並不實際編譯着色器。當你調用CompileShader時,它只是做一個基本的語法完整性檢查。這是因爲要在大多數GPU上獲得合理的性能,需要整個程序優化。因此,只有鏈接時,您纔會看到通常會認爲「編譯」錯誤的內容。