ID3DX10ThreadPump 接口

用于异步执行任务,并使用 D3DX10CreateThreadPump 创建。 有几个 D3DX10 API 可以选择性地将线程泵作为参数,例如 D3DX10CreateTextureFromFileD3DX10CompileFromFile (请参阅完整列表) 注释。 如果线程泵传递到这些 API 中,它们将在单独的线程泵线程上异步执行。 这样做的优点是,它可以使加载和处理大量数据发生,而不会在屏幕上看到明显的性能下降。

成员

ID3DX10ThreadPump 接口继承自 IUnknown 接口。 ID3DX10ThreadPump 也具有以下类型的成员:

方法

ID3DX10ThreadPump 接口具有这些方法。

方法 说明
AddWorkItem 将工作项添加到线程泵。
GetQueueStatus 获取线程泵内三个队列中每个队列中的项数。
GetWorkItemCount 获取线程泵中当前的工作项数。
ProcessDeviceWorkItems 在完成加载和处理后,将工作项设置为设备。 当线程泵完成资源或着色器的加载和处理后,它会将其保存在队列中,直到调用此 API,此时处理的项目将设置为设备。 这对于控制将资源绑定到每个帧的设备所花费的处理量非常有用。 请参阅备注。
PurgeAllItems 清除线程泵中的所有工作项。
WaitForAllItems 等待线程泵中的所有工作项完成。

 

备注

线程泵在 3 个步骤过程中加载和处理数据。 它去:

  1. 使用数据加载程序加载和解压缩数据。 数据加载程序对象具有线程泵在加载和解压缩数据时将在内部调用的三种方法: ID3DX10DataLoader::LoadID3DX10DataLoader::D ecompressID3DX10DataLoader::D estroy。 这三个 API 的特定功能因加载和解压缩的数据类型而异。 如果加载以自己的自定义格式定义的数据文件,也可以继承数据加载程序接口并更改其 API。
  2. 使用数据处理者处理数据。 数据处理者对象具有线程泵在处理数据时将在内部调用的三种方法: ID3DX10DataProcessor::P rocessID3DX10DataProcessor::CreateDeviceObjectID3DX10DataProcessor::D estroy。 处理数据的方式因数据类型而异。 例如,如果数据是存储为 JPEG 的纹理,则 ID3DX10DataProcessor::P rocess 将执行 JPEG 解压缩以获取图像的原始图像位。 如果数据是着色器,则 ID3DX10DataProcessor::P rocess 会将 HLSL 编译为字节码。 处理数据后,将使用 ID3DX10DataProcessor::CreateDeviceObject) 为该数据 (创建设备对象,并将对象添加到设备对象的队列中。 如果数据处理者正在处理以自己的自定义格式定义的数据文件,也可以继承数据处理者接口并更改其 API。
  3. 将设备对象绑定到设备。 当应用程序调用 ID3DX10ThreadPump::P rocessDeviceWorkItems 时,此操作会将设备对象队列中的指定数量的对象绑定到设备。

线程泵可用于通过以下两种方式之一加载数据:调用采用线程泵作为参数的 API,例如 D3DX10CreateTextureFromFileD3DX10CompileFromFile,或调用 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 从另一个资源创建纹理资源。

 

要求

要求
标头
D3DX10.h

D3DX10.lib

另请参阅

D3DX 接口