KlayGE-002-Tutor1

万事开头第一步,写个demo来充数。

应用程序框架,都继承自App3DFramework基类,该类实在Engine_Core/App Layer中定义。主要针对不同os平台进行分装,提供统一显示框架。

派生自己的运行app,需要重写:

virtual void OnCreate()virtual void OnDestroy()virtual void OnSuspend()virtual void OnResume()virtual void DoUpdateOverlay();
virtual KlayGE::uint32_t DoUpdate(KlayGE::uint32_t pass);

App3DFramework支持多个平台运行:

  • windows desktop
  • windows store
  • linux
  • android
  • ios/Darwin

Demo start

老的wiki写的例子,发现竟然是熟悉的Array[osg大神],再次膜拜。只不过文档好久没更新了,和代码中的有些不一致,稍做调整,写个cmake工程练手。

TutorFramework.h

// http://www.klayge.org/wiki/index.php/Tutor1_-_%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%A1%86%E6%9E%B6
#include <KlayGE/KlayGE.hpp>
#include <KlayGE/App3D.hpp>
#include <KlayGE/ResLoader.hpp>
#include <KlayGE/Context.hpp>
#include <KlayGE/Font.hpp>
#include <KlayGE/RenderEngine.hpp>
#include <KlayGE/RenderFactory.hpp>
#include <KlayGE/FrameBuffer.hpp>
#include <KlayGE/UI.hpp>

#include <vector>
#include <sstream>

class TutorFramework : public KlayGE::App3DFramework
{
public:
	TutorFramework();
protected:
	//virtual void InitObjects();
	virtual void OnCreate();
private:
	virtual void DoUpdateOverlay();
	virtual KlayGE::uint32_t DoUpdate(KlayGE::uint32_t pass);
	
	KlayGE::FontPtr font_;
};

TutorFramework.cpp

#include "TutorFramework.h"

TutorFramework::TutorFramework()
    : App3DFramework("Tutor1")
{
}

void TutorFramework::OnCreate()
{
    font_ = KlayGE::SyncLoadFont("gkai00mp.kfont");
}

void TutorFramework::DoUpdateOverlay()
{
    // 将当前的FPS信息输出到字符串中,以备渲染到屏幕上
    std::wostringstream stream;
    stream.precision(2);
    stream << std::fixed << this->FPS() << " FPS";

    // 使用之前构建的新字体来渲染文本信息,RenderText()可以接受的参数包括:
    // X,Y位置,KlayGE::Color颜色,std::wstring类型的字符串,以及字体大小
    font_->RenderText(0, 0, KlayGE::Color(1, 1, 0, 1), L"自定义框架例子", 16);
    font_->RenderText(0, 18, KlayGE::Color(1, 1, 0, 1), stream.str(), 16);
}

KlayGE::uint32_t TutorFramework::DoUpdate(KlayGE::uint32_t pass)
{
    // 获取渲染引擎对象。根据KlayGE.cfg文件的配置内容,它可能通过OpenGL或者D3D11来实现
    KlayGE::RenderEngine& re = KlayGE::Context::Instance().RenderFactoryInstance().RenderEngineInstance();
    re.CurFrameBuffer()->Clear(KlayGE::FrameBuffer::CBM_Color | KlayGE::FrameBuffer::CBM_Depth,
        KlayGE::Color(0.2f, 0.4f, 0.6f, 1), 1.0f, 0);

    KlayGE::Color clear_clr(0.2f, 0.4f, 0.6f, 1);
    if (KlayGE::Context::Instance().Config().graphics_cfg.gamma)
    {
        clear_clr.r() = 0.029f;
        clear_clr.g() = 0.133f;
        clear_clr.b() = 0.325f;
    }
    re.CurFrameBuffer()->Clear(KlayGE::FrameBuffer::CBM_Color | KlayGE::FrameBuffer::CBM_Depth, clear_clr, 1.0f, 0);
    return KlayGE::App3DFramework::URV_NeedFlush | KlayGE::App3DFramework::URV_Finished;
}

main.cpp

#include "TutorFramework.h"

#include <iostream>
int main()
{
	std::string klaygePath = KLAYGE_ROOT;
	std::string klaygebinraryPath = KLAYGE_BINARY_ROOT;

	// 从KlayGE.cfg中读取配置信息。各个功能模块,诸如RenderFactory,AudioFactory等都会在这一过程中被初始化
	KlayGE::Context::Instance().LoadCfg(klaygebinraryPath + "./../KlayGE.cfg");
	//KlayGE::ResLoader::Instance().AddPath(klaygePath +"/KlayGE/Samples/Media");
	TutorFramework app;
	app.Create();
	app.Run();
	return 0;
}

预览图:

请添加图片描述

源码地址:https://github.com/longlongwaytogo/Learning.test/tree/master/GFX/KlayGE/KlayGELearning/examples/Tutor1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值