思路:
1. 先将背景截图(图1)。
2. 用shader将图1进行模糊处理。
3. 对图1进行截图(图2)。
4. 保留图2,释放掉图1。

原因:shader渲染是每帧进行,图1一直存在的话会耗费GPU资源渲染。故再次截屏生成图2释放掉图1,可以降低开销。
local win_size = size or (cc.Director:getInstance():getWinSize()) --截屏 local
render_texture = cc.RenderTexture:create(win_size.width, win_size.height)
render_texture:begin() app:mainScene():visit() render_texture:endToLua() local
photo_texture =render_texture:getSprite():getTexture() local sprite_photo = cc.
Sprite:createWithTexture(photo_texture) :addTo(self) :pos(display.cx,
display.cy) --强制渲染sprite_photo:visit() --模糊处理 local size = sprite_photo:
getTexture():getContentSizeInPixels() local program = cc.GLProgram
:createWithFilenames("res/shaders/2d_default.vert",
"res/shaders/example_Blur.frag") --此处的shader调用的是cocos2d-x-3.6\tests\cpp-tests\
Resources\Shaders下面的example_Blur.fsh。 local gl_program_state = cc.GLProgramState
:getOrCreateWithGLProgram(program) sprite_photo:
setGLProgramState(gl_program_state) --设置模糊参数sprite_photo:getGLProgramState()
:setUniformVec2("resolution", cc.p(size.width, size.height)) sprite_photo:
getGLProgramState():setUniformFloat("blurRadius",blurRadius or 16) sprite_photo:
getGLProgramState():setUniformFloat("sampleNum",sampleNum or 8) --再次截屏 local
render_texture1 = cc.RenderTexture:create(size.width, size.height)
render_texture1:begin() sprite_photo:visit() render_texture1:endToLua() local
photo_texture1 =render_texture1:getSprite():getTexture() local sprite_photo1 =
cc.Sprite:createWithTexture(photo_texture1) :addTo(self, -1) :pos(display.cx,
display.cy) --销毁第一次截屏图片self:removeChild(sprite_photo)

技术
©2019-2020 Toolsou All rights reserved,
【贪心算法】哈夫曼编码问题VHDL——JK触发器react 项目--博客系统数据库期末复习:综合应用题汇总面过了,起薪30k找出游戏的获胜者(java)JAVA实验四集合与函数式编程实验排序会了递归,不学非递归太可惜了SQL综合题 员工单位综合题数据库作业五