OpenGL辅助缓冲区

时间:2016-03-17 10:55:11

标签: c++ windows opengl

我正在开发一个使用OpenGL,C ++和Windows的项目,我一直在调试AMD的CodeXL,并注意到我的正面,背面,深度和模板缓冲区有4个全分辨率“辅助缓冲区”。据我所知,这些都是完全未使用的,只是占用内存,我只是想知道是否有任何方法可以不对它们进行初始化,或者这可能是CodeXL更错误地报告它们已被初始化?

据我所知,我对这个代码端的了解最多的是PIXELFORMATDESCRIPTOR,它有辅助和累积缓冲区的标志,两者都设置为零。

我只是想知道是否有其他人经历过这种情况以及它是否可以避免(可能需要这些缓冲区)。

由于

更新

尝试了“正确的”上下文创建链接,这更好,因为它在版本符合性方面是明确的,但是它没有解决这个问题。我最后尝试一个for循环传递计数器作为DescribePixelFormat()的索引尝试匹配一个格式与0 aux缓冲区和我需要的其余部分,我基本上找不到任何支持它的所有工作,这里是该搜索的代码(只是一个基本测试)。

        PIXELFORMATDESCRIPTOR targetPixFmt;

        memset(&targetPixFmt, 0, sizeof(PIXELFORMATDESCRIPTOR));
        targetPixFmt.nSize = sizeof(PIXELFORMATDESCRIPTOR);
        targetPixFmt.nVersion = 1;
        targetPixFmt.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW;
        targetPixFmt.iPixelType = PFD_TYPE_RGBA;
        targetPixFmt.cColorBits = colorBitDepth;
        targetPixFmt.cDepthBits = depthBitDepth;
        targetPixFmt.cStencilBits = stencilBitDepth;

        s32 pixFmtCounter = 1; // Starting at zero fails immediately ?

        for (;;)
        {
            PIXELFORMATDESCRIPTOR tempPixFmt;

            if (0 == DescribePixelFormat(m_deviceContext, pixFmtCounter,
                sizeof(PIXELFORMATDESCRIPTOR), &tempPixFmt))
                break;

            if ((tempPixFmt.dwFlags & targetPixFmt.dwFlags) == targetPixFmt.dwFlags &&
                targetPixFmt.iPixelType == tempPixFmt.iPixelType && 
                targetPixFmt.cColorBits <= tempPixFmt.cColorBits &&
                targetPixFmt.cDepthBits <= tempPixFmt.cDepthBits &&
                tempPixFmt.cAuxBuffers <= 0)
            {
                break;
            }

            pixFmtCounter++;
        }

我甚至松了颜色和深度位以尝试获得更多结果,搜索找到两种格式,两种格式都将dwFlags设置为33893 (PFD_DOUBLEBUFFER | PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_GENERIC_FORMAT | PFD_SWAP_COPY | PFD_SUPPORT_COMPOSITION)。

如果我使用这种格式,我第一次调用OpenGL函数会失败,因为它是NULL并且像素格式肯定是失败与否之间唯一的变化。

我想这就是它的方式?

0 个答案:

没有答案