カラーバッファにアルファチャネルを含む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を呼び出すと、アルファチャネルのないフォーマットが返されます(理由はわかりませんが)。
アルファバッファとは、レンダリングを目的とした単純なアルファバッファを意味することを明確にする必要があります(各色には、フラグメントをテストできるアルファ値などがあります)。半透明のウィンドウやその他の効果を意味するものではありません。[編集:いいえ、現時点では、ウィンドウ自体を透明にすることに関心はありません。デフォルトのフレームバッファ用のアルファチャネルが必要です。]
[編集:これは私が書いているクロスプラットフォームのウィンドウバックエンドの一部です。私のコードは常に移植可能です。より多くの制御が必要なため、この機能を提供するライブラリを使用していません。]