wxWidgets OpenGL プログラムのマルチサンプリングを有効にするにはどうすればよいですか?
-
09-06-2019 - |
質問
マルチサンプリング 申し込み方法です 全画面アンチエイリアス (FSAA) 3D アプリケーション。OpenGL プログラムでマルチサンプリングを使用する必要があります。このプログラムは現在 wxウィジェット GUI。これを行う方法はありますか?これを達成するための詳細な手順を知っている場合のみご回答ください。
を使用してマルチサンプリングを有効にすることを認識しています WGL (OpenGL への Win32 拡張機能)。ただし、私の OpenGL プログラムは MFC で書かれていないので (そしてコードをマルチプラットフォームで移植できるようにしたいので)、それは私にとって選択肢ではありません。
解決
ついに wxWidgets OpenGL プログラムでマルチサンプリングを動作させることができました。少し面倒ですが、方法は次のとおりです。
wxウィジェット 持っていない マルチサンプリング 彼らのサポート 安定版リリース 現時点での最新バージョンは 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 プログラムでマルチサンプリングを有効にするには、コードに若干の変更を加える必要があります。
属性リストを wxGLキャンバス コンストラクタ:
int attribList[] = {WX_GL_RGBA,
WX_GL_DOUBLEBUFFER,
WX_GL_SAMPLE_BUFFERS, GL_TRUE, // Multi-sampling
WX_GL_DEPTH_SIZE, 16,
0, 0};
すでに属性リストを使用している場合は、次の行を追加します。 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 の安定版リリースでサポートされるはずなので、この情報は無関係になります:-)