gpt4 book ai didi

directx-11 - 为什么 D3DX11CreateShaderResourceViewFromMemory 只上传我的纹理的部分副本?

转载 作者:行者123 更新时间:2023-12-04 06:32:51 25 4
gpt4 key购买 nike

我的 D3DX11CreateShaderResourceViewFromMemory 辅助函数有问题。

我从文件或 ZIP 中读取了一些纹理并将原始字节和长度传递给辅助函数,但是只有部分纹理被上传(如 PIX 所确认)。
我尝试手动摆弄长度,但无济于事。
这是从文件加载纹理的代码:

struct FileDataLoader
{
void Load()
{
std::ifstream file(mFileName);

if (file)
{
file.seekg(0,std::ios::end);
std::streampos length = file.tellg();
file.seekg(0,std::ios::beg);

mBuffer.resize(length);
file.read(&mBuffer[0],length);
file.close();
}
}

void Decompress(void*& data, std::size_t& numBytes)
{
data = &mBuffer[0];
numBytes = mBuffer.size();
}

std::wstring mFileName;
std::vector<char> mBuffer;
};

FileDataLoader fdl;
fdl.mFileName = L"Content\\Textures\\Smoke.dds";
fdl.Load();
void* bytes;
std::size_t size;
fdl.Decompress(bytes, size);
DXCall(D3DX11CreateShaderResourceViewFromMemory(device, bytes, size, NULL, NULL, &particleTexture, NULL));

这只是我用来调试此问题的示例代码,我将其范围缩小到文件加载和 D3DX 辅助函数。
现在,如果我这样做:
DXCall(D3DX11CreateShaderResourceViewFromFileW(device, L"Content\\Textures\\Smoke.dds", NULL, NULL, &particleTexture, NULL));

它工作得很好。

关于为什么不完全上传纹理的任何想法?

最佳答案

打开文件时,需要指定文件是二进制的:

std::ifstream file( fileName, std::ios::in | std::ios::binary );

没有 std::ios::binary标记您默认以纯文本形式阅读,这不是 D3DX11CreateShaderResourceViewFromMemory 所期望的。

关于directx-11 - 为什么 D3DX11CreateShaderResourceViewFromMemory 只上传我的纹理的部分副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5179016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com