0

QT を使用して Unix で作業しており、OpenGL でレンダリングするビットマップ (QGLWidget または QGLPixelBuffer クラス) を作成しようとしています。カラー インデックス モードを使用する必要があるため、ビットマップを作成するときに、この qglformat を宣言します。

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

次に、ビットマップを作成します。

QGLウィジェット:

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(): Cannot make invalid context current. コンテキストも無効であるためです。

それ以外の場合、PixelBuffer は正しく作成されますが、インデックス カラー モードが RGB モードに自動的に変更されます。

同じプログラムが Windows を使用している同じコンピュータで実行されるため、グラフィック カードの問題ではありません。

カラー インデックス モードでレンダリングできるようにするために、ビットマップを正しく定義する方法を教えてください。

4

1 に答える 1

1

カラー インデックス モードを使用する必要がある

なんで?正直なんで?

カラー インデックス モードは扱いが難しく、NO(!) 1998 年以降に構築された GPU は実際にそれをサポートしています! また、最新バージョンの OpenGL からカラー インデックス モードが削除されました。

ただ。しないでください。使用する。これ!

OpenGL-1.4 以前では、存在しないふりをしてください。

カラー インデックス付きピックスマップを作成する場合は、RGB でレンダリングしてから、インデックス付きモードにします。

同じプログラムが Windows を使用している同じコンピュータで実行されるため、グラフィック カードの問題ではありません。

その理由は GPU ではなく、1996 年以降に Windows に搭載されたソフトウェア エミュレーションもカラー インデックス モードを実装しているためです。GPU が要求されたピクセル形式をサポートしていなくても、ソフトウェア エミュレーションがサポートしている場合、ソフトウェア エミュレーション モードに自動的に移行します。

PixelBuffer は正しく作成されていますが、インデックス カラー モードが RGB モードに自動的に変更されています。

PBuffers は、ほとんどの (今日ではすべての) GPU でサポートされていますが、Windows のソフトウェア エミュレーションではサポートされていません。したがって、PBuffer を要求すると、この要求を満たすことができる唯一のピクセル フォーマットは RGB になります。

于 2013-10-01T19:59:38.397 に答える