cocos使用自定義著色器

2021-09-02 06:18:30 字數 1430 閱讀 8836

####簡述

遊戲中影象的一些效果展示,如果每個影象都是用使用對應的效果紋理實現,則會佔資源;此時可以編寫著色器用於實現效果。

cocos2d中使用glprogram封裝了著色器程式物件(shader program object 是多個著色器合併之後並最終鏈結完成的版本)。

為了解除元素與glprogram 一一對應的關係,無需繼承node重寫繫結的著色器程式物件。使用了glprogramstate儲存頂點屬性,紋理名稱等狀態資料,每幀繪製時每個元素都會根據自身設定共享的glprogramstate例項的狀態資料。

而當需要使用 自定義著色器時,需要單獨的glprogramstate例項儲存資料;

####**

function playerview:setdeathshader()   

--設定著色器

local vertshaderbytearray = [[

attribute vec4 a_position;

attribute vec2 a_texcoord;

attribute vec4 a_color;

varying vec4 v_fragmentcolor;

varying vec2 v_texcoord;

void main()

]] -- 置灰frag

local flagshaderbytearray = [[

varying vec4 v_fragmentcolor;

varying vec2 v_texcoord;

uniform float color;

void main(void)

]]local glprogram = cc.glprogramcache:getinstance():getglprogram("deathshader") or cc.glprogram:createwithbytearrays(vertshaderbytearray, flagshaderbytearray)

cc.glprogramcache:getinstance():addglprogram(glprogram, "deathshader")

local glprogramstate = cc.glprogramstate:create(glprogram)

--設定狀態資料

local color = math.random(1, 3)

glprogramstate:setuniformfloat("color", color)

self.sprite:setglprogram(glprogram)

self.sprite:setglprogramstate(glprogramstate)

end

####參考

我所理解的cocos2dx(8.4)

在pixi中使用你的自定義著色器

通過幾天的學習,對opengl shader有了乙個大致的了解。回到學習的初衷吧,在基於pixi.js重構d3專案的時候,因為精靈層級的問題,我得按照一定的先後順序將不同類別的精靈新增到場景中去。例如 針對人物關係的關係圖譜,所有的關係線必須要在所有的任務面板下面,但是移動人物面板的時候,與之關聯的...

Learn OpenGL(五) 定義自己的著色器

編寫 編譯 管理著色器是件麻煩事。在著色器的最後主題裡,我們會寫乙個類來讓我們的生活輕鬆一點,這個類從硬碟讀著色器,然後編譯和鏈結它們,對它們進行錯誤檢測,這就變得很好用了。這也會給你一些關於如何把我們目前所學的知識封裝到乙個抽象的物件裡的靈感。我們會在標頭檔案裡建立整個類,主要為了學習,也可以方便...

使用儲存著色器

glshadermanager是gltools的c 類 glshadermanager 預定義的識別符號 p62 表3.1 uniform glshadermanager usestockshader glenum shader.選擇乙個儲存著色器並提供這個著色器的uniform值,這些工作通過一次...