wxDでOpenGLするには


投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/6/10 19:10
SHOO  管理人   投稿数: 658
とりあえずWindows版でできたので…

+ [http://www.wxwidgets.org/ wxWidgets公式ページ]からwxMSW-2.8.10.zipをダウンロード
+ どこかからopengl32.lib、およびgl.hをダウンロード。~
++ opengl32.libがcoffの場合はcoff2omfによりomf形式のlibファイルに変換する。[[Google:DigitalMars OpenGL lib]]
++ opengl32.libをdmcコンパイラのlibフォルダ内にコピーして設置
++ gl.hを、dmcコンパイラのincludeフォルダで、include\GL\gl.hとなるようにコピーして設置
+ wxWidgetsの修正
++ wxMSW-2.8.10\include\wx\msw\setup.h~
#define wxUSE_GLCANVAS 0
となっているところを
#define wxUSE_GLCANVAS 1
と変更
++ wxMSW-2.8.10\build\msw\makefile.dmc~
906行目~
@echo USE_OPENGL=0 >>$(BUILD_CFG_FILE)
を変更~
@echo USE_OPENGL=1 >>$(BUILD_CFG_FILE)
として、OpenGLを使えるようにする。~
このままではglcanvasがコンパイルされないため、coreライブラリに含めることとする。~
510行付近~
$(OBJS)\corelib_vlbox.obj \
$(OBJS)\corelib_vscroll.obj
CORELIB_ODEP = $(OBJS)\pch_wxprec_corelib.sym
ここを、~
$(OBJS)\corelib_vlbox.obj \
$(OBJS)\corelib_vscroll.obj \
$(OBJS)\corelib_glcanvas.obj
CORELIB_ODEP = $(OBJS)\pch_wxprec_corelib.sym
とする~
2252行付近~
$(OBJS)\corelib_vscroll.obj : ..\..\src\generic\vscroll.cpp $(CORELIB_ODEP)
$(CXX) -mn -c -cpp -o$@ $(CORELIB_CXXFLAGS) ..\..\src\generic\vscroll.cpp

ここを、~
$(OBJS)\corelib_vscroll.obj : ..\..\src\generic\vscroll.cpp $(CORELIB_ODEP)
$(CXX) -mn -c -cpp -o$@ $(CORELIB_CXXFLAGS) ..\..\src\generic\vscroll.cpp

$(OBJS)\corelib_glcanvas.obj : ..\..\src\msw\glcanvas.cpp $(CORELIB_ODEP)
$(CXX) -mn -c -cpp -o$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\glcanvas.cpp

といった具合に追加する。
+ wxWidgetsのコンパイル
++ コマンドプロンプトを開き、wxMSW-2.8.10\build\msw\ までカレントディレクトリを移動する。
cd wxMSW-2.8.10\build\msw
++ makeする
make -f makefile.dmc
+ [http://wxd.sourceforge.net/ 公式ページ]からwxDのダウンロード
+ 環境変数のセット
set WXDIR=<先ほどのwxWidgetsのある場所>\wxMSW-2.8.10
set PLATFORM=WXMSW
+ ここでmakeしてもよいが、ついでなのでwindow.cppとwindow.dでwxWindow::GetHandle関数が使えるようにする。クロスプラットフォーム的な観点からは余り使うべきではないけど、たとえばWindowsに限定して、DirectXを使うときなんかにはあるとありがたい関数です。
#code(c,nonumber,nooutline,title=wxc/window.cppの150行目付近){{{
//-----------------------------------------------------------------------------

extern "C" WXEXPORT
void* wxWindow_GetHandle(wxWindow *self)
{
return self->GetHandle();
}

extern "C" WXEXPORT
int wxWindow_GetId(wxWindow *self)
{
return self->GetId();
}
}}}
#code(d,nonumber,nooutline,title=wx/window.dの130行目付近){{{
static extern (C) void wxWindow_GetClientSize(IntPtr self, out Size size);
static extern (C) void* wxWindow_GetHandle(IntPtr self);
static extern (C) int wxWindow_GetId(IntPtr self);
}}}
#code(d,nonumber,nooutline,title=wx/window.dの500行目付近){{{
//---------------------------------------------------------------------

public /+virtual+/ void* handle() { return wxWindow_GetHandle(wxobj); }
public /+virtual+/ int ID() { return wxWindow_GetId(wxobj); }
public /+virtual+/ void ID(int value) { wxWindow_SetId(wxobj, value); }

//---------------------------------------------------------------------
}}}
+ make
+ wxWidgetsおよびwxDのmakeによって生成されたすべてのlibファイル+opengl32.libをdmdから見れるlibフォルダに入れます。
+ wxフォルダ内の*.dファイルをimportできるようにimportフォルダに入れます。

以上になります。
これで、wxDを使いつつ、OpenGLも利用することができるようになります。
……が、かなり無理やり感あふれるやり方ですので、もっと別に手段がないか、知っている方は教えてください…←本題

また、Linuxのほうもやり方が分かったらHowToあたりにでも同様の記事を作るかな…と考えています。
Ubuntu 9.04でやってみてはいるものの、なぜかSegmentation faultが出てうまくいかない…誰か知っているh(ry←本題その2
投票数:188 平均点:5.80
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文

  条件検索へ


メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu