2012-03-14 67 views
0

在GLSL中爲renderscript創建自定義着色器時,程序生成器似乎將所有綁定爲統一常量的結構成員轉換爲浮點或vec,而不管它們的指定類型是什麼。此外,我有一個統一的編譯時報告以下錯誤:「無法鏈接程序,L0010,統一」統一名稱在這裏「精度不同。」我在兩個不同的結構中有相同的命名統一體,它們分別綁定到頂點和片段着色器。編輯] 感謝您對第二部分的回答。關於第一部分,我會嘗試更加清晰。在java端構建我的着色器程序時,我將常量綁定到程序構建器(包括頂點和片段),輸入是綁定到renderscript結構的java變量。一切都很好,所有我的浮點變量都可以在着色器程序中作爲制服完全訪問。然而,如果結構有一個如bool或int類型的成員,並且我嘗試了諸如if(i == UNI_memberInt),其中我是在着色器中聲明的整數計數器,或者如果(UNI_memberBool)那麼我得到錯誤「不能將int與float進行比較」或「if()條件必須是布爾類型」,這暗示了數據並未完整地呈現給GLSL程序。我可以通過使它們浮動值並使用像0.0這樣的東西來解決這個問題,因爲GLSL要求浮點值0總是精確的,但對我來說似乎很粗糙。如果我嘗試在for循環中使用UNI_memberInt作爲停止條件,則會發生類似的情況。Renderscript GLSL着色器將所有制服轉換爲浮動

回答

1

感謝您在開發者環聊中詢問此問題。不幸的是,Renderscript團隊的工程師不太理解您的問題的第一部分。如果你可以澄清那會很好。至於第二部分,這是一個已知的錯誤。

基本上,如果你在頂點和片段着色器中都有一個統一的「foo」,那麼頂點着色器是高精度的,片段着色器是中等的,GLSL編譯器無法處理。不幸的是,解決方案是兩者之間沒有任何名稱衝突。