• Nebula3 SDK 中的新东西


    概述

    • 一些为了兼容Nebula2的代码所做的修改, 主要是一些宏的名字受到影响(DeclareClass -> __DeclareClass, ImplementSingleton -> __ImplementSingleton etc...)
    • 着手删除#ifndef/#define/#endif 这些防止重复include的宏, 因为几乎所有的编译器(VStudio, GCC, Codewarrior) 都支持#pragma once 
    • 把同的样Win32 和Xbox360 代码移动到一个共同的Win360 命名空间来消除代码冗余
    • 加入了一个新的Toolkit层, 它包含了一些导出工具和辅助类
    • 加入和整理了一些 Doxygen(文档) 页面

    编译系统

    • 重新组织了 VStudio解决方案的结构, 让所有的依赖工程都在一个解决方案中, 这样就不用再同时打开多个VStudio了
    • 现在可以通过.epk编译脚本来导入VStudio工程(对于不在Nebula3 SDK目录下的工程很有用)
    • 新的"projectinfo.xml" 文件为一些有用的导出工具定义了工程和平台特有的属性
    • 把 export.zip 档案文件分割到一个独立的平台无关文件和几个特定平台的文件 (export.zip 包含所有平台无关的文件, export_win32.zip, export_xbox360.zip, export_wii.zip 包含特定平台的文件)
    • 加入一个统一的多平台支持到 asset-pipeline (如 "msbuild /p:Platform=xbox360" 来生成XBOX360的东西)
    • 一个新的命令行生成工具 (有代码):
      • audiobatcher3.exe (包装了音频导出)
      • texturebatcher3.exe (包装了纹理导出)
      • shaderbatcher3.exe (包装了 shader 编译)
      • buildresdict.exe (生成资源词典文件)
      • 这些工具大部分只是调用其它的生成工具(像xactbld3.exe, nvdxt.exe, 还有其它命令下的生成工具)
    • 注意公开的N3-SDK因为法律原因只包含Win32平台的支持

    基础层

    • 修正Core::RefCounted 和Util::Proxy 引用计数线程不安全的BUG
    • 加入 WeakPtr<> 类用于更好地处理环形引用
    • 在 Ptr<>中加入类型转换的方法
    • 简化System::ByteOrder 类接口
    • 加入平台相关的面向任务的"virtual CPU core id" (如 MainThreadCode, RenderThreadCore, 等等...)
    • 加入一个 System::SystemInfo 类
    • 加入 Threading::ThreadId 类型和 Threading::Thread::GetMyThreadId()静态方法
    • 现在可以在VStudio调试器和其它的高度工具中看到线程的固有名称了
    • SetThreadIdealProcessor() 现在用于在Win32平台上把线程分配给可用CPU核心
    • 新的线程子系统的HTTP 调试页面(现在只列出Nebula3的活动线程)
    • MiniDump支持: 崩溃, n_assert()和 n_error() 现在在Win32平台上会生成 MiniDump 文件
    • 新的 Debug 子系统用于代码分析:
      • 提供 DebugTimer 和 DebugCounter 对象
      • HTTP 调试页面允许在运行时检查DebugTimers和 DebugCounters
    • 新的Memory::MemoryPool 类来分配同样大小的内存块(加快分配速度和减少内存碎片)
    • Math::matrix44在中的一些新的和改名的方法
    • Http 子系统现在运行在它自己的线程里
    • 把 SVG 支持加入到 Http 子系统(Http::SvgPageWriter 和Http::SvgLineChartWriter) (xoyojank:难道是Scalable Vector Graphics?这样的话可以输出图表了)
    • 加入 IO::ExcelXMLReader 流读取类, 允许读取XML模式的MS Excel电子表格文件
    • 在Messaging::AsyncPort加入行为方式, 定义了处理线程怎样去等待新的消息:
      • WaitForMessage: 在消息到达前一直阻塞
      • WaitForMessageOrTimeOut: 在消息到达或超时前一直阻塞
      • DoNotWait: 不等待消息
    • 加入 Remote 子系统, 允许通过TCP/IP连接远程控制N3应用程序

    渲染层

    • 把渲染移动了它自己的线程 (InternalGraphics子系统在渲染线程这边,  Graphics 前端子系统在主线程这边)
    • 加入了 CoreAnimation 和 Animation 子系统 (构造中)
    • 为简单的用户界面加入了UI子系统 (构造中) (xoyojank: 这个不错^_^)
    • 加入CoreAudio和 Audio 子系统(构造中):
      • CoreAudio 是后台的, 运行在自己的线程里
      • Audio 是前台的"客户端", 运行在主线程里 (或者其它任何线程)
      • 围绕XACT的概念设计
      • 提供 XACT 的包装实现
    • 加入 CoreGraphics::TextRenderer 和 CoreGraphics::ShapeRenderer 类, 打算用于渲染调试信息
    • 加入调试渲染子系统(现在在Debug命名空间下)
    • Frame 子系统: FramePostEffect 现也也许会包含 FrameBatch
    • Input 子系统: 断开 XInput 游戏手柄接口现在对于连接中的设备每隔0.5秒才检测一次
    • Resources 子系统: 加入 ResourceAllocator/ResourceLump 系统为Console平台真正的资源流做准备

    应用层和插件:

    • 删除了 CoreFeature (这东西不得不进入GameApplication类来阻止鸡生蛋问题)
    • 加入 NetworkFeature (构造中)
    • 加入 UIFeature (构造中)
    • 加入 CoreNetwork 和 Multiplayer 插件(RakNet的包装)
  • 相关阅读:
    爬虫解析库:XPath
    手写一个小型打包构建工具
    Python网络爬虫神器PyQuery的使用方法
    人脸识别JavaScript也可以轻松搞定
    颜值即正义!这几个库颠覆你对数据交互的想象
    微信朋友圈自动点赞
    android studio的安装信息
    Docker使用笔记
    C语言联合
    Mac之Sublime Text使用Go
  • 原文地址:https://www.cnblogs.com/flying_bat/p/1354932.html
Copyright © 2020-2023  润新知