0

我正在尝试在 directx 中加载纹理以绘制带纹理的四边形。

但 D3DXCreateTextureFromFile 永远不会返回 D3D_OK ....

这是我加载纹理的代码....

FeralTexture(string Name,FeralVector2 Position,IDirect3DDevice9 *device)
    {
        FileName = Name;
        m_pDevice = device;
        x= Position.x;
        y= Position.y;
        if(D3DXCreateTextureFromFile(m_pDevice,FileName.c_str(),&m_pTextureFile) != D3D_OK)
        {
            TextureCreated = false;
            m_pTextureFile = NULL;
            D3DXCreateTextureFromFile(m_pDevice,FileName.c_str(),&m_pTextureFile);
        }
        else
        {
            if(D3DXGetImageInfoFromFile(FileName.c_str(),&ImageInfo) == D3D_OK)
            {
                TextureCreated = true;
                Width = ImageInfo.Width;
                Height = ImageInfo.Height;
                MinVector = FeralVector2(x,y);
                MaxVector = FeralVector2(x+Width,y+Height);
                //BoundingRect = FeralRect2(MinVector,MaxVector);
            }
            else
            {
                Width = 0;
                Height = 0;
            }
        }
    }

我将图像的副本放在项目的调试文件夹和项目的主文件夹中......都不起作用......

任何输入将不胜感激....

4

2 回答 2

1

始终检查错误代码!

这是一个帮助宏,用于将错误代码转换为人类可读的错误消息:

#include <dxerr.h>

#if defined(DEBUG) | defined(_DEBUG)
#ifndef HR
#define HR(x)                                          \
    {                                                  \
        HRESULT hr = x;                                \
        if (FAILED(hr))                                \
        {                                              \
        DXTrace(__FILE__, __LINE__, hr, #x, TRUE);     \
        }                                              \
    }
#endif

#else
#ifndef HR
#define HR(x) x;
#endif
#endif 

和用法:

HR(D3DXCreateTextureFromFile(...))

于 2013-09-04T20:14:17.567 回答
1
  1. 确保纹理文件名正确
  2. 如果步骤 1 不起作用,请尝试在程序中使用纹理文件的绝对路径。

如果这仍然不起作用,请尝试使用 DirectX 调试运行时,从 C:\Program Files\Microsoft DirectX SDK(2010 年 6 月)\Utilities\bin\x86 中打开 DirectX 控制面板(dxcpl.exe)(路径取决于您安装 DirectX SDK 的位置) 并进行如下设置 在此处输入图像描述

然后在调试模式下运行您的应用程序,您将从 Visual Studio 的输出窗口中获得详细的错误消息,它会告诉您问题所在。

D3DXCreateTextureFromFile 支持以下纹理格式

.bmp、.dds、.dib、.hdr、.jpg、.pfm、.png、.ppm 和 .tga

确保您的纹理格式在上面的列表中。

D3DXCreateTextureFromFile 有以下返回码,您可以检查返回值并修复您的应用程序。

  • D3D_OK
  • D3DERR_NOTAVAILABLE
  • D3DERR_OUTOFVIDEOMEMORY
  • D3DERR_INVALIDCALL
  • D3DXERR_INVALIDDATA
  • E_OUTOFMEMORY
于 2013-09-04T14:16:56.493 回答