3

カラーバッファにアルファチャネルを含むOpenGLウィンドウを設定しようとしています。残念ながら、私の現在の設定では、GL_RGBのバックバッファとフロントバッファを作成しています(gDEBuggerによって報告され、私の実験で示されています)。

私は次のようにウィンドウを設定しました:

PIXELFORMATDESCRIPTOR pfd;
ZeroMemory(&pfd,sizeof(pfd));
pfd.nSize = sizeof(pfd);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24; //note by docs that alpha doesn't go here (though putting 32 changes nothing)
pfd.cDepthBits = 24;
pfd.iLayerType = PFD_MAIN_PLANE;

私はまた、より具体的に試しました:

PIXELFORMATDESCRIPTOR pfd = {
    sizeof(PIXELFORMATDESCRIPTOR),
    1,
    PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
    PFD_TYPE_RGBA,
    24,
    8,0, 8,8, 8,16, 8,24, //A guess for lil endian; usually these are 0 (making them 0 doesn't help)
    0, 0,0,0,0,
    24, //depth
    8,  //stencil
    0,  //aux
    PFD_MAIN_PLANE,
    0,
    0, 0, 0
};

私の理解では、後でChoosePixelFormatを呼び出すと、アルファチャネルのないフォーマットが返されます(理由はわかりませんが)。

アルファバッファとは、レンダリングを目的とした単純なアルファバッファを意味することを明確にする必要があります(各色には、フラグメントをテストできるアルファ値などがあります)。半透明のウィンドウやその他の効果を意味するものではありません。[編集:いいえ、現時点では、ウィンドウ自体を透明にすることに関心はありません。デフォルトのフレームバッファ用のアルファチャネルが必要です。]

[編集:これは私が書いているクロスプラットフォームのウィンドウバックエンドの一部です。私のコードは常に移植可能です。より多くの制御が必要なため、この機能を提供するライブラリを使用していません。]

4

1 に答える 1

2

ここで考慮すべき2つの重要なポイントがあります。

  • これは、デフォルトのフレームバッファを使用して実行できます。ただし、適切にリクエストする必要があります。Windowsのデフォルトの選択メカニズムは、RGBAを使用することをそれほど重視していないようです。最善の方法は、考えられるすべてのピクセルモードを列挙してから、「手動で」必要なものをそのまま選択することです。これにより、24ビットの深度バッファー、累積バッファー、および8ビットのステンシルバッファーが必要であることも指定できました。

  • OpenGLコンテキストは、アルファブレンディング、深度テスト、さらにはリモートで高度な手法を使用するために完全に有効である必要があります。不思議なことに、完全に有効なOpenGLコンテキストがなくても、レンダリングされた三角形を取得できたため、混乱が生じました。たぶんそれはソフトウェアでエミュレートされていたのでしょうか?glewInit(いくつかのVBOを作成することは言うまでもありません)が惨めに失敗したとき、私はそれを理解しました。重要な点は、OpenGLコンテキストが有効でなければならないということです。私の場合、正しく設定されていませんでした。

この問題は、現在、軽量のクロスプラットフォームウィンドウツールキットを作成している状況にありました。現在、Win32 APIを介してWindowsをサポートし、X11を介してLinuxをサポートしており、X11を介してMacOSへの移植を開始しました。

コメントの一部の要求に応じて、私はここに、他の人が利益を得ることができるように、その謙虚な努力を提示します。Macのサポートはまだ機能しておらず、メニューはLinuxに実装されておらず、Linuxでのユーザー入力は半分しかありません。2013年1月18日の時点で、一時的にここで見つかる可能性があります(将来の人々、私は自分のWebサイトに新しいバージョンを掲載した可能性があります(「Portcullis」を探してください))。

于 2013-02-19T02:49:02.743 に答える