OBS-Direct11数据结构
+ -

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,
};

0 篇笔记 写笔记

11.纹理
本文实现从文件加载纹理并将其映射到几何图形!源码下载地址:https://www.braynzarsoft.net/file/11DX11_Lesson_11_Textures_zip.zip介绍在这里,我们将学习如何将纹理映射到我们的对象。在 Direct3D 中,我们使用 2D (u,v......
2.2.2纹理资源
正如我们在最后几节中所看到的,有无数不同的缓冲区资源,以及为各种用途配置它们的许多不同方法。然而,缓冲区只是资源故事的一半。纹理为基于GPU作为渲染处理器的资源提供了不同的概念。“纹理”一词指的是一种在性质上与图像或类似图像的内存资源。这是一个非常松散的定义,因为有一系列不同的纹理类型,具有不同的维......
2D纹理
我们将探索的第二种纹理类型是2D纹理。由于这种纹理类型与标准2D图像布局密切相关,因此它通常是使用最广泛的纹理类型之一。此资源被组织为二维元素网格,其中每个元素都是DXGI_FORMAT枚举的成员。2D纹理的各种子资源形式如图2.31所示。如图2.31所示,这些纹理以与ID纹理类似的方式支持mip贴......
gs_texture纹理
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_texture_2d
按照上节,gs_texture_2d有两种类型的纹理,分别为2D和2D-CUBE纹理类型。其从数据组织上来讲,一个是一拖一,一个是一拖6。struct gs_texture_2d : gs_texture { ComPtr texture; ......
gs_texture_2d成员函数
2d纹理可创建的类型是多样的。有是2d的,也有的是2d-cube的。有的是需要绑定的是渲染目标视图,有的是渲染着色器资源视图。其它的一些配置参数多样。 InitTexture(data);//根据纹理数据创建纹理 InitResourceView();//创建着色器资源视图 ......
6.4.2 HLSL纹理缓冲区
由于常量缓冲区针对小尺寸和统一的访问模式进行了优化,因此在某些情况下,它们可能具有未知期望的性能特性。一种常见的情况是用于蒙皮的骨骼矩阵阵列。在这种情况下,每个顶点都包含一个或多个索引,指示阵列中的哪个骨骼应用于变换位置和法线。在许多硬件类型上,这种访问模式将导致执行着色器程序的线程序列化对骨骼数据......
利用d3d11将两个rgb数据格式的纹理图像合并到一个新的2D纹理
要利用D3D11将两个RGB数据格式的纹理图像合并到一个新的2D纹理中,你可以按照以下步骤进行操作:首先,创建两个源纹理和一个目标纹理。可以使用D3D11_TEXTURE2D_DESC结构来指定纹理的参数,例如宽度、高度、格式等。对于RGB数据格式,常见的格式包括DXGI_FORMAT_R8G8......
作者信息
站长漫谈
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!