第三十一章 使用DirectX

DirectX 11功能和着色器旨在直接在价格图表上实现3D可视化。

创建3D图形需要一个具有所需图像大小的图形环境(DXContextCreate)。此外,还需要准备顶点和索引缓冲区(DXBufferCreate),以及创建顶点和像素着色器(DXShaderCreate)。这足以显示彩色图形。

下一级图形需要输入(DXInputSet)以将其他渲染参数传递到着色器。这可以设置相机和3D对象的位置、描述光源并实现鼠标和键盘控制。

因此,内置的MQL5函数可以使您在MetaTrader 5中直接创建动画3D图表,无需第三方工具。显卡应支持DX 11和Shader Model 5.0,以便使函数正常工作。

若要开始使用该函数库,只需阅读文章如何在MetaTrader 5中使用DirectX创建3D图形。

函数 功能
DXContextCreate 创建图形环境,以渲染指定大小的画帧
DXContextSetSize 更改在DXContextCreate()中创建的图形环境的画帧大小
DXContextGetSize 获取在DXContextCreate()中创建的图形环境的画帧大小
DXContextClearColors 为渲染缓冲区的所有像素设置指定的颜色
DXContextClearDepth 清除深度缓冲区
DXContextGetColors 从图形环境获取具有指定大小和偏移量的图像
DXContextGetDepth 获取渲染画帧的深度缓冲区
DXBufferCreate 根据数据数组创建指定类型的缓冲区
DXTextureCreate 从传递图像中剪切的指定大小的矩形中创建2D结构
DXInputCreate 创建着色器输入
DXInputSet 设置着色器输入
DXShaderCreate 创建指定类型的着色器
DXShaderSetLayout 设置顶点着色器的顶点布局
DXShaderInputsSet 设置着色器输入
DXShaderTexturesSet 设置着色器结构
DXDraw 渲染在DXBufferSet()中设置的顶点缓冲区的顶点
DXDrawIndexed 渲染由DXBufferSet()的索引缓冲区描述的图形原语
DXPrimiveTopologySet 设置使用DXDrawIndexed()渲染的原语类型
DXBufferSet 设置当前渲染的缓冲区
DXShaderSet 设置渲染的着色器
DXHandleType 返回句柄类型
DXRelease 释放句柄

# 31.1 DXContextCreate

创建图形环境,以渲染指定大小的画帧。

int  DXContextCreate(
   uint  width,      // 像素宽度
   uint  height      // 像素高度
   );
1
2
3
4

参数

width

[in] 画帧宽度(以像素为单位)。

height

[in] 画帧高度(以像素为单位)。

返回值

在出现错误时,用于创建环境或者INVALID_HANDLE的句柄。若要接收错误代码,应该调用GetLastError()函数。

注意

使用DXBufferCreate、DXInputCreate、 DXShaderCreate和 DXTextureCreate函数创建的所有图形对象只可用在其创建的图形环境中。

随后可将画帧大小更改为DXContextSetSize()。

创建的不再使用的句柄应该由DXRelease()函数明确释放。

# 31.2 DXContextSetSize

更改在DXContextCreate()中创建的图形环境的画帧大小。

bool  DXContextSetSize(
   int    context,      // 图形环境句柄   
   uint&  width,        // 像素宽度   
   uint&  height        // 像素高度   
   );
1
2
3
4
5

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

width

[in] 画帧宽度(以像素为单位)。

height

[in] 画帧高度(以像素为单位)。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

图像环境的画帧大小应该只能在画帧渲染之间改变。

# 31.3 DXContextGetSize

获取在DXContextCreate()中创建的图形环境的画帧大小。

bool  DXContextGetSize(
   int    context,      // 图形环境句柄   
   uint&  width,        // 像素宽度 
   uint&  height        // 像素高度 
   );
1
2
3
4
5

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

width

[out] 画帧宽度(以像素为单位)。

height

[out] 画帧高度(以像素为单位)。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数

# 31.4 DXContextClearColors

为渲染缓冲区的所有像素设置指定的颜色。

bool  DXContextClearColors(
   int              context,      // 图形环境句柄
   const DXVector&  color         // 颜色
   );
1
2
3
4

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

color

[in] 渲染颜色。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

渲染下一个画帧之前,可以使用DXContextClearColors()函数来清除颜色缓冲区。

# 31.5 DXContextClearDepth

清除深度缓冲区。

bool  DXContextClearDepth(
   int  context      // 图形环境句柄 
   );
1
2
3

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

渲染下一个画帧之前,可以使用DXContextClearDepth()函数来清除深度缓冲区。

# 31.6 DXContextGetColors

从图形环境获取具有指定大小和偏移量的图像。

bool  DXContextGetColors(
   int    context,                      // 图形环境句柄  
   uint&  image[],                      // 图像像素数组 
   int    image_width=WHOLE_ARRAY,      // 图像宽度(以像素为单位)
   int    image_height=WHOLE_ARRAY,     // 图像高度(以像素为单位)
   int    image_offset_x=0,             // X偏移量
   int    image_offset_y=0              // Y偏移量
   );
1
2
3
4
5
6
7
8

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

image

[out] image_width*image_height像素数组(以ARGB格式)。

image_width=WHOLE_ARRAY

[in] 图像宽度(以像素为单位)。

image_height=WHOLE_ARRAY

[in] 图像高度(以像素为单位)。

image_offset_x=0

[in] X 偏移量。

image_offset_y=0

[in] Y偏移量。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

# 31.7 DXContextGetDepth

获取渲染画帧的深度缓冲区。

bool  DXContextGetDepth(
   int    context,      // 图形环境句柄  
   float&  image[]      // 深度值数组 
   );
1
2
3
4

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

image

[out] 渲染画帧深度缓冲区值的数组。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

返回的缓冲区包含能够以相对单位(从0.0到1.0)在DXContextGetColors()中获得的渲染画帧的每个像素的深度。

# 31.8 DXBufferCreate

根据数据数组创建指定类型的缓冲区。

int  DXBufferCreate(
   int                  context,               // 图形环境句柄
   ENUM_DX_BUFFER_TYPE  buffer_type,           // 已创建缓冲区的类型
   const void&          data[],                // 缓存数据
   uint                 start=0,               // 初始索引
   uint                 count=WHOLE_ARRAY      // 元素数
   );
1
2
3
4
5
6
7

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

buffer_type

[in] 来自ENUM_DX_BUFFER_TYPE枚举的缓冲类型。

data[]

[in] 用于创建缓冲区的数据。

start

[in] 数组第一元素索引,数组值自此开始用来创建缓冲区。默认情况下,数据取自数据的开头。

count

[in] 值数。默认情况下,使用整个数组(count=WHOLE_ARRAY)。

返回值

在出现错误时,用于创建缓冲区或者INVALID_HANDLE的句柄。若要接收错误代码,应该调用GetLastError()函数。

注意

对于索引缓冲区,data[]数组应该是'uint'类型,而顶点缓冲区接收描述顶点的结构数组。

创建的不再使用的句柄应该由DXRelease()函数明确释放。

** ENUM_DX_BUFFER_TYPE **

ID 描述
DX_BUFFER_VERTEX 1 顶点缓冲区
DX_BUFFER_INDEX 2 索引缓冲区

# 31.9 DXTextureCreate

从传递图像中剪切的指定大小的矩形中创建2D结构。

int  DXTextureCreate(
   int             context,         // 图形环境句柄
   ENUM_DX_FORMAT  format,          // 像素颜色格式 
   uint            width,           // 源图像宽度
   uint            height,          // 源图像高度
   const void&     data[],          // 源图像像素数组
   uint            data_x,          // 用于创建结构的矩形X坐标
   uint            data_y,          // 用于创建结构的矩形Y坐标
   uint            data_width,      // 用于创建结构的矩形宽度
   uint            data_height      // 用于创建结构的矩形高度
   );
1
2
3
4
5
6
7
8
9
10
11

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

format

[in] 从ENUM_DX_FORMAT枚举设置的像素颜色格式。

width

[in] 结构所基于的图像宽度。

height

[in] 结构所基于的图像高度。

data

[in] 结构所基于的图像像素数组。

data_x

[in] 用于创建结构的矩形X坐标(X偏移量)。

data_y

[in] 用于创建结构的矩形Y坐标(Y偏移量)。

data_width

[in] 用于创建结构的矩形宽度。

data_height

[in] 用于创建结构的矩形高度。

返回值

在出现错误时的结构句柄或INVALID_HANDLE。若要接收错误代码,应该调用GetLastError()函数。

注意

创建的不再使用的句柄应该由DXRelease()函数明确释放。

** ENUM_DX_FORMAT **


ID

匹配DXGI_FORMAT

DX_FORMAT_UNKNOWN

0

DXGI_FORMAT_UNKNOWN

DX_FORMAT_R32G32B32A32_TYPELESS

1

DXGI_FORMAT_R32G32B32A32_TYPELESS

DX_FORMAT_R32G32B32A32_FLOAT

2

DXGI_FORMAT_R32G32B32A32_FLOAT

DX_FORMAT_R32G32B32A32_UINT

3

DXGI_FORMAT_R32G32B32A32_UINT

DX_FORMAT_R32G32B32A32_SINT

4

DXGI_FORMAT_R32G32B32A32_SINT

DX_FORMAT_R32G32B32_TYPELESS

5

DXGI_FORMAT_R32G32B32_TYPELESS

DX_FORMAT_R32G32B32_FLOAT

6

DXGI_FORMAT_R32G32B32_FLOAT

DX_FORMAT_R32G32B32_UINT

7

DXGI_FORMAT_R32G32B32_UINT

DX_FORMAT_R32G32B32_SINT

8

DXGI_FORMAT_R32G32B32_SINT

DX_FORMAT_R16G16B16A16_TYPELESS

9

DXGI_FORMAT_R16G16B16A16_TYPELESS

DX_FORMAT_R16G16B16A16_FLOAT

10

DXGI_FORMAT_R16G16B16A16_FLOAT

DX_FORMAT_R16G16B16A16_UNORM

11/

DXGI_FORMAT_R16G16B16A16_UNORM

DX_FORMAT_R16G16B16A16_UINT

12/

DXGI_FORMAT_R16G16B16A16_UINT

DX_FORMAT_R16G16B16A16_SNORM

13

DXGI_FORMAT_R16G16B16A16_SNORM

DX_FORMAT_R16G16B16A16_SINT

14/

DXGI_FORMAT_R16G16B16A16_SINT

DX_FORMAT_R32G32_TYPELESS

15

DXGI_FORMAT_R32G32_TYPELESS

DX_FORMAT_R32G32_FLOAT

16/

DXGI_FORMAT_R32G32_FLOAT

DX_FORMAT_R32G32_UINT

17

DXGI_FORMAT_R32G32_UINT

DX_FORMAT_R32G32_SINT

18

DXGI_FORMAT_R32G32_SINT

DX_FORMAT_R32G8X24_TYPELESS

19/

DXGI_FORMAT_R32G8X24_TYPELESS

DX_FORMAT_D32_FLOAT_S8X24_UINT

20

DXGI_FORMAT_D32_FLOAT_S8X24_UINT

DX_FORMAT_R32_FLOAT_X8X24_TYPELESS

21

DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS

DX_FORMAT_X32_TYPELESS_G8X24_UINT

22

DXGI_FORMAT_X32_TYPELESS_G8X24_UINT

DX_FORMAT_R10G10B10A2_TYPELESS

23/

DXGI_FORMAT_R10G10B10A2_TYPELESS

DX_FORMAT_R10G10B10A2_UNORM

24/

DXGI_FORMAT_R10G10B10A2_UNORM

DX_FORMAT_R10G10B10A2_UINT

25/

DXGI_FORMAT_R10G10B10A2_UINT

DX_FORMAT_R11G11B10_FLOAT

26/

DXGI_FORMAT_R11G11B10_FLOAT

DX_FORMAT_R8G8B8A8_TYPELESS

27/

DXGI_FORMAT_R8G8B8A8_TYPELESS

DX_FORMAT_R8G8B8A8_UNORM

28

DXGI_FORMAT_R8G8B8A8_UNORM

DX_FORMAT_R8G8B8A8_UNORM_SRGB

29

DXGI_FORMAT_R8G8B8A8_UNORM_SRGB

DX_FORMAT_R8G8B8A8_UINT

30

DXGI_FORMAT_R8G8B8A8_UINT

DX_FORMAT_R8G8B8A8_SNORM

31

DXGI_FORMAT_R8G8B8A8_SNORM

DX_FORMAT_R8G8B8A8_SINT

32

DXGI_FORMAT_R8G8B8A8_SINT

DX_FORMAT_R16G16_TYPELESS

33

DXGI_FORMAT_R16G16_TYPELESS

DX_FORMAT_R16G16_FLOAT

34

DXGI_FORMAT_R16G16_FLOAT

DX_FORMAT_R16G16_UNORM

35

DXGI_FORMAT_R16G16_UNORM

DX_FORMAT_R16G16_UINT

36

DXGI_FORMAT_R16G16_UINT

DX_FORMAT_R16G16_SNORM

37

DXGI_FORMAT_R16G16_SNORM

DX_FORMAT_R16G16_SINT

38

DXGI_FORMAT_R16G16_SINT

DX_FORMAT_R32_TYPELESS

39

DXGI_FORMAT_R32_TYPELESS

DX_FORMAT_D32_FLOAT

40

DXGI_FORMAT_D32_FLOAT

DX_FORMAT_R32_FLOAT

41

DXGI_FORMAT_R32_FLOAT

DX_FORMAT_R32_UINT

42

DXGI_FORMAT_R32_UINT

DX_FORMAT_R32_SINT

43

DXGI_FORMAT_R32_SINT

DX_FORMAT_R24G8_TYPELESS

44

DXGI_FORMAT_R24G8_TYPELESS

DX_FORMAT_D24_UNORM_S8_UINT

45

DXGI_FORMAT_D24_UNORM_S8_UINT

DX_FORMAT_R24_UNORM_X8_TYPELESS

46

DXGI_FORMAT_R24_UNORM_X8_TYPELESS

DX_FORMAT_X24_TYPELESS_G8_UINT

47

DXGI_FORMAT_X24_TYPELESS_G8_UINT

DX_FORMAT_R8G8_TYPELESS

48

DXGI_FORMAT_R8G8_TYPELESS

DX_FORMAT_R8G8_UNORM

49

DXGI_FORMAT_R8G8_UNORM

DX_FORMAT_R8G8_UINT

50

DXGI_FORMAT_R8G8_UINT

DX_FORMAT_R8G8_SNORM

51

DXGI_FORMAT_R8G8_SNORM

DX_FORMAT_R8G8_SINT

52

DXGI_FORMAT_R8G8_SINT

DX_FORMAT_R16_TYPELESS

53

DXGI_FORMAT_R16_TYPELESS

DX_FORMAT_R16_FLOAT

54

DXGI_FORMAT_R16_FLOAT

DX_FORMAT_D16_UNORM

55

DXGI_FORMAT_D16_UNORM

DX_FORMAT_R16_UNORM

56

DXGI_FORMAT_R16_UNORM

DX_FORMAT_R16_UINT

57

DXGI_FORMAT_R16_UINT

DX_FORMAT_R16_SNORM

58

DXGI_FORMAT_R16_SNORM

DX_FORMAT_R16_SINT

59

DXGI_FORMAT_R16_SINT

DX_FORMAT_R8_TYPELESS

60

DXGI_FORMAT_R8_TYPELESS

DX_FORMAT_R8_UNORM

61

DXGI_FORMAT_R8_UNORM

DX_FORMAT_R8_UINT

62

DXGI_FORMAT_R8_UINT

DX_FORMAT_R8_SNORM

63

DXGI_FORMAT_R8_SNORM

DX_FORMAT_R8_SINT

64

DXGI_FORMAT_R8_SINT

DX_FORMAT_A8_UNORM

65

DXGI_FORMAT_A8_UNORM

DX_FORMAT_R1_UNORM

66

DXGI_FORMAT_R1_UNORM

DX_FORMAT_R9G9B9E5_SHAREDEXP

67

DXGI_FORMAT_R9G9B9E5_SHAREDEXP

DX_FORMAT_R8G8_B8G8_UNORM

68

DXGI_FORMAT_R8G8_B8G8_UNORM

DX_FORMAT_G8R8_G8B8_UNORM

69

DXGI_FORMAT_G8R8_G8B8_UNORM

DX_FORMAT_BC1_TYPELESS

70

DXGI_FORMAT_BC1_TYPELESS

DX_FORMAT_BC1_UNORM

71

DXGI_FORMAT_BC1_UNORM

DX_FORMAT_BC1_UNORM_SRGB

72

DXGI_FORMAT_BC1_UNORM_SRGB

DX_FORMAT_BC2_TYPELESS

73

DXGI_FORMAT_BC2_TYPELESS

DX_FORMAT_BC2_UNORM

74

DXGI_FORMAT_BC2_UNORM

DX_FORMAT_BC2_UNORM_SRGB

75

DXGI_FORMAT_BC2_UNORM_SRGB

DX_FORMAT_BC3_TYPELESS

76

DXGI_FORMAT_BC3_TYPELESS

DX_FORMAT_BC3_UNORM

77

DXGI_FORMAT_BC3_UNORM

DX_FORMAT_BC3_UNORM_SRGB

78

DXGI_FORMAT_BC3_UNORM_SRGB

DX_FORMAT_BC4_TYPELESS

79

DXGI_FORMAT_BC4_TYPELESS

DX_FORMAT_BC4_UNORM

80

DXGI_FORMAT_BC4_UNORM

DX_FORMAT_BC4_SNORM

81

DXGI_FORMAT_BC4_SNORM

DX_FORMAT_BC5_TYPELESS

82

DXGI_FORMAT_BC5_TYPELESS

DX_FORMAT_BC5_UNORM

83

DXGI_FORMAT_BC5_UNORM

DX_FORMAT_BC5_SNORM

84

DXGI_FORMAT_BC5_SNORM

DX_FORMAT_B5G6R5_UNORM

85

DXGI_FORMAT_B5G6R5_UNORM

DX_FORMAT_B5G5R5A1_UNORM

86

DXGI_FORMAT_B5G5R5A1_UNORM

DX_FORMAT_B8G8R8A8_UNORM

87

DXGI_FORMAT_B8G8R8A8_UNORM

DX_FORMAT_B8G8R8X8_UNORM

88

DXGI_FORMAT_B8G8R8X8_UNORM

DX_FORMAT_R10G10B10_XR_BIAS_A2_UNORM

89

DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM

DX_FORMAT_B8G8R8A8_TYPELESS

90

DXGI_FORMAT_B8G8R8A8_TYPELESS

DX_FORMAT_B8G8R8A8_UNORM_SRGB

91

DXGI_FORMAT_B8G8R8A8_UNORM_SRGB

DX_FORMAT_B8G8R8X8_TYPELESS

92

DXGI_FORMAT_B8G8R8X8_TYPELESS

DX_FORMAT_B8G8R8X8_UNORM_SRGB

93

DXGI_FORMAT_B8G8R8X8_UNORM_SRGB

DX_FORMAT_BC6H_TYPELESS

94

DXGI_FORMAT_BC6H_TYPELESS

DX_FORMAT_BC6H_UF16

95

DXGI_FORMAT_BC6H_UF16

DX_FORMAT_BC6H_SF16

96

DXGI_FORMAT_BC6H_SF16

DX_FORMAT_BC7_TYPELESS

97

DXGI_FORMAT_BC7_TYPELESS

DX_FORMAT_BC7_UNORM

98

DXGI_FORMAT_BC7_UNORM

DX_FORMAT_BC7_UNORM_SRGB

99

DXGI_FORMAT_BC7_UNORM_SRGB

DX_FORMAT_AYUV

100

DXGI_FORMAT_AYUV

DX_FORMAT_Y410

101

DXGI_FORMAT_Y410

DX_FORMAT_Y416

102

DXGI_FORMAT_Y416

DX_FORMAT_NV12

103

DXGI_FORMAT_NV12

DX_FORMAT_P010

104

DXGI_FORMAT_P010

DX_FORMAT_P016

105

DXGI_FORMAT_P016

DX_FORMAT_420_OPAQUE

106

DXGI_FORMAT_420_OPAQUE

DX_FORMAT_YUY2

107

DXGI_FORMAT_YUY2

DX_FORMAT_Y210

108

DXGI_FORMAT_Y210

DX_FORMAT_Y216

109

DXGI_FORMAT_Y216

DX_FORMAT_NV11

110

DXGI_FORMAT_NV11

DX_FORMAT_AI44

111

DXGI_FORMAT_AI44

DX_FORMAT_IA44

112

DXGI_FORMAT_IA44

DX_FORMAT_P8

113

DXGI_FORMAT_P8

DX_FORMAT_A8P8

114

DXGI_FORMAT_A8P8

DX_FORMAT_B4G4R4A4_UNORM

115

DXGI_FORMAT_B4G4R4A4_UNORM

DX_FORMAT_P208

130

DXGI_FORMAT_P208

DX_FORMAT_V208

131

DXGI_FORMAT_V208

DX_FORMAT_V408

132

DXGI_FORMAT_V408

DX_FORMAT_FORCE_UINT

0xffffffff

DXGI_FORMAT_FORCE_UINT

# 31.10 DXInputCreate

创建着色器输入。

int  DXInputCreate(
   int   context,        // 图形环境句柄
   uint  input_size      // 输入大小(以字节为单位) 
   );
1
2
3
4

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

input_size

[in] 参数结构的大小(以字节为单位)。

返回值

在出现错误时,用于着色器输入或者INVALID_HANDLE的句柄。若要接收错误代码,应该调用GetLastError()函数。 创建的不再使用的句柄应该由DXRelease()函数明确释放。

# 31.11 DXInputSet

设置着色器输入。

  bool  DXInputSet(
   int          input,      // 图形环境句柄
   const void&  data        // 设置数据  
   );
1
2
3
4

参数

input

[in] 在DXInputCreate()中获得的着色器的输入句柄。

data

[in] 用于设置着色器输入的数据。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

# 31.12 DXShaderCreate

创建指定类型的着色器。

int  DXShaderCreate(
   int                  context,          // 图形环境句柄  
   ENUM_DX_SHADER_TYPE  shader_type,      // 着色器类型 
   const string         source,           // 着色器源代码
   const string         entry_point,      // 切入点
   string&              compile_error     // 接收编译器消息的字符串
   );
1
2
3
4
5
6
7

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

shader_type

[out] 来自ENUM_DX_SHADER_TYPE枚举的值。

source

[in] 在HLSL 5中的着色器源代码。

entry_point

[in] 切入点 – 源代码中的函数名。

compile_error

[in] 接收编译错误的字符串。

返回值 在出现错误时,着色器或者INVALID_HANDLE的句柄。若要接收错误代码,应该调用GetLastError()函数。

注意 创建的不再使用的句柄应该由DXRelease()函数明确释放。

** ENUM_DX_SHADER_TYPE **

ID 描述
DX_SHADER_VERTEX 0 顶点着色器
DX_SHADER_GEOMETRY 1 几何着色器
DX_SHADER_PIXEL 2 像素着色器

# 31.13 DXShaderSetLayout

设置顶点着色器的顶点布局。

bool  DXShaderSetLayout(
   int                    shader,       // 着色器句柄
   const DXVertexLayout&  layout[]      // 
   );
1
2
3
4

参数

shader

[in] 在DXShaderCreate()中创建的顶点着色器句柄。

layout[]

[in] 顶点字段描述数组。该描述通过DXVertexLayout结构设置:

  struct DXVertexLayout
  {
   string         semantic_name;       // 在着色器输入签名中与此元素关联的HLSL语义。
   uint           semantic_index;      // 此元素的语义索引。语义索引使用整数索引号修改语义。只有当存在多个具有相同语义的元素时,才需要语义索引
   ENUM_DX_FORMAT format;              // 元素数据的数据类型。
  };
1
2
3
4
5
6

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

布局应该匹配指定顶点缓冲区中的顶点类型。还应该匹配顶点着色器代码中切入点使用的顶点输入类型。 着色器的顶点缓冲区在DXBufferSet()中设置。

DXVertexLayout结构是D3D11_INPUT_ELEMENT_DESC MSDN结构的一个版本。

# 31.14 DXShaderInputsSet

设置着色器输入。

  bool  DXShaderInputsSet(
   int         shader,       // 着色器句柄
   const int&  inputs[]      // 输入句柄数组
   );
1
2
3
4

参数

shader

[in] 在DXShaderCreate()中创建的着色器句柄。

inputs[]

[in] 使用DXInputCreate()创建的输入句柄数组。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

输入参数的大小应该等于着色器代码中声明的cbuffer对象的数量。

# 31.15 DXShaderTexturesSet

设置着色器结构。

  bool  DXShaderTexturesSet(
   int          shader,         // 着色器句柄
   const  int&  textures[]      // 结构句柄数组
   );
1
2
3
4

参数

shader

[in] 在DXShaderCreate()中创建的着色器句柄。

textures[]

[in] 使用DXTextureCreate()创建的结构句柄数组。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

结构数组的大小应该等于着色器代码中声明的Texture2D对象的数量。

# 31.16 DXDraw

渲染在DXBufferSet()中设置的顶点缓冲区的顶点

  bool  DXDraw(
   int   context,               // 图形环境句柄
   uint  start=0,               // 第一个顶点索引
   uint  count=WHOLE_ARRAY      // 顶点数量
   );
1
2
3
4
5

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

start

[in] 渲染的第一个顶点的索引。

count

[in] 要渲染的顶点数量。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

应使用DXShaderSet()初步设置着色器来渲染顶点。

# 31.17 DXDrawIndexed

渲染由DXBufferSet()的索引缓冲区描述的图形原语。

  bool  DXDrawIndexed(
   int   context,               // 图形环境句柄 
   uint  start=0,               // 第一个原语索引
   uint  count=WHOLE_ARRAY      // 原语数量
   );
1
2
3
4
5

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

start

[in] 用于渲染的第一个原语的索引。

count

[in] 用于渲染的原语数量。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

使用DXPrimiveTopologySet()设置索引缓冲区描述的原语类型。
初步设置DXBufferSet()中的订单缓冲区来渲染原语。
此外,应使用DXShaderSet()初步设置着色器。

# 31.18 DXPrimiveTopologySet

设置使用DXDrawIndexed()渲染的原语类型。

  bool  DXPrimiveTopologySet(
   int                         context,                // 图形环境句柄
   ENUM_DX_PRIMITIVE_TOPOLOGY  primitive_topology      // 原语类型
   );
1
2
3
4

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

primitive_topology

[in] 来自ENUM_DX_PRIMITIVE_TOPOLOGY枚举的值。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

** ENUM_DX_PRIMITIVE_TOPOLOGY **

ID 匹配D3D11_PRIMITIVE_TOPOLOGY
DX_PRIMITIVE_TOPOLOGY_POINTLIST 1 D3D11_PRIMITIVE_TOPOLOGY_POINTLIST
DX_PRIMITIVE_TOPOLOGY_LINELIST 2 D3D11_PRIMITIVE_TOPOLOGY_LINELIST
DX_PRIMITIVE_TOPOLOGY_LINESTRIP 3 D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP
DX_PRIMITIVE_TOPOLOGY_TRIANGLELIST 4 D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST
DX_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP 5 D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP
DX_PRIMITIVE_TOPOLOGY_LINELIST_ADJ 6 D3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ
DX_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ 7 D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ
DX_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ 8 D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ
DX_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ 9 D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ

# 31.19 DXBufferSet

设置当前渲染的缓冲区。

bool  DXBufferSet(
   int   context,               // 图形环境句柄
   int   buffer,                // 顶点或索引缓冲区句柄
   uint  start=0,               // 初始索引
   uint  count=WHOLE_ARRAY      // 元素数
   );
1
2
3
4
5
6

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

buffer

[in] 在DXBufferCreate()中创建的顶点或索引缓冲区的句柄。

start

[in] 缓冲区第一个元素的索引。默认情况下,使用缓冲区开始的数据。

count

[in] 将要使用的值数。默认值是所有缓冲区值。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

应该调用DXBufferSet()函数来设置订单和索引缓冲区,以便使用DXDraw()进行渲染。

# 31.20 DXShaderSet

设置渲染的着色器。

bool  DXShaderSet(
   int  context,      // 图形环境句柄
   int  shader        // 着色器句柄
   );
1
2
3
4

参数

context

[in] 在DXContextCreate()中创建的图形环境的句柄。

shader

[in] 在DXShaderCreate()中创建的着色器句柄。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

几种着色器类型可以同时用于渲染(顶点着色器、几何着色器和像素着色器)。

# 31.21 DXHandleType

返回句柄类型。

ENUM_DX_HANDLE_TYPE  DXHandleType(
   int  handle      // 句柄 
   );
1
2
3

参数

handle

[in] 句柄。

返回值

来自ENUM_DX_HANDLE_TYPE枚举的值

ENUM_DX_HANDLE_TYPE

ID 描述
DX_HANDLE_INVALID 0 无效句柄
DX_HANDLE_CONTEXT 1 图形环境句柄
DX_HANDLE_SHADER 2 着色器句柄
DX_HANDLE_BUFFER 3 顶点或索引缓冲区句柄
DX_HANDLE_INPUT 4 着色器输入句柄
DX_HANDLE_TEXTURE 5 结构句柄

# 31.22 DXRelease

释放句柄。

bool  DXRelease(
   int  handle      // 句柄 
   );
1
2
3

参数

context

[in] 释放句柄。

返回值

如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。

注意

创建的不再使用的所有句柄应该由DXRelease()函数明确释放。