Я предоставил свой проект 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>
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.2013D3DXCreateSprite()
. Сравните его с этими двумя константами, чтобы увидеть, что это такое. - person chris   schedule 20.03.2013result == D3DERR_INVALIDCALL
илиresult == E_OUTOFMEMORY
. - person chris   schedule 20.03.2013