Суровая правда жизни о Direct3D

Спецвыпуск Хакер, номер #004, стр. 004-098-10

Удалим-с все DirectDraw, Direct3D и т.д. return lpDD->Release() (происки COM) в специально созданной для этого функции Release. Тривиально, но теперь будем обрабатывать мессаги и создавать окна и начинать и завершать работу нашей проги. Мессаги обрабатываются функцией WndProc. Но мы же люди ленивые, пусть все обрабатывается по умолчанию функцией DefWindowProc. Так туда и запишем: return DefWindowProc(hWnd, uMsg, wParam, lParam);. Вот. И самое главное: функция WinMain. Именно с нее начинается выполнение проги. Создадим и зарегистрируем WNDCLASS, как я это покажу в листинге. Таким же образом создадим окно. После всего этого проверим на глючность инициализацию D3D. if(FAILED(InitializeD3D())) return 1;. Вот, а затем пошли шпарить в цикле рендрить - получать мессаги - рендрить - получать мессаги - рендрить - получать мессаги... И так 500 раз. Да-да-да-да... Чуть не забыл (старческий склероз, мать его), надо же курсор удалить, а то он мешает. SetCursor(NULL); перед циклом. После 500-кратного прохода цикла зарелизим (Release) и return 0;.

Листинг №10 - Main.cpp, мессаги, окна и релиз

в HRESULT Release()

{

//Деинициализируем все

return lpDD->Release();

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

return DefWindowProc(hWnd, uMsg, wParam, lParam);

}

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShowCmd)

{

WNDCLASS wndClass = { 0, WndProc, 0, 0, hInst, //WndProc - процедура обработки сообщений

NULL,

LoadCursor(hInst, IDC_ARROW),

(HBRUSH)GetStockObject(WHITE_BRUSH), NULL, _T("Render Window")};

// таким образом мы создали некий wndclass, описывающий наше приложение

// Все про этот класс нам знать не надо. Поэтому я и не дал конкретного объяснения

RegisterClass(&wndClass); //Зарегистрируем наш класс

hWnd = CreateWindow(_T("Render Window"), // Создадим окно

_T("XAKEP3D"), // Заголовок окна

WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, // Некие стили окна

CW_USEDEFAULT, 1280, 1024, 0L, 0L, hInst, 0L); //Цифры - размеры окна

ShowWindow(hWnd, SW_SHOWNORMAL); //Нарисуем нашу паршивость

UpdateWindow(hWnd); //Обновим ее же

if(FAILED(InitializeD3D())) return 1;

MSG msg;

int i = 0;

SetCursor(NULL);

while(i < 500) //Если не было 500 кадров, то

{

PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);//Берем мессагу

if(FAILED(Render())) return 1;//Рисуем

i++; //Прибавляем 1 кадр

}

Release(); //Деинициализируем все

return 0; //Выходим

}

Конец листинга 10.

Пытка №6 - а что это будет, если мы обрежем ту странную веревку под потолком (см пытку №1)

Ты думаешь, я, ламер паршивый, не мог сделать нормального выхода через ескейп или еще какую-нибудь шнягу. Я вот что скажу, это ты сделаешь сам - маленькое домашнее задание, а то я за тебя и так основную массу фекалек схавал. А пока ты нажми F5. И любуйся зрелищем. Вот. Нда... Ну, вроде и все... Будем надеяться, это так. Счастливо тебе, перец! & Happy rendering 4u.!!

Назад на стр. 004-098-9  Содержание  Вперед на стр. 004-098-11

загрузка...
Cпец Хакер #075Cпец Хакер #074Cпец Хакер #073Cпец Хакер #072Cпец Хакер #071Cпец Хакер #070Cпец Хакер #069Cпец Хакер #068Cпец Хакер #067Cпец Хакер #066Cпец Хакер #065Cпец Хакер #064Cпец Хакер #063Cпец Хакер #062Cпец Хакер #061Cпец Хакер #060Cпец Хакер #059Cпец Хакер #058Cпец Хакер #057Cпец Хакер #056Cпец Хакер #055Cпец Хакер #054Cпец Хакер #053Cпец Хакер #052Cпец Хакер #051Cпец Хакер #050Cпец Хакер #049Cпец Хакер #048Cпец Хакер #047Cпец Хакер #046Cпец Хакер #045Cпец Хакер #044Cпец Хакер #043Cпец Хакер #042Cпец Хакер #041Cпец Хакер #040Cпец Хакер #039Cпец Хакер #038Cпец Хакер #037Cпец Хакер #036Cпец Хакер #035Cпец Хакер #034Cпец Хакер #033Cпец Хакер #032Cпец Хакер #031Cпец Хакер #030Cпец Хакер #029Cпец Хакер #028Cпец Хакер #027Cпец Хакер #026Cпец Хакер #025Cпец Хакер #024Cпец Хакер #023Cпец Хакер #022Cпец Хакер #021Cпец Хакер #020Cпец Хакер #019Cпец Хакер #018Cпец Хакер #017Cпец Хакер #016Cпец Хакер #015Cпец Хакер #014Cпец Хакер #013Cпец Хакер #012Cпец Хакер #011Cпец Хакер #010Cпец Хакер #009Cпец Хакер #008Cпец Хакер #007Cпец Хакер #006Cпец Хакер #005Cпец Хакер #004Cпец Хакер #003Cпец Хакер #002Cпец Хакер #001