169, Nikita raquo ;, 0
; WNDCLASSEX - ------------------------------------------- dd 12 * 4dd CS_HREDRAW + CS_VREDRAW + 20hdd OFFSET WndProcdd 0dd 0dd 400000hdd 0dd 0dd BLACK_PENdd 0dd OFFSET szClassName
hIconSm dd 0
; Повідомлення про помилки - --------------------------------- D9 db Не вдалося згенерувати обьект Direct3D9 , 9, 9,0DDevice9 db Не вдається створити пристрій Direct3D9 , 9,0
. DATA?; ::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::: MSG lt; gt; HWND? RECT lt; gt;
. CONST; :::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::: _ X EQU 640; Розмір вікна по горізонталі_Y EQU 480; Розмір вікна по вертикалі
. CODE; :::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::: GetModuleHandle, NULLhInstance, eaxLoadCursor, NULL, IDC_ARROWhCursor, eaxRegisterClassEx, ADDR cbSizeGetSystemMetrics, SM_CXSCREENeaxGetSystemMetrics, SM_CYSCREENeax, WIN_Yeax, 1
pop ebxebx, WIN_X
shr ebx, 1CreateWindowEx, NULL, ADDR szClassName, ADDR szAppName, _ SYSMENU or WS_VISIBLE, , eax, WIN_X, WIN_Y, NULL, NULL, hInstance, NULLhwnd, eaxGetClientRect, eax, ADDR clientwindow
invoke Init_Direct3D; Створюємо устройство_loop:
invoke PeekMessageA, ADDR msg, 0, 0, 0, PM_REMOVE;
test eax, eax; message; Якщо біля вікна немає повідомлень.
;
invoke Render_Scene ;. то отрісовивается сцена
jmp msg_loop;
;:; eax, DWORD PTR msg. message;
cmp eax, WM_QUIT; end_loop;
; TranslateMessage, ADDR msg; DispatchMessage, ADDR msg;
jmp msg_loop_loop:
mov eax, msg. wParam; Якщо цикл обробки повідомлень перерваний,
; то код виходу з програми передається в поле wParam :; повідомлення MSG.
invoke ExitProcess, eax
ret
; ================================================== ===
WndProc proc hWnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM
; ================================================== === uMsg, WM_CREATE; Це повідомлення надсилається вікна, коли воно создаетсяwmCreateuMsg, WM_DESTROY; Це повідомлення надсилається вікна, коли воно має бути унічтожено.wmDestroyuMsg, WM_KEYDOWN; Це повідомлення надсилається вікна, коли натиснули клавішу на клавіатуре.wmKeydownDefWindowProc, hWnd, uMsg, wParam, lParam; Якщо ми не хочемо обробляти отримане повідомлення, то; нам треба викликати DefWindowProc з параметрами, які Ми отримали.
; Ця функція API обробляє цікавлять Нас події.
wmDestroy :;- ----------------------------------------- Destroy_Direct3DPostQuitMessage, NULLeax, eax :;- ----------------------------------------- Eax, eax :;- ----------------------------------------- Eax, wParameax, VK_ESCAPEnoExitSendMessage, hwnd, WM_CLOSE, NULL, NULL: eax, eaxendp
; ================================================== ===
; Починається робота з Direct3D
; ================================================== === _ Direct3D proc; Створювати Direct3DDevice в повідомленні WM_Create можна!
. DATA
; D3DPRESENT_PARAMETERS - ----------------------------------------- dd 640; Ширина BackBufferdd 480; Висота BackBufferdd D3DFMT_X8R8G8B8; Формат використовуваної поверхностіdd 3; число Back буферов.dd 0; рівні мультісемплінг картинки. (зазвичай від 2-ух і вище)
MultiSampleQuality dd 0;
SwapEffect dd D3DSWAPEFFECT_FLIP; Ефект обміну поверхонь (BackBuffer)
hDeviceWindow dd 0; ID нашого віконця
Windowed dd 1; 0 - повноекранний, 1 - у віконці
EnableAutoDepthStencil dd TRUE; 1 - Direct3D створює Z + Stencil буфер. Якщо 0 - нічого не буде созданоdd D3DFMT_D24S8; Формат використовуваної поверхні
Flags dd 1; 0 або D3DPRESENTFLAG_LOCKABLE_BACKBUFFER=1
FullScreen_RefreshRateInHz dd 0; Частота оновлення екрану в Hz
FullScreen_PresentationInterval dd 1; Інтервал показу на екрані backbufferа.1=Чекати зворотного ходу променя
. DATA? D dd ?; або LPDIRECT3D9 (покажчик на Direct3D9)
pd3dDevice dd ?; або LPDIRECT3DDEVICE9 (покажчик на Direct3DDevice)
. CODEDirect3DCreate9, D3D_SDK_VERSIONpd3d, eaxea...