Loading Textures in Directx

给你一囗甜甜゛ 提交于 2020-01-14 06:10:33

问题


Im Trying to load textures in directx to draw a textured quad.

but the D3DXCreateTextureFromFile never returns D3D_OK ....

here is my code to load the texture....

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;
            }
        }
    }

i placed copies of the image in both the debug folder of my project and in the main folder of my project... neither works....

Any input will be greatly appreciated ....


回答1:


  1. Make sure the texture file name is correct
  2. Try using absolute path of the texture file in your program if step 1 does not work.

If that's still not work try using DirectX debug runtime, Open DirectX control panel(dxcpl.exe) from C:\Program Files\Microsoft DirectX SDK (June 2010)\Utilities\bin\x86(the path depends on where you install DirectX SDK) and make the settings as below

then running your app in debug mode, you will get the detail error message from the output window of Visual studio, it will tell you what's the problem.

D3DXCreateTextureFromFile support the following texture format

.bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga

make sure your texture format in the list above.

D3DXCreateTextureFromFile has the following return codes, you can check the return value and fix your app.

  • D3D_OK
  • D3DERR_NOTAVAILABLE
  • D3DERR_OUTOFVIDEOMEMORY
  • D3DERR_INVALIDCALL
  • D3DXERR_INVALIDDATA
  • E_OUTOFMEMORY



回答2:


Always check error codes!

Here is a helper macro to transform error codes to human-readable error message:

#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 

And usage:

HR(D3DXCreateTextureFromFile(...))



来源:https://stackoverflow.com/questions/18613229/loading-textures-in-directx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!