Самоизоляция и OpenGL

Тема в разделе "WASM.OpenGL", создана пользователем Mikl___, 26 апр 2020.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Пока сижу дома решил переложить OpenGL-примеры, на masm64
    Пример из стандартной поставки FASM, в аттаче Opengl32.inc, Glu32.inc, Glut32.inc, исходный файл и ехе
    00.png
     

    Вложения:

    • 00.zip
      Размер файла:
      11,5 КБ
      Просмотров:
      416
    Sashasan, Aiks, Thetrik и ещё 1-му нравится это.
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Текст asm-заготовки для работы с OpenGl
    01.png
    Код (ASM):
    1. ; GUI #
    2. include win64a.inc
    3. ; ---------------
    4. WINDOWWIDTH  = 440
    5. WINDOWHEIGHT = 400
    6. .code
    7. WinMain proc
    8. local msg:MSG
    9. xor ebx,ebx
    10.         mov edi,offset szClassName
    11.         mov esi,IMAGE_BASE
    12.         mov ecx,offset FileName
    13. invoke LoadCursorFromFile
    14.         push rax ;hIconSm
    15. push rdi ;lpszClassName
    16. push rbx ;lpszMenuName
    17. push COLOR_WINDOWTEXT+1;hbrBackground
    18. push rax ;hCursor
    19. push rax        ;hIcon
    20. push rsi ;hInstance
    21. push rbx        ;cbClsExtra & cbWndExtra
    22. pushaddr WndProc;lpfnWndProc
    23. push sizeof WNDCLASSEX       ;cbSize & style
    24.     invoke RegisterClassEx,esp ;addr WNDCLASSEX
    25. push rbx
    26. push rsi ;rsi = 400000h
    27. shl esi,9 ;rsi = CW_USEDEFAULT
    28. push rbx
    29. push rbx
    30. push WINDOWHEIGHT
    31. push WINDOWWIDTH
    32. push rsi
    33. push rsi
    34. sub esp,20h
    35.     invoke CreateWindowEx,0,edi,edi,WS_OVERLAPPEDWINDOW or WS_CLIPCHILDREN or WS_CLIPSIBLINGS or WS_VISIBLE
    36. ;цикл сообщений
    37.     lea edi,msg
    38. @@: invoke GetMessage,edi,0,0,0
    39. cmp msg.wParam,VK_ESCAPE;user press 'Esc'?
    40. je wmDESTROY
    41. invoke DispatchMessage,edi
    42. jmp @b
    43. WinMain endp
    44. WndProc proc hWin:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
    45.         mov hWin,rcx
    46.         cmp edx,WM_CREATE
    47. je      wmCREATE
    48.         cmp edx,WM_SIZE
    49. je      wmSIZE
    50.         cmp edx,WM_PAINT
    51. je      wmPAINT
    52.         cmp edx,WM_DESTROY
    53. je      wmDESTROY  
    54. default:leave
    55. jmp NtdllDefWindowProc_
    56. wmDESTROY::invoke wglMakeCurrent,0,0
    57. invoke wglDeleteContext,hrc
    58. invoke ReleaseDC,hWin,hDC
    59. invoke RtlExitUserProcess,NULL
    60. wmCREATE:invoke GetDC ;получим контекст окна
    61. mov hDC,rax
    62. ;инициализируем дескриптор формата пикселей OpenGL (поддержку OpenGL и двойной
    63. ;буферизации) выберем его
    64.         mov edx,offset PixFrm
    65. invoke ChoosePixelFormat,eax
    66. ;и установим его
    67. mov r8d,offset PixFrm
    68. invoke SetPixelFormat,hDC,eax
    69. ;преобразуем контекст окна в контекст OpenGL
    70. invoke wglCreateContext,hDC
    71. mov hrc,rax
    72. ;и сделаем его текущим
    73. invoke wglMakeCurrent,hDC,eax
    74. ;выберем режим вычисления перспективных преобразований (наилучший)
    75. invoke glHint,GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST;
    76. ;выберем для преобразований матрицу перспективной проекции
    77. invoke glMatrixMode,GL_PROJECTION;выбирает активную матрицу из списка (стека)
    78. ;умножим ее на матрицу перспективы, т.е. попросту включим ее (используем макрос glcall т.к. параметры передаются в виде 8 байтов)
    79. movq xmm0,constd90_0
    80. movq xmm1,ratio
    81. movq xmm2,constd0_1
    82. movq xmm3,constd100_0
    83. invoke gluPerspective
    84. ;выберем для преобразований матрицу изображения
    85. invoke glMatrixMode,GL_MODELVIEW;выбирает активную матрицу из списка (стека)
    86.         jmp wmBYE
    87. wmSIZE:; --------------- Resize the scene
    88. movzx r8,r9w
    89. shr r9,16
    90. invoke glViewport,0,0;Изменение области вывода изображения в окно
    91.         jmp wmBYE
    92. wmPAINT:; No pending messages: draw the scene
    93. ; --------------- Display the scene
    94. ;очистим буфер экрана
    95. invoke glClear,GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT
    96. ;обнулим текущую матрицу (матрицу изображения)
    97. invoke glLoadIdentity
    98. ;отодвинем объекты в глубь экрана (z=-5 и влево х=-1,5)
    99. movd xmm0,const_1_5;ebx
    100. movd xmm1,ebx
    101. movd xmm2,const_5_0
    102. invoke glTranslatef
    103.         invoke  glFlush
    104. ;отобразим буфер на экран
    105.         invoke SwapBuffers,hDC
    106. wmBYE: leave
    107. retn
    108. WndProc endp
    109. hDC dq ?
    110. hrc dq ?
    111. PixFrm label PIXELFORMATDESCRIPTOR
    112. PixFrm label PIXELFORMATDESCRIPTOR
    113.   nSize             dw sizeof PIXELFORMATDESCRIPTOR;размер структуры данных
    114.   nVersion          dw 1;версия структуры данных
    115.   dwFlags           dd PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER or \
    116. PFD_DRAW_TO_WINDOW ;Набор битовых флагов, которые определяют свойства буфера точек
    117.   iPixelType        db PFD_TYPE_RGBA;Требуется RGBA формат
    118.   cColorBits        db 32;Выбирается бит глубины цвета
    119.   cRedBits          db 0
    120.   cRedShift         db 0
    121.   cGreenBits        db 0
    122.   cGreenShift       db 0
    123.   cBlueBits         db 0
    124.   cBlueShift        db 0;Игнорирование цветовых битов
    125.   cAlphaBits        db 0;Нет буфера прозрачности
    126.   cAlphaShift       db 0;Сдвиговый бит игнорируется
    127.   cAccumBits        db 0;Нет буфера накопления
    128.   cAccumRedBits     db 0
    129.   cAccumGreenBits   db 0
    130.   cAccumBlueBits    db 0
    131.   cAccumAlphaBits   db 0;Биты накопления игнорируются
    132.   cDepthBits        db 32;32 битный Z-буфер (буфер глубины)
    133.   cStencilBits      db 0;Нет буфера трафарета
    134.   cAuxBuffers       db 0;Нет вспомогательных буферов
    135.   iLayerType        db PFD_MAIN_PLANE;Главный слой рисования
    136.   bReserved         db 0;Зарезервировано
    137.   dwLayerMask       dd 0
    138.   dwVisibleMask     dd 0
    139.   dwDamageMask      dd 0;Маски слоя игнорируются
    140. szClassName db "Uncle Remus tales:#40 OpenGL",0
    141. FileName db "Images\br_Rabbit3.cur",0
    142. ratio dq 1.1;440/400
    143. const_1_5 dd -1.5
    144. const_5_0 dd -5.0
    145. constd90_0 dq 90.0
    146. constd0_1 dq 0.1
    147. constd100_0 dq 100.0
    148. end
    собирается bat-файлом
    Код (Text):
    1. cls
    2. set masm64_path=\masm43\
    3. set filename=%~n1
    4. if exist errors.txt del errors.txt
    5. call :read_settings %filename%
    6. @echo %kind_of_file%
    7. goto %kind_of_file%
    8. :CONSOLE
    9. if exist %filename%.exe del %filename%.exe
    10. if exist %filename%.obj del %filename%.obj
    11. if exist errors.txt del errors.txt
    12. %masm64_path%bin\ml64 /Cp /c /I"%masm64_path%Include" %filename%.asm >> errors.txt
    13. if errorlevel 1 exit
    14. if exist %1.rc (
    15. %masm64_path%bin\RC /r /i"%masm64_path%\Include" %filename%.rc >> errors.txt
    16. %masm64_path%bin\link /LIBPATH:"%masm64_path%Lib" ^
    17. /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:%masm64_path%bin\stubby.exe ^
    18. /SECTION:.text,W /ALIGN:16 /entry:WinMain /MERGE:.rdata=.text ^
    19. /fixed /nocoffgrpinfo %filename%.obj %filename%.res >> errors.txt
    20. if exist %1.res del %1.res
    21. ) else (
    22. %masm64_path%bin\link /SUBSYSTEM:CONSOLE /LIBPATH:"%masm64_path%Lib" ^
    23. /entry:WinMain %filename%.obj /LARGEADDRESSAWARE:NO ^
    24. /ALIGN:16 /SECTION:.text,W /BASE:0x400000 /STUB:%masm64_path%\bin\stubby.exe >> errors.txt
    25. )
    26. if errorlevel 1 exit
    27. del %filename%.obj
    28. goto exit1
    29. :GUI
    30. if exist %filename%.exe del %filename%.exe
    31. if exist %filename%.obj del %filename%.obj
    32. if exist errors.txt del errors.txt
    33. %masm64_path%bin\ml64 /Cp /c /I"%masm64_path%Include" %filename%.asm >> errors.txt
    34. if errorlevel 1 exit
    35. if exist %1.rc (
    36. %masm64_path%bin\RC /r /i"%masm64_path%\Include" %filename%.rc >> errors.txt
    37. %masm64_path%bin\link /LIBPATH:"%masm64_path%Lib" ^
    38. /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:%masm64_path%bin\stubby.exe ^
    39. /SECTION:.text,W /ALIGN:16 /entry:WinMain ^
    40. /fixed /nocoffgrpinfo %filename%.obj %filename%.res >> errors.txt
    41. if exist %1.res del %1.res
    42. ) else (
    43. %masm64_path%bin\link /SUBSYSTEM:WINDOWS /LIBPATH:"%masm64_path%Lib" ^
    44. /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:%masm64_path%bin\stubby.exe ^
    45. /SECTION:.text,W /ALIGN:16 /entry:WinMain /MERGE:.rdata=.text ^
    46. /fixed /nocoffgrpinfo %filename%.obj >> errors.txt
    47. )
    48. if errorlevel 1 exit
    49. goto exit1
    50. :DLL
    51. if exist %filename%.dll del %filename%.dll
    52. %masm64_path%bin\ml64 /c /Cp /I %masm64_path%include %filename%.asm >> errors.txt
    53. if errorlevel 1 exit
    54. if exist %1.rc (
    55. %masm64_path%bin\RC /r  %filename%.rc >> errors.txt
    56. if errorlevel 1 exit
    57. %masm64_path%bin\link /SUBSYSTEM:WINDOWS /LIBPATH:%masm64_path%lib ^
    58. /ENTRY:DllMain /DLL /DLL /section:.bss,S /stub:%masm64_path%bin\stubby.exe  ^
    59. %filename%.obj %filename%.res /DEF:%filename%.def >> errors.txt
    60. if exist %1.res del %1.res
    61. ) else (
    62. %masm64_path%bin\link /SUBSYSTEM:WINDOWS /LIBPATH:%masm64_path%lib ^
    63. /ENTRY:DllMain /DLL /DLL /section:.bss,S /stub:%masm64_path%bin\stubby.exe  ^
    64. %filename%.obj /DEF:%filename%.def >> errors.txt
    65. )
    66. if errorlevel 1 exit
    67. del %filename%.exp
    68. :exit1
    69. del %filename%.obj
    70. del errors.txt
    71. :: %filename%.exe
    72. exit
    73. :read_settings
    74. for /f "eol=# tokens=2-3" %%A in (%filename%.asm) do (
    75. set kind_of_file=%%A
    76. if %%B == # exit /b )
    77. exit /b
     
    Sashasan, Thetrik и GRAFik нравится это.
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Выводим треугольник, в аттаче исходный файл, ехе и win64a.inc
    02.png
     

    Вложения:

    • 01.zip
      Размер файла:
      4,7 КБ
      Просмотров:
      408
    Sashasan, Thetrik и GRAFik нравится это.
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    треугольник и прямоугольник, в аттаче исходный файл и ехе
    03.png
     

    Вложения:

    • 02.zip
      Размер файла:
      4,2 КБ
      Просмотров:
      420
    Thetrik и GRAFik нравится это.
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Закрашиваем треугольник и прямоугольник, в аттаче исходный файл и ехе
    04.png
     

    Вложения:

    • 03.zip
      Размер файла:
      4,4 КБ
      Просмотров:
      394
    Thetrik и GRAFik нравится это.
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Вращаем треугольник и прямоугольник, в аттаче исходный файл и ехе
    05.png
     

    Вложения:

    • 04.zip
      Размер файла:
      4,6 КБ
      Просмотров:
      408
    Thetrik и GRAFik нравится это.
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Делаем из четырех треугольников вращающейся тетраэдр (пирамида, у которой все грани — равносторонние треугольники), в аттаче исходный файл и ехе
    06.png
     

    Вложения:

    • 06.zip
      Размер файла:
      4,6 КБ
      Просмотров:
      424
    Thetrik и GRAFik нравится это.
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Рисуем треугольник разными типами линий, перемещение, масштабирование и повороты, в аттаче исходный файл и ехе
    07.png
     

    Вложения:

    • 05.zip
      Размер файла:
      4,2 КБ
      Просмотров:
      394
    Thetrik и GRAFik нравится это.
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Два треугольника, в аттаче исходный файл и ехе
    08.png
     

    Вложения:

    • 07.zip
      Размер файла:
      4,1 КБ
      Просмотров:
      391
    Thetrik и GRAFik нравится это.
  10. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Плоский полосатый треугольник, в аттаче исходный файл и ехе
    09.png
     

    Вложения:

    • 08.zip
      Размер файла:
      4,8 КБ
      Просмотров:
      392
    Thetrik и GRAFik нравится это.
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Точки, линии, треугольник, прямоугольники, пятиугольник, в аттаче исходный файл и ехе
    10.png
     

    Вложения:

    • 09.zip
      Размер файла:
      4,1 КБ
      Просмотров:
      410
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Переделанный пример из "FASM OpenGL tutorial от Tyler Durden'а"
    Motion blur — размытие изображения при повороте камеры, воспроизведении сцен движения или быстро движущихся объектов. Рендеринг — процесс получения изображения по модели с помощью компьютерной программы. В аттаче исходный файл, курсор, raw-файл и ехе
    11.png
     

    Вложения:

    • 10.zip
      Размер файла:
      97,2 КБ
      Просмотров:
      402
  13. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Переделанный пример из "FASM OpenGL tutorial от Tyler Durden'а"
    Текстурование — этап в процессе создания и визуализации 3D модели, позволяющий придать поверхности объекта определенных параметров и свойств, для получения максимальной реалистичности. В аттаче исходный файл, курсор, raw-файл и ехе
    12.png
     

    Вложения:

    • 11.zip
      Размер файла:
      73,5 КБ
      Просмотров:
      395
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Переделанный пример из "FASM OpenGL tutorial от Tyler Durden'а"
    α-смешивание (blending) — эффект прозрачности. В аттаче исходный файл, курсор, raw-файл и ехе
    13.png
     

    Вложения:

    • 12.zip
      Размер файла:
      110,9 КБ
      Просмотров:
      403
    SDK нравится это.
  15. SDK

    SDK Member

    Публикаций:
    2
    Регистрация:
    8 дек 2019
    Сообщения:
    100
    Mikl___, это очень много 9 728 байт тот же пульс под вин32
    --- Сообщение объединено, 30 апр 2020 ---
    даже вот с картинкой музыкой скролом и то 263 638 байт это очень много
     

    Вложения:

    • puls.zip
      Размер файла:
      8,7 КБ
      Просмотров:
      752
    • SDK 2020.zip
      Размер файла:
      257,5 КБ
      Просмотров:
      392
  16. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    SDK,
    [​IMG]
    это демосцена. Оригинал под DOS вообще 256 байт, а SDK 2020.exe пожато чем-то
    Цитирую Tyler Durden'а


    Переделанный пример из "FASM OpenGL tutorial от Tyler Durden'а"
    Ёжик в тумане :). В аттаче исходный файл, курсор, raw-файл, opengl32.inc и ехе
    14.png
     

    Вложения:

    • 13.zip
      Размер файла:
      78,8 КБ
      Просмотров:
      399
  17. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Переделанный пример из самоучителя Игоря Тарасова "Основы OpenGL" lamps.c
    В аттаче исходный файл, курсор и ехе
    15.png
     

    Вложения:

    • 14.zip
      Размер файла:
      5,9 КБ
      Просмотров:
      395
  18. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Переделанный пример из RedBook stroke.c
    Вывод текста. В аттаче исходный файл, курсор и ехе
    16.png
     

    Вложения:

    • 15.zip
      Размер файла:
      6,4 КБ
      Просмотров:
      388
  19. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Программа демонстрирует использование модели освещения GL. Несколько объектов нарисованы с использованием разных характеристик материала. Объекты освещает единственный источник света. В аттаче исходный файл, курсор и ехе. Для расчета положения шариков использовалась таблица
    x
    -3,75-1,251,253,75
    y3
    0
    -3
    17.png
     

    Вложения:

    • 16.zip
      Размер файла:
      7,4 КБ
      Просмотров:
      416
    ml64 нравится это.
  20. voffka0

    voffka0 Member

    Публикаций:
    0
    Регистрация:
    22 янв 2019
    Сообщения:
    136
    graphics library utilities aka glut, это прокладка между чистым opengl и системой, поставляется отдельно :dance4:
    --- Сообщение объединено, 3 май 2020 ---
    https://nehe.gamedev.net/
     
    Mikl___ нравится это.