Инициалазация OpenGl
Последний, пятый файл - самый главный. Именно он подключает и инициализирует OpenGL. Текст файла opngl.asm:
; #########################################################################
.data
MainHDC dd 0
OpenDC dd 0
PixFrm PIXELFORMATDESCRIPTOR <>
;>>>>>>>>>>>>>>>>>>>>>>>>>
;Место для дополнительных
;данных
;инициализации
;>>>>>>>>>>>>>>>>>>>>>>>>>
.code
DrawScene PROTO
Init PROTO :DWORD
; #########################################################################
DrawScene PROC
invoke glClear,GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT
;>>>>>>>>>>>>>>>>>>>>>>>>>
;Место для последующих вставок
;кода
;>>>>>>>>>>>>>>>>>>>>>>>>>
invoke SwapBuffers,MainHDC
ret
DrawScene ENDP
; #########################################################################
Init proc hWn:DWORD
LOCAL WINRect:RECT
LOCAL PixFormat:DWORD
invoke GetDC,hWn
mov MainHDC,eax
mov ax,SIZEOF PixFrm
mov PixFrm.nSize,ax
mov PixFrm.nVersion,1
mov PixFrm.dwFlags,PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER
mov PixFrm.dwLayerMask,PFD_MAIN_PLANE
mov PixFrm.iPixelType,PFD_TYPE_RGBA
mov PixFrm.cColorBits,8
mov PixFrm.cDepthBits,16
mov PixFrm.cAccumBits,0
mov PixFrm.cStencilBits,0
invoke ChoosePixelFormat,MainHDC,ADDR PixFrm
mov PixFormat,eax
invoke SetPixelFormat,MainHDC,PixFormat,ADDR PixFrm
or eax,eax
jz Fail
invoke wglCreateContext,MainHDC
mov OpenDC,eax
invoke wglMakeCurrent,MainHDC,OpenDC
invoke GetClientRect,hWn,ADDR WINRect
;>>>>>>>>>>>>>>>>>>>>>>>>>
;Место для дополнительных
;функций
;инициализации
;>>>>>>>>>>>>>>>>>>>>>>>>>
invoke MessageBox,hWn,SADD("OpenGl успешно инициализированa"),SADD("Отчет об инициализации"),MB_OK
jmp abort
Fail:
invoke MessageBox,hWn,SADD("OpenGl инициализировать не удалось"),SADD("Отчет об инициализации"),MB_OK
abort:
return 0
Init endp
; #########################################################################
В секции данных определяются три идентификатора – окна программы, связки с OpenGL и формата экранных пикселей. Затем – прототипы функций DrawScene – именно она отвечает за события на экране и Init, которая инициализирует OpenGL. Функция Init вызывается при создании окна, в случае успешной инициализации OpenGL выдается сообщение и после нажатия ОК можно посмотреть на результат работы программы. Копируем файлы в папку с проектом (сначала – в блокнот, потом – сохранить как…), их должно быть пять: opengl.asm, opengl.inc, rsrc.rc, mainicon.ico и opngl.asm. Редактором Qeditor из MASM32 открываем файл opengl.asm и командой BuildAll в меню Project компилируем весь проект. В случае успеха появится окно, похожее на это:
Находим в папке с проектом исполняемый файл .ехе – он обозначен иконкой (не путать с самой картинкой иконки, у нее расширение .ico) и запускаем. В случае успешной инициализации появится что-то вроде:
Жмем на ОК и любуемся первой программой. Выглядит она приблизительно так: