首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Directx11加载织构

Directx11加载织构
EN

Stack Overflow用户
提问于 2018-06-26 22:39:43
回答 1查看 3K关注 0票数 2

D3DXCreateTextureFromFileInMemory和D3DXCreateTextureFromFileEx在d3d11中的替代方案是什么?简单地说,我如何将图像加载到纹理缓冲区(看起来像ID3D10Texture2D数据类型)才能呈现它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-27 16:35:41

这是个很广泛的问题,但希望我能帮你指出正确的方向。

在最高级别,“加载”纹理涉及以下步骤:

  • 将某种形式的图像数据放入内存中(要么从文件加载,要么通过算法生成,等等)。
  • 将图像数据转换为纹理所需的原始形式。这将取决于您所需的格式纹理。例如,大多数颜色(反照率)纹理将采用DXGI_FORMAT_R8G8B8A8_UNORM_SRGB格式。这一步骤可能涉及对源图像文件(例如,如果是JPEG或PNG)进行解压缩,如果格式采用不同的数据类型,则可能需要某种形式的会话等。
  • (可选)为纹理生成mip链。一般来说,拥有一个完整的mip链是一个好主意,因为视觉和性能的原因。
  • 将原始像素数据复制到纹理中。在这个步骤中可以进行格式转换(这实际上取决于实现)。

对于转换部分,有许多库将加载图像文件并将其转换为原始像素数据。Windows成像组件库就是其中之一。还有其他人也存在--谷歌搜索会产生很多结果。

对于MIP一代,你可以自己做,或者一些第三方成像库会帮你做到这一点。D3DX也将生成mips。另一种选择是让D3D通过ID3D11DeviceContext::GenerateMips调用为您生成它们(并不理想,但可以作为停止间隙)。

顶部将原始像素数据复制到纹理中,假设它是静态的(不变的或“不变的”)数据,您应该创建如下纹理:

代码语言:javascript
复制
D3D11_TEXTURE2D_DESC tdesc;

// ...
// Fill out width, height, mip levels, format, etc...
// ...

tdesc.Usage = D3D11_USAGE_IMMUTABLE;
tdesc.BindFlags = D3D11_BIND_SHADER_RESOURCE; // Add D3D11_BIND_RENDER_TARGET if you want to go
// with the auto-generate mips route.
tdesc.CPUAccessFlags = 0;
tdesc.MiscFlags = 0; // or D3D11_RESOURCE_MISC_GENERATE_MIPS for auto-mip gen.

D3D11_SUBRESOURCE_DATA srd; // (or an array of these if you have more than one mip level)
srd.pSysMem = pointer_to_raw_pixel_data; // This data should be in raw pixel format
srd.SysMemPitch = width_of_row_in_bytes; // Sometimes pixel rows may be padded so this might not be as simple as width * pixel_size_in_bytes.
srd.SysMemSlicePitch = 0;

ID3D11Texture2D * texture;
pDevice->CreateTexture2D(&tdesc, &srd, &texture);

这将创建纹理并一次填充像素数据。您还可以使用D3D11_USAGE_DEFAULT使用标志创建纹理,并在创建后使用ID3D11DeviceContext::Map/Unmap调用(如果偶尔更改纹理内容,这是有用的)。

这是对基本知识的粗略概述--网络上有大量的东西,详细介绍了所有这些东西的工作原理和最佳实践等等。我认为我能推荐的最好的事情就是找到一些示例代码并对其进行实验。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51052263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档