c++ - 在 Directx 中加载纹理

标签 c++ directx textures directx-9

我正在尝试在 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;
            }
        }
    }

我将图像的拷贝放在项目的调试文件夹和项目的主文件夹中... 两者都不起作用....

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

最佳答案

  1. 确保纹理文件名正确
  2. 如果第 1 步不起作用,请尝试在您的程序中使用纹理文件的绝对路径。

如果仍然无效,请尝试使用 DirectX 调试运行时,从 C:\Program Files\Microsoft DirectX SDK(2010 年 6 月)\Utilities\bin\x86(路径取决于您所在的位置)打开 DirectX 控制面板 (dxcpl.exe)安装 DirectX SDK)并进行如下设置 enter image description here

然后在 Debug模式下运行您的应用程序,您将从 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

关于c++ - 在 Directx 中加载纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18613229/

相关文章:

java - libgdx/安卓 : graphics disappearing after the app is destroyed/paused

opengl - 解析多重采样阵列纹理

c++ - 从自身内部替换 std::function(通过 move 赋值到 *this?)

c++ - 当有复制构造函数时,是否总是需要赋值运算符?

c++ - 如何实现平滑的切线空间法线?

c++ - 我得到相互矛盾的答案,我应该如何处理我的代码?

C++ #define 获取一个字符串

c++ - ld.exe : DWARF error: could not find variable specification at offset 101cee

c++ - Directx 9 地形碰撞

c++ - 关于direct3d关于D3DXCreateTextureFromFileEx的方法