我正在开发一个使用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并且像素格式肯定是失败与否之间唯一的变化。
我想这就是它的方式?