我正在尝试编写一些代码来从名为“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 循环上方的所有内容替换为硬编码文件名,它就会起作用:
常量 LPCSTR 纹理[3] = {"tex1.dds", "tex2.dds", "tex3.dds"};