Files
XCEngine/docs/api/XCEngine/RHI/RHITexture/RHITexture.md
2026-03-29 01:36:53 +08:00

3.8 KiB
Raw Blame History

RHITexture

命名空间: XCEngine::RHI

类型: class (abstract)

头文件: XCEngine/RHI/RHITexture.h

描述: 抽象纹理资源接口,负责暴露尺寸、格式、纹理类型、资源状态、调试命名和 native handle。

角色概述

RHITextureRHIResource 的另一类核心具体资源。它既用于普通纹理资源,也用于 render target、depth texture、swapchain back buffer 这类图形输出资源。

和很多成熟引擎类似,当前抽象层把“纹理是什么”与“纹理怎么被绑定/解释”分开处理:

  • RHITexture 代表资源本体
  • RHIResourceView 代表对纹理的不同视图解释

创建方式

RHITexture 通常由 RHIDevice 通过以下重载创建:

创建描述来自 RHITypes 中的 TextureDesc

当前接口能直接告诉你什么

当前已经覆盖到的纹理类型

tests/RHI/unit/test_texture.cpp 已经验证了多个纹理形态:

  • Texture1D
  • Texture2D
  • Texture3D
  • Texture2DArray
  • TextureCube
  • TextureCubeArray

同时也覆盖了:

  • 多 mip 级
  • 多种格式
  • 多采样创建路径

这说明当前 RHITexture 已经不是“只有 2D RGBA8”那种早期占位资源抽象。

状态语义

和 buffer 一样texture 也维护 ResourceStates

  • Common
  • RenderTarget
  • PixelShaderResource
  • CopyDst
  • DepthWrite

测试明确覆盖了多次状态切换,因此这里的状态不是死字段,而是当前引擎真实依赖的资源跟踪信息。它会和 RHICommandList 的 barrier、clear、copy 路径发生关系。

需要注意的接口边界

1. 不是所有创建信息都能从对象接口直接读回

虽然 TextureDesc 里有:

  • arraySize
  • sampleCount
  • sampleQuality
  • flags

RHITexture 公共接口并没有提供这些字段的直接查询方法。当前文档不能假设对象页能完整还原所有创建描述。

2. 初始数据上传发生在设备创建阶段

initialData 的上传路径属于 RHIDevice::CreateTexture() 重载,不属于 RHITexture 对象自身的后续方法。

3. swapchain back buffer 也是 RHITexture*

但通过 RHISwapChain 取回的 back buffer 不是由调用方拥有的独立纹理对象,不能按普通 CreateTexture() 的产物去 delete

测试体现出的真实语义

当前测试已经证明:

  • 创建成功后可以查询宽高深、mip、格式、纹理类型
  • GetState() / SetState() 可多次切换
  • SetName() / GetName() 可用于调试命名
  • GetNativeHandle() 创建成功后通常非空
  • Shutdown() 可重复调用

生命周期

普通 RHITextureRHIDevice 创建并返回裸指针。使用完成后推荐:

  1. Shutdown
  2. delete

唯一需要特别区分的是 swapchain back buffer它由 swapchain 持有,不应由调用方释放。

相关文档