CEGUI 0.8.4 + OpenGL 的Hello World程序

#define GLUT_DISABLE_ATEXIT_HACK
#include <iostream>
#include <gl/GLUT.H>
#include <gl/GL.h>
#include <tchar.h>
#include <CEGUI/CEGUI.h>
#include <cegui/RendererModules/OpenGL/GLRenderer.h>

#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "CEGUIBase-0_d.lib")
#pragma comment(lib, "CEGUIOpenGLRenderer-0_d.lib")
#pragma comment(lib, "CEGUIExpatParser_d.lib")

#define EDIT_CONTROL_NAME "Root/EditBox"

using namespace CEGUI;

int G_lastFrameTime = 0;
bool G_quitFlag = false;
void mouseMotion(int x, int y);
void mouseButton(int button, int state, int x, int y);
void KeyCharDown(unsigned char key, int x, int y);
void KeyCharUp(unsigned char key, int x, int y);
void RenderScene();
void InitGUI();
bool btnClick(const CEGUI::EventArgs& args);
void mouseButton(int button, int state, int x, int y);
void mouseMove(int x, int y);

void display(void)
{
    int thistime = glutGet(GLUT_ELAPSED_TIME);
    float elapsed = static_cast<float>(thistime - G_lastFrameTime);
    G_lastFrameTime = thistime;
    CEGUI::System::getSingleton().injectTimePulse(elapsed / 1000.f);
    glClear(GL_COLOR_BUFFER_BIT);
    CEGUI::System::getSingleton().renderAllGUIContexts();
    glFlush();
    glutPostRedisplay();
    glutSwapBuffers();
}

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(400, 400);
    glutCreateWindow("test");
    // glutSetCursor(GLUT_CURSOR_NONE);

    InitGUI();

    glutDisplayFunc(display);
    glutMouseFunc(mouseButton);
    glutPassiveMotionFunc(mouseMove);
    //glutMotionFunc(mouseMotion);
    glutMainLoop();
    return 0;
}

bool btnClick(const CEGUI::EventArgs& args)
{
    std::cout << "clicked" << std::endl;
    //glutPostRedisplay();
    return true;
}

void InitGUI()
{
    using namespace CEGUI;
    CEGUI::OpenGLRenderer& myRenderer = CEGUI::OpenGLRenderer::bootstrapSystem(); //create();
    // CEGUI::System& sys = CEGUI::System::create(myRenderer);

    CEGUI::DefaultResourceProvider* rp = static_cast<CEGUI::DefaultResourceProvider*>(CEGUI::System::getSingleton().getResourceProvider());
    rp->setResourceGroupDirectory("schemes", "../datafiles/schemes/");
    rp->setResourceGroupDirectory("imagesets", "../datafiles/imagesets/");
    rp->setResourceGroupDirectory("fonts", "../datafiles/fonts/");
    rp->setResourceGroupDirectory("layouts", "../datafiles/layouts/");
    // 从下载的文件中考出来的文件中looknfeel叫looknfeels 注意修改
    rp->setResourceGroupDirectory("looknfeels", "../datafiles/looknfeel/");
    rp->setResourceGroupDirectory("lua_scripts", "../datafiles/lua_scripts/");
    rp->setResourceGroupDirectory("schemas", "../datafiles/xml_schemas/");

    // set the default resource groups to be used
    CEGUI::ImageManager::setImagesetDefaultResourceGroup("imagesets");
    CEGUI::Font::setDefaultResourceGroup("fonts");
    CEGUI::Scheme::setDefaultResourceGroup("schemes");
    CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");
    CEGUI::WindowManager::setDefaultResourceGroup("layouts");
    CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts");
    CEGUI::XMLParser* parser = CEGUI::System::getSingleton().getXMLParser();
    if (parser->isPropertyPresent("SchemaDefaultResourceGroup"))
    parser->setProperty("SchemaDefaultResourceGroup", "schemas");
    CEGUI::SchemeManager::getSingleton().createFromFile( "TaharezLook.scheme" );
    WindowManager& winMgr = WindowManager::getSingleton();
    Window* root = winMgr.loadLayoutFromFile("mytest.layout");

    CEGUI::System::getSingleton().getDefaultGUIContext().setRootWindow(root);
    CEGUI::PushButton* addBtn = (CEGUI::PushButton*)root->getChild("Add");
    addBtn->subscribeEvent(CEGUI::PushButton::EventMouseClick, CEGUI::Event::Subscriber(&btnClick));
    addBtn->setText( "Hello World!" );
}

void mouseButton(int button, int state, int x, int y)
{
    if (button == GLUT_LEFT_BUTTON)
    {
        if (state == GLUT_UP)
        {
            CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonUp(CEGUI::LeftButton);
        }
        else
        {
            CEGUI::System::getSingleton().getDefaultGUIContext().injectMouseButtonDown(CEGUI::LeftButton);
        }
    }
}

void mouseMove(int x, int y)
{
    CEGUI::System::getSingleton().getDefaultGUIContext().injectMousePosition(x, y);
}

layout文件:

<?xml version="1.0" ?>
<GUILayout version="4">
    <Window type="DefaultWindow" name="root">
        <Window name="Add" type="TaharezLook/Button">
            <Property name="Position" value="{{0.3,0},{0.3,0}}" />
            <Property name="MaxSize" value="{{1,0},{1,0}}" />
            <Property name="Size" value="{{0.3,0},{0.15,0}}" />
            <Property name="Text" value="Add" />
         </Window>
    </Window>
</GUILayout>
时间: 2024-12-27 21:46:35

CEGUI 0.8.4 + OpenGL 的Hello World程序的相关文章

VS2008环境下CEGUI 0.7.1及相关工具的编译(转载 + 额外的注意事项)

原文地址:http://blog.sina.com.cn/s/blog_6841a32d0100jtcw.html 作者:孩儿他爹 一.概述 对于游戏的界面开发而言,CEGUI是一个不错的选择.但是CEGUI及其相关工具用到了很多第三方库,从而导致编译步骤比较复杂,让新人无从下手.所以我在这里介绍一下CEGUI 0.7.1 以及 CEImagesetEditor 和 CELayoutEditor 的编译.希望能够对准备学习CEGUI的童鞋们有所帮助:) 二.准备 我们需要用到 0. Direct

微信小程序云开发-从0打造云音乐全栈小程序

第1章 首门小程序“云开发”课程,你值得学习本章主要介绍什么是小程序云开发以及学习云开发的重要性,并介绍项目的整体架构,真机演示项目功能,详细介绍整体课程安排.课程适用人群以及需要掌握的前置知识.通过本章的学习,能够使大家对本门课程有一个整体的了解.... 第2章 云开发介绍以及从0构建项目本章会详细介绍小程序云开发与Serverless,并介绍如何开通小程序云开发及控制台的功能,并且初始化项目代码,讲解airbnb/javascript代码规范. 第3章 播放列表功能实现本章完成歌单列表与歌曲

在WPF中使用.NET Core 3.0依赖项注入和服务提供程序

原文:在WPF中使用.NET Core 3.0依赖项注入和服务提供程序 前言 我们都知道.NET Core提供了对依赖项注入的内置支持.我们通常在ASP.NET Core中使用它(从Startup.cs文件中的ConfigureServices方法开始),但是该功能不限于此框架,我们可以在WPF和Windows Forms应用程序中使用它. 实践 新建项目 将所需的NuGet包添加到项目中. Microsoft.Extensions.DependencyInjection Microsoft.E

如何从0开始学习java,成为中高级程序员?

如何从0开始学习java,成为中高级程序员? 学习路线:1:java的语法入门学习2:html,js的前端学习3:web开发的学习4:web开发的实战项目学习,电商,图书馆...5:框架的学习,如ssm,ssh6:框架的实战项目学习,如h5的app,前后端结合的社交app7:深入学习框架,springboot,微服务架构,代码生成器等.整个周期下来6个月到一年,对于中等以上IQ的人.通过勤奋,完全可以达到. 原文地址:https://blog.51cto.com/13149944/2471931

OGLplus 0.54.0 发布,OpenGL 的 C++ 封装库

OGLplus 0.54.0 发布,此版本主要是 bug 修复,更新了快速开始文档,构建系统,重构了反馈帮助类,修复了移植系统后平台不支持原始重启指数的问题. 改进列表 ======= - 以命名空间级别重新实现了 ``TransformFeedback::Activator`` 和 ``TranformFeedback::Pauser`` 类 - A new overload of ``Context::ClearColor`` was added. - A bug in multiplica

OGLplus 0.55.0 发布,OpenGL 的 C++ 封装库

OGLplus 0.55.0 发布,此版本添加了 ``ClientContext`` 类,用来维护(暂时只有部分) GL 状态,允许 push/pop 独立状态变量或者是高效查询和改变他们的值.此版本同时还更新了快速入门文档:平台的移植不再至此和原始重启参数:一些 bug 修复. 改进记录 ======= - The ``oglplus::ClientContext`` class was added. - The ``EnumToClass`` template and its special

OpenGL编程-第一个程序-画出一个正方形

程序如下 #include <GL/glut.h> // #pragma comment(linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" ) void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); //glClear,清除.GL_COLOR_BUFFER_BIT表示清除颜色,glClear函数还可以清除其它的东西 g

Android OpenGL ES: 第一个程序

1. 概要 OpenGL是桌面环境下的绘制,渲染三维图形的API. OpenGL ES是在Android环境下的OpenGL. 在Android中OpenGL需要在GLSurfaceView中渲染,渲染控制函数在GLSurfaceView.Renderer中.接下来会介绍如何创建第一个OpenGL程序 2. 配置AndroidManifest (1)声明OpenGL ES API <uses-feature android:glEsVersion="0x00020000" and

OpenGL入门和示例程序

大家好,今天雅乐网给大家介绍一下OpenGL的一些基本语法和一个简单的示例程序. OpenGL是什么呢?说简单一点,就是一个图形软件包,它提供了许多函数供我们调用.我们看看维基百科上的说法 开放图形库(英语:Open Graphics Library,缩写为OpenGL)是个定义了一个跨编程语言.跨平台的应用程序接口(API)的规范,它用于生成二维.三维图像.这个接口由近三百五十个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象.而另一种程序接口系统是仅用于Microsoft Wind