Помогите пожайлусто!!!!!Изучаю книгу "Френк Д. Луна - Программирование трехмерных игр с DirectX 9" Ну у меня проблемма вот код представленный в книги для "инициализацию Direct3D-приложения и очистки экрана, заполнив его черным цветом "
d3dUtility.h
| Код | // Включение основного заголовочного файла Direct3DX. В нем осуществляется // включение других, необходимых нам заголовочных файлов Direct3D. #include <d3dx9.h>
namespace d3d { bool InitD3D( HINSTANCE hInstance, // [in] Экземпляр приложения. int width,int height, // [in] Размеры вторичного буфера. bool windowed, // [in] Оконный (true) или // полноэкранный (false) режим. D3DDEVTYPE deviceType,// [in] HAL или REF IDirect3DDevice9** device);// [out] Созданное устройство. int EnterMsgLoop( bool (*ptr_display)(float timeDelta));
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
template<class T> void Release(T t) { if(t) { t->Release(); t = 0; } }
template<class T> void Delete(T t) { if(t) { delete t; t = 0; } } } int d3d::EnterMsgLoop(bool(*ptr_display)(float timeDelta)) { MSG msg; ::ZeroMemory(&msg, sizeof(MSG));
static float lastTime = (float)timeGetTime(); while(msg.message != WM_QUIT) { if(::PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } else { float currTime = (float)timeGetTime(); float timeDelta = (currTime - lastTime) * 0.001f; ptr_display(timeDelta); // вызов функции визуализации lastTime = currTime; } } return msg.wParam; }
|
d3dUtility.cpp
| Код | #include "d3dUtility.h"
IDirect3DDevice9* Device = 0;
bool Setup() { return true; } void Cleanup() {
}
bool Display(float timeDelta) { if(Device) { Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0); Device->Present(0, 0, 0, 0); // показ вторичного буфера } return true; } HRESULT IDirect3DDevice9::Clear( DWORD Count, const D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil );
LRESULT CALLBACK d3d::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch( msg ) { case WM_DESTROY: ::PostQuitMessage(0); break;
case WM_KEYDOWN: if( wParam == VK_ESCAPE ) ::DestroyWindow(hwnd); break; } return ::DefWindowProc(hwnd, msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE prevInstance, LPSTR cmdLine, int showCmd) { if(!d3d::InitD3D(hinstance, 800, 600, true, D3DDEVTYPE_HAL, &Device)) { ::MessageBox(0, L"InitD3D() - FAILED", 0, 0); return 0; }
if(!Setup()) { ::MessageBox(0, L"Setup() - FAILED", 0, 0); return 0; }
d3d::EnterMsgLoop( Display );
Cleanup();
Device->Release();
return 0; }
|
Выдает ошибку:"HRESULT IDirect3DDevice9::Clear(DWORD,const D3DRECT *,DWORD,D3DCOLOR,float,DWORD): повторное объявление функции не разрешается" |