热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CEGUIWindow环境编译

CEGUI编译平台:WindowCEGUI版本:0.8.7前提:VisualStudio任意版本(本文为2013ÿ

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
#include
#include #include
#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 schemeFont& defaultFont = FontManager::getSingleton().createFromFile("DejaVuSans-12.font");// Set default font for the gui contextguiContext->setDefaultFont(&defaultFont);// Set the root window as root of our GUI ContextguiContext->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&#39;s GUI Mk-2 - Sample Application";void initCEGUI()
{using namespace CEGUI;// create renderer and enable extra statesOpenGLRenderer& cegui_renderer = OpenGLRenderer::create(Sizef(800.f, 600.f));cegui_renderer.enableExtraStateSettings(true);// create CEGUI system objectCEGUI::System::create(cegui_renderer);// setup resource directoriesDefaultResourceProvider* 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 groupsImageManager::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 fontSchemeManager::getSingleton().createFromFile("TaharezLook.scheme", "schemes");FontManager::getSingleton().createFromFile("DejaVuSans-10.font");// set default font and cursor image and tooltip typeSystem::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&#39;t// have to recompile everytime you change the layout. But you// can also use static window creation code here, of course./// load layoutWindow* 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 initif (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 VSYNCglfwSwapInterval(0);// Disable the mouse position in Non_Debug mode
#ifndef DEBUGglfwDisable(GLFW_MOUSE_CURSOR);
#endif// Clear Errors by GLFW, even if Setup is correct.glGetError();initCEGUI();#if 0// Input callbacks of glfw for CEGUIglfwSetKeyCallback(glfwKeyCallback);glfwSetCharCallback(glfwCharCallback);glfwSetMouseButtonCallback(glfwMouseButtonCallback);glfwSetMouseWheelCallback(glfwMouseWheelCallback);glfwSetMousePosCallback(glfwMousePosCallback);//Window callbacksglfwSetWindowCloseCallback(glfwWindowCloseCallback);#endifglfwSetWindowSizeCallback(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 pulsesconst 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 guirenderer->beginRendering();CEGUI::System::getSingleton().renderAllGUIContexts();renderer->endRendering();glfwSwapBuffers();}return 0;
}

推荐阅读
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文介绍如何使用线段树解决洛谷 P1531 我讨厌它问题,重点在于单点更新和区间查询最大值。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • T15483.【清华集训2017模拟11.26】简单路径T25484.【清华集训2017模拟11.26】快乐树T35485.【清华集训2017模拟11.26】字符串T1结论题,结论很 ... [详细]
  • Halcon之图像梯度、图像边缘、USM锐化
    图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像卷积:1.模糊2.梯度3.边缘4.锐化1.视频教程:B站、 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
author-avatar
冠凯雅友9
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有