gs_texture纹理
2024-06-19
9
0
gs_texture结构体是gs_texture_2d和gs_texture_3d的基类。
struct gs_texture : gs_obj {
gs_texture_type type; //纹理类型:2d,2d(cube),3d
uint32_t levels; //纹理级别
gs_color_format format;//纹理颜色数据组织方式
ComPtr<ID3D11ShaderResourceView> shaderRes; //着色器资源视图
ComPtr<ID3D11ShaderResourceView> shaderResLinear;
D3D11_SHADER_RESOURCE_VIEW_DESC viewDesc{}; //着色器资源视图描述符
D3D11_SHADER_RESOURCE_VIEW_DESC viewDescLinear{};
void Rebuild(ID3D11Device *dev);//这个函数并未实现,更多应像是一个纯虚函数。
inline gs_texture(gs_texture_type type, uint32_t levels,
gs_color_format format)
: type(type),
levels(levels),
format(format)
{
}
inline gs_texture(gs_device *device, gs_type obj_type,
gs_texture_type type)
: gs_obj(device, obj_type),
type(type)
{
}
inline gs_texture(gs_device *device, gs_type obj_type,
gs_texture_type type, uint32_t levels,
gs_color_format format)
: gs_obj(device, obj_type),
type(type),
levels(levels),
format(format)
{
}
};
其提供了3种构造函数。
gs_texture_type
gs_texture_type表示了纹理的类型。有三种类型:
enum gs_texture_type {
GS_TEXTURE_2D,//2d纹理
GS_TEXTURE_3D,//3D纹理
GS_TEXTURE_CUBE,//一种特殊的2D纹理,该2D纹理可以用于同时生成立方体映射的所有六个面纹理,这表示该纹理是一个数组。后面我们在看2D纹理的BackupTexture可知。
};
levels
这是纹理的级别。用于不同分辨率下使用不同分辨率的纹理。纹理的最大级数由CheckMultisampleQualityLevels决定。
UINT NumQuality;
//获取多重采样期间可用的质量级别数。
HRESULT hr = m_pDevice->CheckMultisampleQualityLevels(DXGI_F0RMAT_R8G8B8A8_UNORM, 4, &NumQuality );
如使用CheckMultisampleQualityLevels检测支持该格式类型支持的最大质量量级别数。
纹理一般来源于图片,最终都会转换成format指定的格式,一般为RGB的居多。
format
纹理颜色类型。一般为GS_RGBA、GS_BGRX、GS_BGRA
enum gs_color_format {
GS_UNKNOWN,
GS_A8,
GS_R8,
GS_RGBA,
GS_BGRX,
GS_BGRA,
GS_R10G10B10A2,
GS_RGBA16,
GS_R16,
GS_RGBA16F,
GS_RGBA32F,
GS_RG16F,
GS_RG32F,
GS_R16F,
GS_R32F,
GS_DXT1,
GS_DXT3,
GS_DXT5,
GS_R8G8,
GS_RGBA_UNORM,
GS_BGRX_UNORM,
GS_BGRA_UNORM,
GS_RG16,
};