日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CocosStudio的节点如何使用自定义shader

發(fā)布時(shí)間:2023/12/2 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CocosStudio的节点如何使用自定义shader 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CocosStudio的節(jié)點(diǎn)如何使用自定義shader


問題:
我想對(duì)CocosStudio 的 某個(gè)UI 里的 某個(gè)圖片(如下圖所示的Image類型)使用自定義shader。
但是,我把 對(duì)傳統(tǒng)的cc.Sprite應(yīng)用自定義shader的方式 應(yīng)用于它時(shí),并不生效!因此我展開探索。

結(jié)論:
其實(shí)CocosStudio里面的Image類型就是cocos的ImageView類,ImageView的draw方法還是來自于祖先類Node的draw方法,因此對(duì)ImageView處理肯定無法正常應(yīng)用自定義shader。[具體不再贅述,讀者可自行看Node.cpp和Sprite.cpp的源碼,它倆的draw方法不同]

看ImageView類, getVirtualRenderer()可以獲得 Scale9Sprite類型的 _imageRenderer



再看 Scale9Sprite類,getSprite()可以獲得 Sprite類型的 _scale9Image (這不就是要找的傳統(tǒng)的cc.Sprite嘛!)


所以我們只需要對(duì) ImageView類型的 image_node實(shí)例,應(yīng)用自定義shader到 image_node:getVirtualRenderer():getSprite() 即可!

環(huán)境:
Cocos2d-x Lua架構(gòu)

代碼:
shader_util.lua

---@param shader_node 你要應(yīng)用shader的節(jié)點(diǎn) ---@param vs_path 頂點(diǎn)著色器文件路徑 ---@param vs_fs_path 片元著色器文件路徑 function shader_util.use_shader(shader_node, vs_path, fs_path)local vs_source = cc.FileUtils:getInstance():getStringFromFile(vs_path)local fs_source = cc.FileUtils:getInstance():getStringFromFile(fs_path)local program = cc.GLProgram:createWithByteArrays(vs_source, fs_source)local gl_program_state = cc.GLProgramState:getOrCreateWithGLProgram(program)shader_node:setGLProgramState(gl_program_state) end

test.lua

--下文的image_node就是 CocosStudio解析出來的Image類型的UI節(jié)點(diǎn) shader_util.use_shader(image_node:getVirtualRenderer():getSprite(), "test/aaa.vsh", "test/aaa.fsh")

總結(jié)

以上是生活随笔為你收集整理的CocosStudio的节点如何使用自定义shader的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。