Embedding OGRE Tutorial
From Ogre Wiki
Created by --boost 09:26, 11 January 2007 (CST)
Contents |
What is wxWidgets?
wxWidgets is a cross-platform GUI library (wxWindows License (like L-GPL)).
Step 1: Setup wxWidgets
After downloading and installing wxWidgets 2.8, we may create an environment variable called WXWIN and set it to the installation directory (including drive letter).
Then open ($WXWin)\build\msw\wx.dsw and click build solution (for release and debug configurations).
Step 2: Create OGRE Project
We may use OGRE SDK AppWizard, choosing Empty Project at Application Settings page.
Step 3: Add source files to our project
We will add wxOgre.h and wxOgre.cpp from WxOgre for OGRE v1.2 plus:
app.h
#ifndef APP_H
#define APP_H
#include <wx/wxprec.h>
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
class MyApp : public wxApp
{
public:
virtual bool OnInit();
};
#endif // APP_H
main.h
#ifndef MAIN_H
#define MAIN_H
#include "app.h"
#include "wxOgre.h"
class MyFrame: public wxFrame
{
public:
MyFrame(wxFrame *frame, const wxString& title);
~MyFrame();
void UpdateOgre()
{
wxOgrePane->update();
}
private:
wxOgre* wxOgrePane;
void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
DECLARE_EVENT_TABLE();
};
#endif // MAIN_H
app.cpp
#include "app.h"
#include "main.h"
#include "wxOgre.h"
IMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{
MyFrame* frame = new MyFrame(0L, _("wxWidgets Application Template"));
frame->Show();
frame->UpdateOgre();
return true;
}
main.cpp
#include "main.h"
int idMenuQuit = wxNewId();
int idMenuAbout = wxNewId();
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(idMenuQuit, MyFrame::OnQuit)
EVT_MENU(idMenuAbout, MyFrame::OnAbout)
END_EVENT_TABLE()
MyFrame::MyFrame(wxFrame *frame, const wxString& title)
: wxFrame(frame, -1, title)
{
// create a menu bar
wxMenuBar* mbar = new wxMenuBar();
wxMenu* fileMenu = new wxMenu(_T(""));
fileMenu->Append(idMenuQuit, _("&Quit\tAlt-F4"), _("Quit the application"));
mbar->Append(fileMenu, _("&File"));
wxMenu* helpMenu = new wxMenu(_T(""));
helpMenu->Append(idMenuAbout, _("&About\tF1"), _("Show info about this application"));
mbar->Append(helpMenu, _("&Help"));
SetMenuBar(mbar);
// create a status bar with some information about the used wxWidgets version
CreateStatusBar(2);
SetStatusText(_("Hello Code::Blocks user !"),0);
SetStatusText("Hello Code::Blocks user !",1);
wxOgrePane = new wxOgre(this);
}
MyFrame::~MyFrame()
{
}
void MyFrame::OnQuit(wxCommandEvent& event)
{
Close();
}
void MyFrame::OnAbout(wxCommandEvent& event)
{
wxString msg = _("Welcome to...");
wxMessageBox(msg, _("Welcome to..."));
}
Step 4: Set Project Properties
Time to setup our project. For debug configuration we will set:
- Debugging Node:
- (optional) We may want to remove $(OGRE_HOME) variable from both Command and Working Directory fields. If we do so, we will also copy bin and media folder from OGRE sdk to our project folder.
- C/C++ Node
- General: Additional Include Directories field should contain the following:
- $(WXWIN)\include
- $(WXWIN)\contrib\include
- $(WXWIN)\lib\vc_lib\mswd
- Preprocessor: WIN32 _DEBUG _WINDOWS __WINDOWS__ __WXMSW__ __WXDEBUG__ WXDEBUG=1 __WIN95__ __WIN32__ WINVER=0x0400 STRICT
- Precompiled Headers: The Not using precompiled headers or Automatic use of precompiled headers button should be selected.
- Code Generation: Runtime Library field should be set to Debug Multithreaded DLL.
- General: Additional Include Directories field should contain the following:
- Linker Node
- General: Additional Library Directories field should contain the following:
- $(WXWIN)\lib\vc_lib
- $(WXWIN)\contrib\lib
- Input: Add the following to Additional Dependencies field: wxmsw28d_core.lib wxbase28d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib
- General: Additional Library Directories field should contain the following:
And for release configuration:
- C/C++ Node
- General: Additional Include Directories field should contain the following:
- $(WXWIN)\include
- $(WXWIN)\contrib\include
- $(WXWIN)\lib\vc_lib\msw
- Preprocessor: NDEBUG WIN32 _WINDOWS __WINDOWS__ __WXMSW__ __WIN95__ __WIN32__ WINVER=0x0400 STRICT
- Precompiled Headers: The Not using precompiled headers or Automatic use of precompiled headers button should be selected.
- Code Generation: Runtime Library field should be set to Multithreaded DLL.
- General: Additional Include Directories field should contain the following:
- Linker Node
- General: Additional Library Directories field should contain the following:
- $(WXWIN)\lib\vc_lib
- $(WXWIN)\contrib\lib
- Input: Add the following to Additional Dependencies field: wxmsw28_core.lib wxbase28.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib comctl32.lib rpcrt4.lib wsock32.lib winmm.lib
- General: Additional Library Directories field should contain the following:
Thats was all. if you have any suggestions for improvements, or find any error, then please post in this forum thread. Thank you.

