【问题标题】:QOpenGL: Color Index modeQOpenGL:颜色索引模式
【发布时间】:2013-10-01 09:52:08
【问题描述】:

我正在使用 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() 将返回“假”。并且执行中止并出现该错误:QGLContext::makeCurrent(): Cannot make invalid context current. 因为上下文也是无效的。

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

同样的程序在同一台使用Windows的电脑上运行,所以不是显卡问题。

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

【问题讨论】:

    标签: c++ qt opengl bitmap


    【解决方案1】:

    我需要使用颜色索引模式

    为什么?老实说为什么?

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

    只是。不。采用。它!

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

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

    同样的程序运行在同一台使用Windows的电脑上,所以不是显卡的问题。

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-15
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 2014-03-25
      • 2016-01-25
      • 1970-01-01
      相关资源
      最近更新 更多