简介
从中间版本 20.2 开始,ODA SDK 包含了重新组织的可视化模块。
新的可视化模块结构提高了 ODA SDK 的灵活性,并增加了应用程序开发过程中的机会。例如,您可以构建一个不包含数据库但需要渲染的应用程序,在这种情况下,您可以直接调用渲染模块。此外,您现在可以调用渲染模块分支,同时将图形输出到不同的渲染模块。一个经典的用例是应用程序调用矢量化模块来绘制现有数据库,这没有改变,可以像以前的 ODA SDK 版本一样使用,但新的模块结构为新应用程序提供了额外的可能性。
本文介绍了可视化模块和库的集合,如何正确地将应用程序与它们链接,以及如何加载这些模块。
可视化模块图
- 灰色矩形 — 所需的静态库。
- 蓝色矩形 — 可视化应用程序所需的主要模块。
- 绿色矩形 — 将渲染流导出为 XML 格式所需的可选模块。
- 圆角矩形 — 不同的最终应用程序。
TrRenderBase.lib 仅用于构建渲染模块。导出模块(如本图中的 XML 导出)不需要此库来实现其功能。
从 20.2 版本开始的 ODA SDK 变更
- TrGL2.lib 静态库变为 TrGL2.txr 渲染模块。
- TrRenderBase.lib 是一个新的静态库,由 OpenGL ES 2.0 渲染器和矢量化器调用。
- TrXml.txr 是一个新的渲染模块,用于将渲染流导出为 XML 文件格式。
- XmlGLES2.txv 矢量化模块变为 TrXmlVec.tx 扩展模块。
如果您的最终应用程序仅调用 OpenGL ES 2.0 渲染,则只需考虑前两项。如果您的最终应用程序调用 XML 导出功能,则需考虑后两项。
注意:请不要忘记,在静态库配置中,所有动态库(.tx、.txv、.txr)都将成为应与最终应用程序链接的静态库。由于 WinGLES2 矢量化模块现在内部调用 TrGL2 渲染模块,因此在静态库配置中,应用程序还应在静态模块映射中注册新的渲染模块(此更改将在本文后面的“静态库配置”中进行描述)。
可视化模块说明
| 模块名称 | 模块类型 | 说明 |
|---|---|---|
| TrBase.lib | 静态库 | 包含所有与可视化相关的库和模块中使用的通用函数和类的库。 |
| TrRenderBase.lib | 静态库 | 包含用于构建渲染模块的通用函数和类的库。 |
| TrVec.lib | 静态库 | 包含构建矢量化模块所需所有基本功能的库。 |
| TrGL2.txr | 渲染模块 | OpenGL ES 2.0 渲染器。 |
| WinGLES2.txv | 矢量化模块 | OpenGL ES 2.0 矢量化模块(在基于 Gs 的应用程序中调用 TrGL2.txr 进行渲染)。 |
| TrXml.txr | 渲染模块 | XML 导出模块。 |
| TrXmlVec.tx | 扩展 | 调用 TrXml.txr 渲染模块以将矢量化数据导出为 XML 格式的矢量化模块。 |
| TrXmlIO.lib | 静态库 | 用于打开和处理 XML 格式矢量化数据的应用程序的库,例如,加载 XML 数据并使用另一个渲染模块进行渲染。 |
动态库配置
渲染模块
新的渲染模块在 OdModuleNames.h 头文件中定义,该文件适用于所有基于 ODA SDK 的应用程序:
#define OdTrGL2ModuleName L"TrGL2.txr"
#define OdTrXmlModuleName L"TrXml.txr"
可以使用以下调用(它使用动态模块链接器)加载渲染模块:
OdTrRndRenderModulePtr pRenderModule = ::odrxDynamicLinker()->loadModule(OdTrGL2ModuleName);
矢量化模块
矢量化模块也有相同的定义:
#define OdWinGLES2ModuleName L"WinGLES2.txv"
#define OdTrXmlVecModuleName L"TrXmlVec.tx"
这些模块可以像任何其他矢量化模块一样加载(与以前的 ODA SDK 版本相比没有变化):
OdGsModulePtr pGs = ::odrxDynamicLinker()->loadModule(OdWinGLES2ModuleName);
静态库配置
链接库
要与 TrGL2 渲染器链接,请将以下库集添加到相关项目的 CMakeLists.txt 文件中:
${TR_TXR_GL2_LIB} ${TR_RENDER_LIB} ${TR_BASE_LIB}
将以下库集添加到链接器,以与 WinGLES2 矢量化模块链接:
${TD_TXV_GLES2_LIB} ${TR_TXR_GL2_LIB} ${TR_RENDER_LIB} ${TR_VEC_LIB} ${TR_BASE_LIB}
有一个特殊的 CMake 定义可用于避免添加这个长长的库列表。要链接 WinGLES2 矢量化所需的所有库,您只能使用 $(TD_TXV_GLES2_LIBS} CMake 定义:
set(TD_TXV_GLES2_LIBS ${TD_TXV_GLES2_LIB} ${TR_TXR_GL2_LIB} ${TR_RENDER_LIB} ${TR_VEC_LIB} ${TR_BASE_LIB})
还有一个为旧项目保留的定义;该定义链接到调用过时的 TrGL2.lib 静态库的 WinGLES2 矢量化模块:
# for compatibility with old CMakeLists
set(TR_GL2_LIB ${TR_TXR_GL2_LIB} ${TR_RENDER_LIB})
因此,如果旧项目不在 CMake 中调用非标准功能,则目前不需要在相关的 CMakeLists.txt 文件中进行特殊更改。但最好避免使用过时的 $(TR_GL2_LIB} 定义,因为它将来可能会被删除。
对于需要与 TrXml.txr 渲染模块(XML 导出)链接的库:
${TR_TXR_XML_LIB} ${TR_BASE_LIB}
要与 TrXmlVec.tx 链接,您的应用程序在链接库列表中需要以下库:
${TR_XML_VEC_LIB} ${TR_TXR_XML_LIB} ${TR_VEC_LIB} ${TR_BASE_LIB}
静态模块映射
如果应用程序调用 WinGLES2 矢量化模块,则新的渲染模块也应在静态模块映射中注册:
ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(OdTrGL2RenderModule);
ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(GLES2Module);
ODRX_BEGIN_STATIC_MODULE_MAP()
ODRX_DEFINE_STATIC_APPLICATION(OdTrGL2ModuleName, OdTrGL2RenderModule)
ODRX_DEFINE_STATIC_APPMODULE(OdWinGLES2ModuleName, GLES2Module)
ODRX_END_STATIC_MODULE_MAP()
WinGLES2.txv 矢量化模块的入口点是 GLES2Module,与以前的版本一样。对于 TrGL2.txr,渲染模块入口点是 OdTrGL2RenderModule。
XML 导出应用程序也是如此:
ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(OdTrXmlRenderModule);
ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(TrXmlModule);
ODRX_BEGIN_STATIC_MODULE_MAP()
ODRX_DEFINE_STATIC_APPLICATION(OdTrXmlModuleName, OdTrXmlRenderModule)
ODRX_DEFINE_STATIC_APPLICATION(OdTrXmlVecModuleName, TrXmlModule)
ODRX_END_STATIC_MODULE_MAP()
TrXmlVec.tx(以前是 XmlGLES2.txv)矢量化模块的入口点是 TrXmlModule,与以前的版本一样。对于 TrXml.txr,渲染模块入口点是 OdTrXmlRenderModule。