WebGL切換著色器方法與錯誤

2021-08-28 05:36:32 字數 603 閱讀 2567

webgl一種著色器,是無法滿足渲染需求的,需要使用不同的渲染器,這次測試了 一下渲染器的切換。切換渲染器的時候,上乙個著色器的東西肯定是要清除的。

gl.deleteshader(fsshader);//刪除片元著色器

gl.deleteshader(csshader);//刪除頂點著色器

gl.deleteprogram(program);//刪除著色器程式

如果你使用了緩衝區,來進行繪製的話,還需要清除緩衝區。

gl.deletebuffer(buffer);
但是,在我這樣使用的使用,卻webgl繪製卻無效了,而且彈出了警告

webgl: invalid_operation: drawarrays: no buffer is bound to enabled attribute

查詢了很久最後發現,是因為從緩衝區讀取資料時,前後兩個的緩衝區的attribute不一致。因此還需要使用

gl.disablevertexattribarray(attri)
將上乙個著色器程式中的attribute變數關掉。

51 WebGL切換著色器

到目前為止,以前的程式都是用了乙個著色器 頂點著色器和片元著色器 如果乙個著色器就能繪製出場景中所有的物體,那就沒有問題。然而事實是,對不同物體經常需要使用不同的著色器來繪製,每個著色器中可能有非常複雜的邏輯以實現各種不同的效果。我們可以準備多個著色器,然後根據需要來切換使用它們。實現切換著色器 為...

webgl學習 著色器

著色器是一段使用glsl語言 一種類c的高階語言 編寫的簡短程式,它定義了3d物件的畫素點實際繪製到螢幕上的方式,webgl要求開發者要為每個待繪製的物件提供乙個著色器,乙個著色器可以應用於多個物件,因此在實際的應用中,整個場景通常提供乙個統一的 著色器。乙個著色器,通常由兩個部分組成 頂點著色器 ...

建立WebGL著色器程式

既然是高階,我們就要先從基礎入手,那麼先看一下如何建立乙個webgl的著色器程式 初始化著色器程式外掛程式 initshaders.js function initshaders gl,vertexshaderid,fragmentshaderid else var fragelem documen...