我試圖在我的WebGL程序中實現拾取(使用顏色和readPixels)。當我開始我的程序時,我創建了獨立的shaderProgram。一個用於phong陰影,另一個用於形成一種顏色以用於檢測哪個形狀被點擊。使用兩個或多個具有不同數量屬性的着色器時發生衝突
phong着色器有2個屬性。頂點位置和頂點法線。揀貨人員只需擁有該職位。
現在我發現,由於一些奇怪的原因,當這兩個着色器存在於同一個程序中,而我正在使用picking時,我的drawArray調用似乎失敗了。最後發生的事情是我的gl.vertexAttribPointer調用。我一直在搞亂,發現當我使用以下命令檢查活動屬性數組時: gl.getVertexAttrib(index,gl.VERTEX_ATTRIB_ARRAY_ENABLED);
兩個0,1返回true,如果我禁用1 gl.disableVertexAttribArray(這是當採摘着色器是活動的,gl.useProgram(採摘))
現在(1);一切再次運作。另一個解決方法是先用phong着色器繪製,然後使用着色器,並以某種方式神奇地使它正常。我猜測在這種情況下,當使用phong着色器時附加頂點法線緩衝區時,它會以某種方式停留在切換到拾取着色器和drawArray調用時。
我想知道如果我使用gl.enableAttribArray錯誤,並應切換着色器或類似的東西時禁用它們。
我也試着以不同的順序創建着色器程序,但沒有成功。
這就是我決定要做的事情,我知道每個着色器存在哪些頂點屬性,以及哪個着色器是活躍的,所以我只是包裝我的gl.useProgram調用,以便我可以先清理。 – nkassis 2012-03-15 15:52:50
其實useProgram影響制服。您可以通過製作同一程序的多個副本來模擬GL_ARB_uniform_buffer_object,實際上驅動程序可以在GL_ARB_uniform_buffer_object的底層進行此操作。 – gman 2012-03-19 20:07:16
你的意思是制服受到了什麼影響?據我瞭解,由於安全原因,一個程序的制服不能在另一個程序中使用 - 但是他們的狀態不應該受GL.useProgram影響,不是? – MikaelEmtinger 2012-03-20 10:08:02