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));
それは完全にうまく機能します。
テクスチャを完全にアップロードしない理由について何か考えはありますか?