ID3DX10ThreadPump 接口
用于异步执行任务,并使用 D3DX10CreateThreadPump 创建。 有几个 D3DX10 API 可以选择性地将线程泵作为参数,例如 D3DX10CreateTextureFromFile 和 D3DX10CompileFromFile (请参阅完整列表) 注释。 如果线程泵传递到这些 API 中,它们将在单独的线程泵线程上异步执行。 这样做的优点是,它可以使加载和处理大量数据发生,而不会在屏幕上看到明显的性能下降。
成员
ID3DX10ThreadPump 接口继承自 IUnknown 接口。 ID3DX10ThreadPump 也具有以下类型的成员:
方法
ID3DX10ThreadPump 接口具有这些方法。
方法 | 说明 |
---|---|
AddWorkItem | 将工作项添加到线程泵。 |
GetQueueStatus | 获取线程泵内三个队列中每个队列中的项数。 |
GetWorkItemCount | 获取线程泵中当前的工作项数。 |
ProcessDeviceWorkItems | 在完成加载和处理后,将工作项设置为设备。 当线程泵完成资源或着色器的加载和处理后,它会将其保存在队列中,直到调用此 API,此时处理的项目将设置为设备。 这对于控制将资源绑定到每个帧的设备所花费的处理量非常有用。 请参阅备注。 |
PurgeAllItems | 清除线程泵中的所有工作项。 |
WaitForAllItems | 等待线程泵中的所有工作项完成。 |
备注
线程泵在 3 个步骤过程中加载和处理数据。 它去:
- 使用数据加载程序加载和解压缩数据。 数据加载程序对象具有线程泵在加载和解压缩数据时将在内部调用的三种方法: ID3DX10DataLoader::Load、 ID3DX10DataLoader::D ecompress 和 ID3DX10DataLoader::D estroy。 这三个 API 的特定功能因加载和解压缩的数据类型而异。 如果加载以自己的自定义格式定义的数据文件,也可以继承数据加载程序接口并更改其 API。
- 使用数据处理者处理数据。 数据处理者对象具有线程泵在处理数据时将在内部调用的三种方法: ID3DX10DataProcessor::P rocess、 ID3DX10DataProcessor::CreateDeviceObject 和 ID3DX10DataProcessor::D estroy。 处理数据的方式因数据类型而异。 例如,如果数据是存储为 JPEG 的纹理,则 ID3DX10DataProcessor::P rocess 将执行 JPEG 解压缩以获取图像的原始图像位。 如果数据是着色器,则 ID3DX10DataProcessor::P rocess 会将 HLSL 编译为字节码。 处理数据后,将使用 ID3DX10DataProcessor::CreateDeviceObject) 为该数据 (创建设备对象,并将对象添加到设备对象的队列中。 如果数据处理者正在处理以自己的自定义格式定义的数据文件,也可以继承数据处理者接口并更改其 API。
- 将设备对象绑定到设备。 当应用程序调用 ID3DX10ThreadPump::P rocessDeviceWorkItems 时,此操作会将设备对象队列中的指定数量的对象绑定到设备。
线程泵可用于通过以下两种方式之一加载数据:调用采用线程泵作为参数的 API,例如 D3DX10CreateTextureFromFile 和 D3DX10CompileFromFile,或调用 ID3DX10ThreadPump::AddWorkItem。 对于采用线程泵的 API,数据加载器和数据处理者是在内部创建的。 对于 AddWorkItem,数据加载器和数据处理者必须事先创建,然后传递到 AddWorkItem 中。 D3DX10 提供了一组 API,用于创建具有加载和处理常见数据格式的功能的数据加载器和数据处理者, (请参阅说明,了解) API 的完整列表。 对于自定义数据格式,必须继承数据加载器和数据处理者接口,并且必须重新定义其方法。
线程泵对象占用大量资源,因此通常每个应用程序只应创建一个资源。
内置 D3DX10 数据加载程序
说明 | |
---|---|
D3DX10CreateAsyncFileLoader | 异步创建文件加载程序。 |
D3DX10CreateAsyncMemoryLoader | 异步创建数据加载程序。 |
D3DX10CreateAsyncResourceLoader | 异步创建资源加载程序。 |
内置 D3DX10 数据处理者
说明 | |
---|---|
D3DX10CreateAsyncTextureProcessor | 创建要与线程泵一起使用的数据处理者。 此 API 类似于 D3DX10CreateAsyncTextureInfoProcessor,但它也会加载纹理。 |
D3DX10CreateAsyncTextureInfoProcessor | 创建要与线程泵一起使用的数据处理者。 |
D3DX10CreateAsyncShaderCompilerProcessor | 编译着色器并异步创建数据处理者。 |
D3DX10CreateAsyncEffectCompilerProcessor | 使用数据处理者异步创建效果。 |
D3DX10CreateAsyncEffectCreateProcessor | 异步创建效果池。 |
D3DX10CreateAsyncEffectPoolCreateProcessor | 异步创建数据处理者。 |
D3DX10CreateAsyncShaderPreprocessProcessor | 异步为着色器创建数据处理者。 |
采用线程泵作为参数的 API。
说明 | |
---|---|
D3DX10CompileFromFile | 从文件编译着色器。 |
D3DX10CompileFromMemory | 编译驻留在内存中的着色器。 |
D3DX10CompileFromResource | 从资源编译着色器。 |
D3DX10CreateEffectFromFile | 从文件创建效果。 |
D3DX10CreateEffectFromMemory | 从内存创建效果。 |
D3DX10CreateEffectFromResource | 从资源创建效果。 |
D3DX10CreateEffectPoolFromFile | 从文件创建效果池。 |
D3DX10CreateEffectPoolFromMemory | 从驻留在内存中的文件创建效果池。 |
D3DX10CreateEffectPoolFromResource | 从资源创建效果池。 |
D3DX10PreprocessShaderFromFile | 从文件创建着色器,而无需编译它。 |
D3DX10PreprocessShaderFromMemory | 从内存创建着色器而不对其进行编译。 |
D3DX10PreprocessShaderFromResource | 从资源创建着色器而不对其进行编译。 |
D3DX10CreateShaderResourceViewFromFile | 从文件创建着色器资源视图。 |
D3DX10CreateShaderResourceViewFromMemory | 从内存中的文件创建着色器资源视图。 |
D3DX10CreateShaderResourceViewFromResource | 从资源创建着色器资源视图。 |
D3DX10GetImageInfoFromFile | 检索有关给定图像文件的信息。 |
D3DX10GetImageInfoFromMemory | 获取有关已加载到内存的图像的信息。 |
D3DX10GetImageInfoFromResource | 检索有关资源中给定图像的信息。 |
D3DX10CreateTextureFromFile | 从文件创建纹理资源。 |
D3DX10CreateTextureFromMemory | 从驻留在系统内存中的文件创建纹理资源。 |
D3DX10CreateTextureFromResource | 从另一个资源创建纹理资源。 |
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|
另请参阅