最後に、wxWidgets OpenGL プログラムでマルチサンプリングが機能するようになりました。ちょっと面倒ですが、やり方は以下の通りです。
wxWidgetsは現在、安定版リリースでマルチサンプリングをサポートしていません(現時点での最新バージョンは2.8.8です)。ただし、パッチとして、また毎日のスナップショットからも入手できます。(後者は、パッチが受け入れられ、問題がなければ後の安定版リリースに表示されることを意味するため、心強いものです。)
したがって、2 つのオプションがあります。
毎日のスナップショットからダウンロードしてビルドします。
作業中の wxWidgets インストール用のパッチを入手してください。
作業中のインストールをできるだけ邪魔したくないので、2番目のオプションの方が面倒ではありません。Windows でパッチを適用する方法がわからない場合は、このを参照してください。
少なくとも、Windows の場合、パッチは次のファイルを変更します。
$(WX_WIDGETS_ROOT)/include/wx/glcanvas.h
$(WX_WIDGETS_ROOT)/include/wx/msw/glcanvas.h
$(WX_WIDGETS_ROOT)/src/msw/glcanvas.cpp
パッチを適用した後、wxWidgets ライブラリを再コンパイルします。
wxWidgets OpenGL プログラムでマルチサンプリングを有効にするには、コードを少し変更する必要があります。
属性リストをwxGLCanvasコンストラクターに渡す必要があります。
int attribList[] = {WX_GL_RGBA,
WX_GL_DOUBLEBUFFER,
WX_GL_SAMPLE_BUFFERS, GL_TRUE, // Multi-sampling
WX_GL_DEPTH_SIZE, 16,
0, 0};
すでに属性リストを使用している場合は、 with の行をそれに追加しGL_SAMPLE_BUFFERS, GL_TRUE
ます。それ以外の場合は、この属性リストの定義をコードに追加してください。
次に、wxGLCanvas コンストラクターを変更して、この属性リストをパラメーターとして受け取ります。
myGLFrame::myGLFrame // Derived from wxGLCanvas
(
wxWindow *parent,
wxWindowID id,
const wxPoint& pos,
const wxSize& size,
long style,
const wxString& name
)
: wxGLCanvas(parent, (wxGLCanvas*) NULL, id, pos, size, style, name, attribList)
{
// ...
}
wxGLCanvas 要素が作成されると、デフォルトでマルチサンプリングがオンになります。自由に無効または有効にするには、関連する OpenGL 呼び出しを使用します。
glEnable(GL_MULTISAMPLE);
glDisable(GL_MULTISAMPLE);
マルチサンプリングが wxWidgets OpenGL プログラムで動作するようになりました。うまくいけば、すぐに wxWidgets の安定版リリースでサポートされるはずなので、この情報は関係ありません :-)