2013-10-01 72 views
0

我在使用QT的Unix工作,我試圖創建一個位圖(要麼QGLWidget或QGLPixelBuffer類)與OpenGL呈現。我需要使用顏色索引模式,所以當我創建位圖我宣佈這個qglformat:QOpenGL:顏色索引模式

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的同一臺計算機上運行,​​因此它不是圖形卡的問題。

您是否告訴我如何正確定義位圖以便能夠在顏色索引模式下呈現?

回答

1

I need to use color index mode

爲什麼?老實說爲什麼?

顏色索引模式是可怕與和NO(!)工作 GPU 1998年以後建造的實際支持它!此外,顏色索引模式已從現代版本的OpenGL中刪除。

只是。別。使用。它!

對於OpenGL-1.4及更早版本,只是假裝它不存在。

如果你想創建一個帶顏色索引的像素圖,用RGB渲染它,然後將它變成索引模式。

he same program runs in the same computer using Windows so it is not problem of the graphic card.

原因不是GPU,而是自1996年以來用Windows發佈的軟件仿真也實現了色彩索引模式。如果GPU不支持請求的像素格式,但是軟件模擬確實如此,它將靜靜地進入軟件模擬模式。

PixelBuffer is created correctly but it has changed automaticaly the index color mode to the RGB mode.

PBuffers受大多數(當今所有)GPU支持,但不受Windows的軟件仿真支持。所以通過請求一個PBuffer,唯一能夠滿足這個請求的像素格式將是RGB。