查看: 980|回复: 2

osg缓冲区相关问题

[复制链接]

该用户从未签到

发表于 2016-8-19 09:06:09 | 显示全部楼层 |阅读模式
我想问一下 这里的        GLuint m_Resolve_FBO; // MSAA FBO is copied to this FBO after render.
        GLuint m_Resolve_ColorTex; // color texture for above FBO.
        GLuint m_MSAA_FBO; // framebuffer for MSAA RTT
        GLuint m_MSAA_ColorTex; // color texture for MSAA RTT
        GLuint m_MSAA_DepthTex; // depth texture for MSAA RTT
        GLint m_width; // width of texture in pixels
        GLint m_height; // height of texture in pixels
        int m_samples;  // sample width for MSAA
这些变量的含义是什么意思  下面的代码是为其分配缓冲区的  这些缓冲区的作用是干嘛的。还有getGLExtensions函数和  getTextureExtensions 函数有什么用啊


typedef osg::FBOExtensions OSG_GLExtensions;
typedef osg::Texture::Extensions OSG_Texture_Extensions;
static const OSG_GLExtensions* getGLExtensions(const osg::State& state)
{
#if(OSG_VERSION_GREATER_OR_EQUAL(3, 4, 0))
        return state.get<osg::GLExtensions>();
#else
        return osg::FBOExtensions::instance(state.getContextID(), true);
#endif
}
static const OSG_Texture_Extensions* getTextureExtensions(const osg::State& state)
{
#if(OSG_VERSION_GREATER_OR_EQUAL(3, 4, 0))
        return state.get<osg::GLExtensions>();
#else
        return osg::Texture::getExtensions(state.getContextID(), true);
#endif
}
const OSG_GLExtensions* fbo_ext = getGLExtensions(*state);

        // We don't want to support MIPMAP so, ensure only level 0 is allowed.
        const int maxTextureLevel = 0;

        // Create an FBO for secondary render target ready for application of lens distortion shader.
        fbo_ext->glGenFramebuffers(1, &m_Resolve_FBO);

        glGenTextures(1, &m_Resolve_ColorTex);
        glBindTexture(GL_TEXTURE_2D, m_Resolve_ColorTex);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, maxTextureLevel);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);

        // Create an FBO for primary render target.
        fbo_ext->glGenFramebuffers(1, &m_MSAA_FBO);

        const OSG_Texture_Extensions* extensions = getTextureExtensions(*state);

        // Create MSAA colour buffer
        glGenTextures(1, &m_MSAA_ColorTex);
        glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_MSAA_ColorTex);
        extensions->glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, m_samples, GL_RGBA, m_width, m_height, false);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER_ARB);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER_ARB);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LEVEL, maxTextureLevel);

        // Create MSAA depth buffer
        glGenTextures(1, &m_MSAA_DepthTex);
        glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_MSAA_DepthTex);
        extensions->glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, m_samples, GL_DEPTH_COMPONENT, m_width, m_height, false);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAX_LEVEL, maxTextureLevel);

        // check FBO status
        GLenum status = fbo_ext->glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT);
        if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
        {
                osg::notify(osg::WARN) << "Error setting up frame buffer object." << std::endl;
        }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表