Directx 11 为什么D3DX11CreateShaderResourceViewFromMemory只上载我的纹理的部分副本?

Directx 11 为什么D3DX11CreateShaderResourceViewFromMemory只上载我的纹理的部分副本?,directx-11,Directx 11,D3DX11CreateShaderResourceViewFromMemory辅助函数有问题 我从文件或ZIP中读取一些纹理,并将原始字节和长度传递给helper函数,但是只上载了部分纹理(经PIX确认)。 我试着用手摆弄长度,但没用。 以下是从文件加载纹理的代码: struct FileDataLoader { void Load() { std::ifstream file(mFileName); if (file) {

D3DX11CreateShaderResourceViewFromMemory辅助函数有问题

我从文件或ZIP中读取一些纹理,并将原始字节和长度传递给helper函数,但是只上载了部分纹理(经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));
它工作得非常好


知道为什么它不能完全上传纹理吗?

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

std::ifstream file( fileName, std::ios::in | std::ios::binary );
如果没有默认情况下以纯文本形式读取的
std::ios::binary
标志,这不是D3DX11CreateShaderResourceViewFromMemory所期望的。

Hmmm这是一个老问题,我已经移动到另一个库来加载纹理,但您确实有一个非常有效的点,这可能是我的问题。(很难用疲惫的眼睛来锁定点呵呵)所以我会接受你的回答,谢谢你!
std::ifstream file( fileName, std::ios::in | std::ios::binary );