quick-cocos2dx实现弹窗背景虚化

该博客介绍了如何通过quick-cocos2dx实现弹窗时背景的虚化效果,主要包括四个步骤:首先对背景截图,然后利用shader进行模糊处理,接着截图保存处理后的图像,最后释放原始截图以减少GPU资源消耗。这样做可以优化每帧渲染的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路:
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值