HRESULT InitialDX(HWND hWnd); // Функция инициализации DIRECTX HRESULT InitialBufferVershin(); void Render(); // Функция рендеринга(отрисовки) void ReleaseDX(); // Функция освобождения устройств.
HRESULT InitialDX(HWND hWnd) { if(NULL==(pDirect3D=Direct3DCreate9(D3D_SDK_VERSIO N))) //создание основного интерфейса return E_FAIL; D3DDISPLAYMODE Display; // структура с настройками монитора if (FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&Display))) // получение настроек монитора. return E_FAIL;
D3DPRESENT_PARAMETERS Direct3DParametr; // Структура с настройками ZeroMemory(&Direct3DParametr,sizeof(Direct3DParametr)); // Обнуление структуры Direct3DParametr.Windowed=TRUE; // Рeжим отображения приложения(true - оконное, false -полноэкранное) Direct3DParametr.SwapEffect=D3DSWAPEFFECT_DISCARD; // Метод переключения буферов Direct3DParametr.BackBufferFormat=Display.Format; // Формат пикселя(колличество разрядов цвета) Direct3DParametr.EnableAutoDepthStencil=TRUE; // Управление буфером глубины Direct3DParametr.AutoDepthStencilFormat=D3DFMT_D16 ; // Формат буфера глубины Direct3DParametr.BackBufferWidth=Display.Width; // Ширина буфера Direct3DParametr.BackBufferHeight=Display.Height; // Высота буфера //Direct3DParametr.FullScreen_RefreshRateInHz=Displa y.RefreshRate; //Частота обновления экрана(только в полноэкранном режиме)
if (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, // используемая видеокарта D3DDEVTYPE_REF, // тип устройства hWnd, // дескриптор родительского окна D3DCREATE_HARDWARE_VERTEXPROCESSING, //режим обработки шейдеров &Direct3DParametr, // структура с настройками &pDirect3DDevice))) // указатель на устройство { MessageBox(hWnd, L"Error", L"Error", MB_OK|MB_ICONEXCLAMATION); return E_FAIL; } return S_OK; }
подскажите, почему данный код компилируется, но окно как только выводится на экран, сразу само закрывается. Я только и успеваю рассмотреть серый фон. Причём если я убираю код инициализации directX, то всё в порядке, окно на экране и ждёт пока я его не закрою. Вот исходник.
HRESULT InitialDX(HWND hWnd); // Функция инициализации DIRECTX void Render(); // Функция рендеринга(отрисовки) void ReleaseDX(); // Функция освобождения устройств.
while(msg.message!=WM_QUIT) // Цикл обработки сообщений { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Render(); //Наш код } } } }
HRESULT InitialDX(HWND hWnd) { if(NULL==(pDirect3D=Direct3DCreate9(D3D_SDK_VERSION))) //создание основного интерфейса return E_FAIL; D3DDISPLAYMODE Display; // структура с настройками монитора if (FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&Display))) // получение настроек монитора. return E_FAIL;
D3DPRESENT_PARAMETERS Direct3DParametr; // Структура с настройками ZeroMemory(&Direct3DParametr,sizeof(Direct3DParametr)); // Обнуление структуры Direct3DParametr.Windowed=TRUE; // Рeжим отображения приложения(true - оконное, false -полноэкранное) Direct3DParametr.SwapEffect=D3DSWAPEFFECT_DISCARD; // Метод переключения буферов Direct3DParametr.BackBufferFormat=Display.Format; // Формат пикселя(колличество разрядов цвета) Direct3DParametr.EnableAutoDepthStencil=TRUE; // Управление буфером глубины Direct3DParametr.AutoDepthStencilFormat=D3DFMT_D16; // Формат буфера глубины Direct3DParametr.BackBufferWidth=Display.Width; // Ширина буфера Direct3DParametr.BackBufferHeight=Display.Height; // Высота буфера // Direct3DParametr.FullScreen_RefreshRateInHz=Display.RefreshRate; //Частота обновления экрана(только в полноэкранном режиме)
if (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, // используемая видеокарта D3DDEVTYPE_HAL, // тип устройства hWnd, // дескриптор родительского окна D3DCREATE_HARDWARE_VERTEXPROCESSING, //режим обработки шейдеров &Direct3DParametr, // структура с настройками &pDirect3DDevice))) // указатель на устройство
return E_FAIL;
return S_OK; }
void Render() { pDirect3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,255),1.0f,0); //Очистка вторичного буфера pDirect3DDevice->BeginScene(); //Начало рендеринга // Код отрисовки сцены pDirect3DDevice->EndScene(); //Конец рендеринга pDirect3DDevice->Present(NULL,NULL,NULL,NULL); // копирование вторичного буфера в первичный }
Добавлено (04.10.2010, 21:49) --------------------------------------------- ещё обнаружил что вот тут f (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, // используемая видеокарта D3DDEVTYPE_HAL, // тип устройства hWnd, // дескриптор родительского окна D3DCREATE_HARDWARE_VERTEXPROCESSING, //режим обработки шейдеров &Direct3DParametr, // структура с настройками &pDirect3DDevice))) // указатель на устройство оно возвращает E_FAIL.