Hazel游戏引擎(097)用固定值填充帧缓冲的附加缓冲区

文中若有代码、术语等错误,欢迎指正

前言

  • 前情提要

    1. 由上节已经可以读取鼠标位置的颜色缓冲区的值
    2. 但是当读取不是quad的范围的值是一个奇怪的数字
    3. 是因为cpp代码中使用了glClearColor(color.r, color.g, color.b, color.a);将缓冲区默认填上了颜色
    4. 这个颜色本来是float值,转换为int读取出来则是奇怪的数字
  • 此节目的

    读取不是quad的范围的值返回特定的**-1**值

  • 如何实现

    使用新的OpenGL函数glClearTexImage,用特定值填充缓冲区

  • 实现细节

    1. 由于这个glClearTexImage函数根据是设置为int值,还是float值需要指定不同参数
    2. 需要适当考虑扩展性,但当前只需要填充int值,所以可以先简单写死,后面有增加则再改。

关键代码

  • 将缓冲区填上了颜色后,需用特定值填充帧缓冲的第二个缓冲区

    // 将渲染的东西放到帧缓冲中
    m_Framebuffer->Bind();
    RenderCommand::SetClearColor({ 0.1f, 0.1f, 0.1f, 1 });
    RenderCommand::Clear();
    
    /
    // 用-1填充帧缓冲的第二个颜色缓冲区
    m_Framebuffer->ClearAttachment(1, -1);
    
  • 具体填充函数

    void OpenGLFramebuffer::ClearAttachment(uint32_t attachmentIndex, int value)
    {
        HZ_CORE_ASSERT(attachmentIndex < m_ColorAttachments.size());
    
        auto& spec = m_ColorAttachmentSpecifications[attachmentIndex];
        ///
        ///
        // 使用glClearTexImage函数
        glClearTexImage(m_ColorAttachments[attachmentIndex], 0, 		Utils::FramebufferTextureFormatToGLenum(spec.TextureFormat), GL_INT, &value);
    }
    
    static GLenum FramebufferTextureFormatToGLenum(FramebufferTextureFormat format) {
        switch (format)
        {
            case FramebufferTextureFormat::RGBA8:
                return GL_RGBA8;
            case FramebufferTextureFormat::RED_INTEGER:
                return GL_RED_INTEGER;
        }
        HZ_CORE_ASSERT(false);
        return 0;
    }
    

效果


请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘建杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值