CEGUI Window环境编译
Posted 林多
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CEGUI Window环境编译相关的知识,希望对你有一定的参考价值。
CEGUI编译
- 平台:Window
- CEGUI版本:0.8.7
- 前提:Visual Studio任意版本(本文为2013)
CEGUI源码下载
登录CEGUI官网网站:
http://cegui.org.uk/download
下载CEGUI0.8.7源码+ 0.8.X Dependencies
- 下载完成后,解压(例:这里我解压到了D:/Myproject/Coding/CEGUI)
- cegui-0.8.7是cegui的源码。cegui-dependencies-0.8.x 是cegui 0.8.x版本所需要的编译运行依赖环境。
编译cegui-dependicies-0.8.x
- 使用CMake编译起来非常方便,由于之后要编译为Visual Studio 2013可用项目。所以需要前安装 vs 2013。当然安装其他任意版本的vs也可以。
- 打开CMake,讲source和build目录设置为,cegui-dependicies-0.8.x目录。然后点击 “Configure”,在弹出的对话框选择“visual studio 2013对应的版本”,再次点击 configure。
- 点击“Generate”
- 点击open project,使用vs 2013打开项目 ,然后“生成解决方案”(release版)。然后将cegui-dependencies-0.8.x目录下的“dependecies”拷贝到“D:\\Myproject\\Coding\\CEGUI\\cegui-0.8.7”目录下面。
编译CEGUI
- 该步骤,与编译cegui-dependicies-0.8.x一致。使用CMake将,Source和Build设置为“D:\\Myproject\\Coding\\CEGUI\\cegui-0.8.7”。然后使用 VS2013打开,生成解决项目。
- 将dependecies目录设置为Path环境变量(例:"D:\\Myproject\\Coding\\CEGUI\\cegui-0.8.7\\dependencies\\bin"目录)。
- 重启或注销电脑。
使用CEGUI自带SampleFramework
- CEGUI写了一套Sample框架,用一套框架运行多个SampleDemo。
- 将“CEGUISampleFramework-0.8”设置为启动项目,编译然后运行,如下图。
- 由于CEGUI提供了,SampleFrameWork,要花一定时间分析单个Demo是如何启动的。下面分析完成后,参考sampleFrameWork写的一段,可以运行的Demo.
#include "CEGUI/RendererModules/OpenGL/GL.h"
#include "CEGUI/CEGUI.h"
#include "CEGUI/RenderTarget.h"
#include <GL/glfw.h>
#include <stdexcept>
#include <sstream>
#include <iostream>
#include "CEGUI/RendererModules/OpenGL/GLRenderer.h"
/*************************************************************************
Sample specific initialisation goes here.
*************************************************************************/
bool HelloWorldDemo::initialise(CEGUI::GUIContext* guiContext)
using namespace CEGUI;
d_usedFiles = CEGUI::String(__FILE__);
// CEGUI relies on various systems being set-up, so this is what we do
// here first.
//
// The first thing to do is load a CEGUI 'scheme' this is basically a file
// that groups all the required resources and definitions for a particular
// skin so they can be loaded / initialised easily
//
// So, we use the SchemeManager singleton to load in a scheme that loads the
// imagery and registers widgets for the TaharezLook skin. This scheme also
// loads in a font that gets used as the system default.
SchemeManager::getSingleton().createFromFile("TaharezLook.scheme");
// The next thing we do is to set a default mouse cursor image. This is
// not strictly essential, although it is nice to always have a visible
// cursor if a window or widget does not explicitly set one of its own.
//
// The TaharezLook Imageset contains an Image named "MouseArrow" which is
// the ideal thing to have as a defult mouse cursor image.
guiContext->getMouseCursor().setDefaultImage("TaharezLook/MouseArrow");
// Now the system is initialised, we can actually create some UI elements, for
// this first example, a full-screen 'root' window is set as the active GUI
// sheet, and then a simple frame window will be created and attached to it.
// All windows and widgets are created via the WindowManager singleton.
WindowManager& winMgr = WindowManager::getSingleton();
// Here we create a "DefaultWindow". This is a native type, that is, it does
// not have to be loaded via a scheme, it is always available. One common use
// for the DefaultWindow is as a generic container for other windows. Its
// size defaults to 1.0f x 1.0f using the Relative metrics mode, which means
// when it is set as the root GUI sheet window, it will cover the entire display.
// The DefaultWindow does not perform any rendering of its own, so is invisible.
//
// Create a DefaultWindow called 'Root'.
d_root = (DefaultWindow*)winMgr.createWindow("DefaultWindow", "Root");
// load font and setup default if not loaded via scheme
Font& defaultFont = FontManager::getSingleton().createFromFile("DejaVuSans-12.font");
// Set default font for the gui context
guiContext->setDefaultFont(&defaultFont);
// Set the root window as root of our GUI Context
guiContext->setRootWindow(d_root);
// A FrameWindow is a window with a frame and a titlebar which may be moved around
// and resized.
//
// Create a FrameWindow in the TaharezLook style, and name it 'Demo Window'
FrameWindow* wnd = (FrameWindow*)winMgr.createWindow("TaharezLook/FrameWindow", "Demo Window");
// Here we attach the newly created FrameWindow to the previously created
// DefaultWindow which we will be using as the root of the displayed gui.
d_root->addChild(wnd);
// Windows are in Relative metrics mode by default. This means that we can
// specify sizes and positions without having to know the exact pixel size
// of the elements in advance. The relative metrics mode co-ordinates are
// relative to the parent of the window where the co-ordinates are being set.
// This means that if 0.5f is specified as the width for a window, that window
// will be half as its parent window.
//
// Here we set the FrameWindow so that it is half the size of the display,
// and centered within the display.
wnd->setPosition(UVector2(cegui_reldim(0.0f), cegui_reldim( 0.0f)));
wnd->setSize(USize(cegui_reldim(1.0f), cegui_reldim(1.0f)));
// now we set the maximum and minum sizes for the new window. These are
// specified using relative co-ordinates, but the important thing to note
// is that these settings are aways relative to the display rather than the
// parent window.
//
// here we set a maximum size for the FrameWindow which is equal to the size
// of the display, and a minimum size of one tenth of the display.
wnd->setMaxSize(USize(cegui_reldim(1.0f), cegui_reldim( 1.0f)));
wnd->setMinSize(USize(cegui_reldim(0.1f), cegui_reldim( 0.1f)));
// As a final step in the initialisation of our sample window, we set the window's
// text to "Hello World!", so that this text will appear as the caption in the
// FrameWindow's titlebar.
wnd->setText("Hello World Linduo!");
wnd->subscribeEvent(CEGUI::Window::EventMouseClick, Event::Subscriber(&HelloWorldDemo::handleHelloWorldClicked, this));
// return true so that the samples framework knows that initialisation was a
// success, and that it should now run the sample.
return true;
/*************************************************************************
Cleans up resources allocated in the initialiseSample call.
*************************************************************************/
void HelloWorldDemo::deinitialise()
bool HelloWorldDemo::handleHelloWorldClicked(const CEGUI::EventArgs&)
std::cout << "Hello World!" << std::endl;
std::cout << "Test For me" << std::endl;
return false;
/*************************************************************************
Define the module function that returns an instance of the sample
*************************************************************************/
extern "C" SAMPLE_EXPORT Sample& getSampleInstance()
static HelloWorldDemo sample;
return sample;
const char d_windowTitle[] = "Crazy Eddie's GUI Mk-2 - Sample Application";
void initCEGUI()
using namespace CEGUI;
// create renderer and enable extra states
OpenGLRenderer& cegui_renderer = OpenGLRenderer::create(Sizef(800.f, 600.f));
cegui_renderer.enableExtraStateSettings(true);
// create CEGUI system object
CEGUI::System::create(cegui_renderer);
// setup resource directories
DefaultResourceProvider* rp = static_cast<DefaultResourceProvider*>(System::getSingleton().getResourceProvider());
rp->setResourceGroupDirectory("schemes", "../../datafiles/schemes/");
rp->setResourceGroupDirectory("imagesets", "../../datafiles/imagesets/");
rp->setResourceGroupDirectory("fonts", "../../datafiles/fonts/");
rp->setResourceGroupDirectory("layouts", "../../datafiles/layouts/");
rp->setResourceGroupDirectory("looknfeels", "../../datafiles/looknfeel/");
rp->setResourceGroupDirectory("lua_scripts", "../../datafiles/lua_scripts/");
rp->setResourceGroupDirectory("schemas", "../../datafiles/xml_schemas/");
// set default resource groups
ImageManager::setImagesetDefaultResourceGroup("imagesets");
Font::setDefaultResourceGroup("fonts");
Scheme::setDefaultResourceGroup("schemes");
WidgetLookManager::setDefaultResourceGroup("looknfeels");
WindowManager::setDefaultResourceGroup("layouts");
ScriptModule::setDefaultResourceGroup("lua_scripts");
XMLParser* parser = System::getSingleton().getXMLParser();
if (parser->isPropertyPresent("SchemaDefaultResourceGroup"))
parser->setProperty("SchemaDefaultResourceGroup", "schemas");
// load TaharezLook scheme and DejaVuSans-10 font
SchemeManager::getSingleton().createFromFile("TaharezLook.scheme", "schemes");
FontManager::getSingleton().createFromFile("DejaVuSans-10.font");
// set default font and cursor image and tooltip type
System::getSingleton().getDefaultGUIContext().setDefaultFont("DejaVuSans-10");
System::getSingleton().getDefaultGUIContext().getMouseCursor().setDefaultImage("TaharezLook/MouseArrow");
System::getSingleton().getDefaultGUIContext().setDefaultTooltipType("TaharezLook/Tooltip");
void initWindows()
using namespace CEGUI;
/
// Add your gui initialisation code in here.
// You should preferably use layout loading because you won't
// have to recompile everytime you change the layout. But you
// can also use static window creation code here, of course.
/
// load layout
Window* root = WindowManager::getSingleton().loadLayoutFromFile("application_templates.layout");
System::getSingleton().getDefaultGUIContext().setRootWindow(root);
static void GLFWCALL glfwWindowResizeCallback(int width, int height)
CEGUI::System::getSingleton().notifyDisplaySizeChanged(
CEGUI::Sizef(static_cast<float>(width), static_cast<float>(height)));
glViewport(0, 0, width, height);
int main()
//Init fw init
if (glfwInit() != GL_TRUE)
CEGUI_THROW(RendererException("Failed to initialise GLFW."));
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 1);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
if (glfwOpenWindow(800, 600, 0, 0, 0, 0,
24, 8, GLFW_WINDOW) != GL_TRUE)
CEGUI_THROW(RendererException("Failed to open GLFW window."));
glfwTerminate();
glfwEnable (GLFW_KEY_REPEAT);
glfwSetWindowTitle(d_windowTitle);
//Deactivate VSYNC
glfwSwapInterval(0);
// Disable the mouse position in Non_Debug mode
#ifndef DEBUG
glfwDisable(GLFW_MOUSE_CURSOR);
#endif
// Clear Errors by GLFW, even if Setup is correct.
glGetError();
initCEGUI();
#if 0
// Input callbacks of glfw for CEGUI
glfwSetKeyCallback(glfwKeyCallback);
glfwSetCharCallback(glfwCharCallback);
glfwSetMouseButtonCallback(glfwMouseButtonCallback);
glfwSetMouseWheelCallback(glfwMouseWheelCallback);
glfwSetMousePosCallback(glfwMousePosCallback);
//Window callbacks
glfwSetWindowCloseCallback(glfwWindowCloseCallback);
#endif
glfwSetWindowSizeCallback(glfwWindowResizeCallback);
CEGUI::System::getSingleton().notifyDisplaySizeChanged(CEGUI::Sizef(800.f, 600.f));
glViewport(0, 0, 800, 600);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
// initWindows();
HelloWorldDemo demo;
CEGUI::GUIContext* conext = &CEGUI::System::getSingleton().getDefaultGUIContext();
demo.initialise(conext);
float time = glfwGetTime();
CEGUI::OpenGLRenderer* renderer = static_cast<CEGUI::OpenGLRenderer*>(CEGUI::System::getSingleton().getRenderer());
while (true && glfwGetWindowParam(GLFW_OPENED))
glClear(GL_COLOR_BUFFER_BIT);
// inject time pulses
const float newtime = glfwGetTime();
const float time_elapsed = newtime - time;
CEGUI::System::getSingleton().injectTimePulse(time_elapsed);
CEGUI::System::getSingleton().getDefaultGUIContext().injectTimePulse(time_elapsed);
time = newtime;
// render gui
renderer->beginRendering();
CEGUI::System::getSingleton().renderAllGUIContexts();
renderer->endRendering();
glfwSwapBuffers();
return 0;
以上是关于CEGUI Window环境编译的主要内容,如果未能解决你的问题,请参考以下文章
Win7 64位 VS2015环境编译cegui-0.8.5
用vs2010编译cegui时,CEGUICoronaImageCodec项出错
VS2012中使用CEGUI项目发布到XP平台的问题(核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”)