无法从文件创建着色器资源视图

时间:2015-02-08 23:02:30

标签: c++ directx shader directx-11 resource-management

我试图编写一些代码来从名为" TextureList.txt"的配置文件中读取文件名列表。然后使用这些文件为每个纹理创建着色器资源视图。下面的列表显示了我目前拥有的内容:

LPCSTR textures[MAX_TEXTURES];

std::ifstream texturesToLoad;

texturesToLoad.open("TextureList.txt");

int numberOfTextures = 0;

while(!texturesToLoad.eof())
{
    std::string textureName;
    std::getline(texturesToLoad, textureName);

    textures[numberOfTextures] = textureName.c_str();

    numberOfTextures++;

    char debugMsg[100];
    sprintf(debugMsg, "numberOfTextures = %d\n", numberOfTextures);
    OutputDebugString(debugMsg);
    OutputDebugString(textureName.c_str());
    OutputDebugString("\n");
}

for(int i = 0; i < numberOfTextures; i++)
{       
    d3dResult = D3DX11CreateShaderResourceViewFromFile( d3dDevice_,
    textures[i], 0, 0, &colorMap_[i], 0 );

    if( FAILED( d3dResult ) )
    {
        DXTRACE_MSG( "Failed to load the texture image!" );
        return false;
    }
}

while循环底部的调试显示文件正在被正确读取,它获取所有文件名并计算正确的纹理数量;但是当它尝试创建第一个资源视图时失败。

谁能告诉我哪里出错?

我不知道它是否有帮助,但如果我使用以下行用硬编码文件名替换for循环上方的所有内容,它就会起作用:

const LPCSTR textures [3] = {&#34; tex1.dds&#34;,&#34; tex2.dds&#34;,&#34; tex3.dds&#34;};

0 个答案:

没有答案