QOpenGL:颜色索引模式

QOpenGL: Color Index mode

本文关键字:模式 索引 颜色 QOpenGL      更新时间:2023-10-16

我正在使用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);

在第一种情况下,小部件被创建,但如果我看到它是否有效,函数 isValid(( 返回"false"。并且执行中止并出现该错误:QGLContext::makeCurrent((:无法使无效上下文当前。因为上下文也是无效的。

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

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

你能告诉我如何正确定义位图以便能够在颜色索引模式下渲染吗?

我需要使用颜色索引模式

为什么?老实说为什么?

颜色索引模式使用起来很糟糕,NO(!1998 年之后构建的 GPU 实际上支持它!此外,颜色索引模式已从OpenGL的现代版本中删除。

只。不要。用。它!

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

如果要创建颜色索引像素映射,请以 RGB 格式渲染它,然后将其转换为索引模式。

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

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

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

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