[返回博客](/cn/blog) # 可视化模块的组织

Andrew Markovich 五月 30, 2019 [\#rendering](/cn/blog/tag/rendering)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

#### 简介

从中间版本 20.2 开始，ODA SDK 包含了重新组织的可视化模块。

新的可视化模块结构提高了 ODA SDK 的灵活性，并增加了应用程序开发过程中的机会。例如，您可以构建一个不包含数据库但需要渲染的应用程序，在这种情况下，您可以直接调用渲染模块。此外，您现在可以调用渲染模块分支，同时将图形输出到不同的渲染模块。一个经典的用例是应用程序调用矢量化模块来绘制现有数据库，这没有改变，可以像以前的 ODA SDK 版本一样使用，但新的模块结构为新应用程序提供了额外的可能性。

本文介绍了可视化模块和库的集合，如何正确地将应用程序与它们链接，以及如何加载这些模块。

#### 可视化模块图

![image2](/files/inline-images/123_0.jpg)- 灰色矩形 — 所需的静态库。
- 蓝色矩形 — 可视化应用程序所需的主要模块。
- 绿色矩形 — 将渲染流导出为 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。

## 今天就开始行动

**免费试用 ODA 软件 60 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
