Мой спрайт не появляется в моем окне, не знаю, в чем проблема

Я предоставил свой проект DirectX: http://www.planetchili.net/forum/download/file.php?id=830

Это должно быть что-то простое, но я просто недостаточно хорошо знаю API, чтобы понять, в чем проблема...

Думаю поможет следующее:

class D3DGraphics
{
public:
    D3DGraphics( HWND hWnd );
    ~D3DGraphics();

    void Begin();
    void End();
    void Present();

    LPDIRECT3D9 d3dObject;
    LPDIRECT3DDEVICE9 d3dDevice;
    D3DPRESENT_PARAMETERS presParams;
    HRESULT hr;
};

Я объявляю класс D3DGraphics, который запускает мой объект и устройство:

D3DGraphics::D3DGraphics( HWND hWnd )
    :
    d3dObject( NULL ),
    d3dDevice( NULL )
{
    ZeroMemory( &presParams, sizeof( presParams ) );
    presParams.Windowed=TRUE;
    presParams.SwapEffect=D3DSWAPEFFECT_DISCARD;
    presParams.BackBufferFormat=D3DFMT_UNKNOWN;
    presParams.PresentationInterval=D3DPRESENT_INTERVAL_ONE;

    d3dObject = Direct3DCreate9( D3D_SDK_VERSION );
    hr = d3dObject->CreateDevice(
        D3DADAPTER_DEFAULT,
        D3DDEVTYPE_HAL,
        hWnd, 
        D3DCREATE_HARDWARE_VERTEXPROCESSING, 
        &presParams, 
        &d3dDevice
    );
};

Мой WindowsAPI создает экземпляр созданного мной класса Game, в котором объявлен конструктор:

HWND hWnd = CreateWindow("MyWindowClass", "Pubes", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
Game theGame = Game( hWnd );

MSG msg;
ZeroMemory( &msg, sizeof(msg) );

while( msg.message!=WM_QUIT )
{
   if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
   {
      TranslateMessage( &msg );
      DispatchMessage( &msg );
   }
   else
   {
      theGame.Go();
   }
}

И, наконец, вот мой игровой класс, который портит конструктор, так как не может создать спрайт, упомянутый в первом блоке кода, вот он полностью:

Game::Game( HWND hWnd )
    :
    gfx( hWnd )
{
    sprite = NULL;

    if ( SUCCEEDED( D3DXCreateSprite( gfx.d3dDevice, &sprite ) ) )
    {
          // returns s_OK           
    }   

    pos.x=10.0f;
    pos.y=20.0f;
    pos.z=0.0f;

    gTexture = NULL;

    if ( SUCCEEDED( D3DXCreateTextureFromFile( gfx.d3dDevice, "Images/character001.png", &gTexture ) ) )        
      {
          // returns s_OK           
    }       

gfx.d3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); };

Game::~Game()
{
    sprite->Release();
    gTexture->Release(); 
};

void Game::Go()
{
    gfx.Begin();
    ComposeFrame();
    gfx.Present();
    gfx.End();
};

gfx — это экземпляр D3DGraphics, объявленный в заголовке класса Game.

черт возьми, вы, ребята, понимаете, почему мой спрайт вообще не отображается?

//Дополнительные примечания: я получаю это в своем выводе, это может быть как-то связано с этим??

Моя переменная hWnd, содержащая дескриптор моего окна:

HWND hWnd = CreateWindow("MyWindowClass", "Pubes", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    Game theGame = Game( hWnd );

говорит:

-       hWnd    0x000e0682 {unused=??? }    HWND__ *
        unused  <Unable to read memory> 

person Jimmyt1988    schedule 20.03.2013    source источник
comment
If the function succeeds, the return value is S_OK. If the function fails, the return value can be one of the following: D3DERR_INVALIDCALL, E_OUTOFMEMORY. - Не могли бы вы узнать, что это?   -  person chris    schedule 20.03.2013
comment
Помогут ли эти изображения? Я поставил перерыв в первом операторе SUCCEEDED if, и он пропустил его, и в итоге это появилось в журнале вывода.   -  person Jimmyt1988    schedule 20.03.2013
comment
Вас интересует возвращаемое значение D3DXCreateSprite(). Сравните его с этими двумя константами, чтобы увидеть, что это такое.   -  person chris    schedule 20.03.2013
comment
Извините, как мне это сделать? Я довольно новичок как в DX, так и в С++.   -  person Jimmyt1988    schedule 20.03.2013
comment
Просто сохраните возвращаемое значение в переменной и посмотрите, result == D3DERR_INVALIDCALL или result == E_OUTOFMEMORY.   -  person chris    schedule 20.03.2013
comment
Я устанавливаю SDK на свой ноутбук, чтобы попробовать... Извините за поздний ответ, сегодня утром (Великобритания) полностью заснул и теперь работаю ^_^   -  person Jimmyt1988    schedule 20.03.2013
comment
Он возвращает S_OK :(, так что это не значит, что ошибка... Я понятия не имею, почему мой спрайт не появляется, тогда черт возьми   -  person Jimmyt1988    schedule 20.03.2013


Ответы (1)


gfx.Begin();
ComposeFrame();
gfx.End();
gfx.Present();

Я выступал перед окончанием сцены!!!

ДАААААААААААААААААААААААААААААААААААА

person Jimmyt1988    schedule 20.03.2013