3.8 KiB
RHITexture
命名空间: XCEngine::RHI
类型: class (abstract)
头文件: XCEngine/RHI/RHITexture.h
描述: 抽象纹理资源接口,负责暴露尺寸、格式、纹理类型、资源状态、调试命名和 native handle。
角色概述
RHITexture 是 RHIResource 的另一类核心具体资源。它既用于普通纹理资源,也用于 render target、depth texture、swapchain back buffer 这类图形输出资源。
和很多成熟引擎类似,当前抽象层把“纹理是什么”与“纹理怎么被绑定/解释”分开处理:
RHITexture代表资源本体- RHIResourceView 代表对纹理的不同视图解释
创建方式
RHITexture 通常由 RHIDevice 通过以下重载创建:
- CreateTexture
- CreateTexture 的带初始数据重载
创建描述来自 RHITypes 中的 TextureDesc。
当前接口能直接告诉你什么
- GetWidth
- GetHeight
- GetDepth
- GetMipLevels
- GetFormat
- GetTextureType
- GetState
- SetState
- GetNativeHandle
- GetName
- SetName
- Shutdown
当前已经覆盖到的纹理类型
tests/RHI/unit/test_texture.cpp 已经验证了多个纹理形态:
Texture1DTexture2DTexture3DTexture2DArrayTextureCubeTextureCubeArray
同时也覆盖了:
- 多 mip 级
- 多种格式
- 多采样创建路径
这说明当前 RHITexture 已经不是“只有 2D RGBA8”那种早期占位资源抽象。
状态语义
和 buffer 一样,texture 也维护 ResourceStates:
CommonRenderTargetPixelShaderResourceCopyDstDepthWrite
测试明确覆盖了多次状态切换,因此这里的状态不是死字段,而是当前引擎真实依赖的资源跟踪信息。它会和 RHICommandList 的 barrier、clear、copy 路径发生关系。
需要注意的接口边界
1. 不是所有创建信息都能从对象接口直接读回
虽然 TextureDesc 里有:
arraySizesampleCountsampleQualityflags
但 RHITexture 公共接口并没有提供这些字段的直接查询方法。当前文档不能假设对象页能完整还原所有创建描述。
2. 初始数据上传发生在设备创建阶段
带 initialData 的上传路径属于 RHIDevice::CreateTexture() 重载,不属于 RHITexture 对象自身的后续方法。
3. swapchain back buffer 也是 RHITexture*
但通过 RHISwapChain 取回的 back buffer 不是由调用方拥有的独立纹理对象,不能按普通 CreateTexture() 的产物去 delete。
测试体现出的真实语义
当前测试已经证明:
- 创建成功后可以查询宽高深、mip、格式、纹理类型
GetState()/SetState()可多次切换SetName()/GetName()可用于调试命名GetNativeHandle()创建成功后通常非空Shutdown()可重复调用
生命周期
普通 RHITexture 由 RHIDevice 创建并返回裸指针。使用完成后推荐:
- Shutdown
delete
唯一需要特别区分的是 swapchain back buffer,它由 swapchain 持有,不应由调用方释放。