2013-09-04 5 views
0

Im Попытка загрузить текстуры в directx, чтобы нарисовать текстурированный квадрат.Загрузка текстур в 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; 
      } 
     } 
    } 

я размещены копии изображения в обоих отладки папки моего проект и в основной папке моего проекта ... ни работы ....

Любой вход будет очень цениться ....

+0

предложения: если вы работаете с IDE, то рабочий каталог может быть отличается от выходного каталога. Какая быстрая загрузка кода возврата? – user1837009

+0

Что такое возвращаемое значение из 'D3DXCreateTextureFromFile'. Вы должны получить его в переменной для дальнейшего отладки: 'HRESULT result = D3DXCreateTextureFromFile (...); ' Вы можете увидеть, какое значение ошибки вы получите как возвращаемое значение и оттуда оттуда. –

ответ

1
  1. Убедитесь, что имя файла текстуры правильно
  2. Попробуйте использовать абсолютный путь файла текстуры в вашей программе, если шаг 1 не работает.

Если это все еще не работает, попробуйте с помощью DirectX отладки во время выполнения, Open DirectX панель управления (dxcpl.exe) из C: \ Program Files \ Microsoft DirectX SDK (июнь 2010) \ Utilities \ Bin \ x86 (путь зависит на котором устанавливается DirectX SDK) и выполнить настройки, как показано ниже enter image description here

затем запустить приложение в режиме отладки, вы получите сообщение детали ошибки из выходного окна 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
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(...))