第三十一章 使用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 // 像素高度
);
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 // 像素高度
);
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 // 像素高度
);
2
3
4
5
参数
context
[in] 在DXContextCreate()中创建的图形环境的句柄。
width
[out] 画帧宽度(以像素为单位)。
height
[out] 画帧高度(以像素为单位)。
返回值
如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数
# 31.4 DXContextClearColors
为渲染缓冲区的所有像素设置指定的颜色。
bool DXContextClearColors(
int context, // 图形环境句柄
const DXVector& color // 颜色
);
2
3
4
参数
context
[in] 在DXContextCreate()中创建的图形环境的句柄。
color
[in] 渲染颜色。
返回值
如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。
注意
渲染下一个画帧之前,可以使用DXContextClearColors()函数来清除颜色缓冲区。
# 31.5 DXContextClearDepth
清除深度缓冲区。
bool DXContextClearDepth(
int context // 图形环境句柄
);
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偏移量
);
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[] // 深度值数组
);
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 // 元素数
);
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 // 用于创建结构的矩形高度
);
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 // 输入大小(以字节为单位)
);
2
3
4
参数
context
[in] 在DXContextCreate()中创建的图形环境的句柄。
input_size
[in] 参数结构的大小(以字节为单位)。
返回值
在出现错误时,用于着色器输入或者INVALID_HANDLE的句柄。若要接收错误代码,应该调用GetLastError()函数。 创建的不再使用的句柄应该由DXRelease()函数明确释放。
# 31.11 DXInputSet
设置着色器输入。
bool DXInputSet(
int input, // 图形环境句柄
const void& data // 设置数据
);
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 // 接收编译器消息的字符串
);
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[] //
);
2
3
4
参数
shader
[in] 在DXShaderCreate()中创建的顶点着色器句柄。
layout[]
[in] 顶点字段描述数组。该描述通过DXVertexLayout结构设置:
struct DXVertexLayout
{
string semantic_name; // 在着色器输入签名中与此元素关联的HLSL语义。
uint semantic_index; // 此元素的语义索引。语义索引使用整数索引号修改语义。只有当存在多个具有相同语义的元素时,才需要语义索引
ENUM_DX_FORMAT format; // 元素数据的数据类型。
};
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[] // 输入句柄数组
);
2
3
4
参数
shader
[in] 在DXShaderCreate()中创建的着色器句柄。
inputs[]
[in] 使用DXInputCreate()创建的输入句柄数组。
返回值
如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。
注意
输入参数的大小应该等于着色器代码中声明的cbuffer对象的数量。
# 31.15 DXShaderTexturesSet
设置着色器结构。
bool DXShaderTexturesSet(
int shader, // 着色器句柄
const int& textures[] // 结构句柄数组
);
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 // 顶点数量
);
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 // 原语数量
);
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 // 原语类型
);
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 // 元素数
);
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 // 着色器句柄
);
2
3
4
参数
context
[in] 在DXContextCreate()中创建的图形环境的句柄。
shader
[in] 在DXShaderCreate()中创建的着色器句柄。
返回值
如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。
注意
几种着色器类型可以同时用于渲染(顶点着色器、几何着色器和像素着色器)。
# 31.21 DXHandleType
返回句柄类型。
ENUM_DX_HANDLE_TYPE DXHandleType(
int handle // 句柄
);
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 // 句柄
);
2
3
参数
context
[in] 释放句柄。
返回值
如果执行成功,返回true,否则 - false。若要接收错误代码,应该调用GetLastError()函数。
注意
创建的不再使用的所有句柄应该由DXRelease()函数明确释放。