QOpenGL:颜色索引模式

时间:2013-10-01 09:52:08

标签: c++ qt opengl bitmap

我正在使用QT在Unix中工作,我正在尝试创建一个位图(QGLWidget或QGLPixelBuffer类)来使用OpenGL进行渲染。我需要使用颜色索引模式,所以当我创建位图时,我声明了这个qglformat:

qglformat.setDirectRendering(true);
qglformat.setRgba(false); // COLOR INDEX MODE
qglformat.setDepth(true);
qglformat.setOverlay(false);
qglformat.setDepthBufferSize(16);

然后我创建了位图:

QGLWidget来绘图:

m_qglwiget = new QGLWidget(qglformat);
m_qglwiget->setGeometry(0,0,m_iW,m_iH);

QGLPixelBuffer:

m_pB = new QGLPixelBuffer(m_iW,m_iH,qglformat);

在第一种情况下创建了Widget但是如果我看它是否有效,则函数isValid()返回'false'。并且执行因该错误而中止: QGLContext :: makeCurrent():无法使上下文无效。因为上下文也无效。

否则在第二种情况下,PixelBuffer会正确创建,但它已自动将索引颜色模式更改为RGB模式。

使用Windows在同一台计算机上运行相同的程序,因此不存在图形卡的问题。

您是否告诉我如何正确定义位图以便能够以颜色索引模式进行渲染?

1 个答案:

答案 0 :(得分:1)

  

我需要使用颜色索引模式

为什么呢?老实说为什么?

使用颜色索引模式非常糟糕, NO(!) 1998年以后构建的GPU实际支持它!此外,还从现代版本的OpenGL中删除了颜色索引模式。

只需。别。使用。它!

对于OpenGL-1.4及更早版本,只是假装它不存在。

如果你想创建一个颜色索引像素图,用RGB渲染它,然后把它变成索引模式。

  

他使用Windows在同一台计算机上运行相同的程序,因此不存在图形卡的问题。

原因不是GPU,而是自1996年以来随Windows发布的软件仿真也实现了颜色索引模式。如果GPU不支持请求的pixelformat,但是软件仿真不支持,它将默默地进入软件仿真模式。

  

PixelBuffer已正确创建,但它已自动将索引颜色模式更改为RGB模式。

PBuffers受大多数(今天所有)GPU的支持,但不受Windows的软件模拟支持。因此,通过请求PBuffer,可以满足此请求的唯一像素格式将是RGB。