ruby-glfw 0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. data/README +1 -0
  2. data/README.API +73 -0
  3. data/Rakefile +120 -0
  4. data/examples/boing.rb +519 -0
  5. data/examples/gears.rb +327 -0
  6. data/examples/keytest.rb +117 -0
  7. data/examples/listmodes.rb +20 -0
  8. data/examples/mipmaps.rb +104 -0
  9. data/examples/mipmaps.tga +0 -0
  10. data/examples/particles.rb +837 -0
  11. data/examples/pong3d.rb +741 -0
  12. data/examples/pong3d_field.tga +0 -0
  13. data/examples/pong3d_instr.tga +0 -0
  14. data/examples/pong3d_menu.tga +0 -0
  15. data/examples/pong3d_title.tga +0 -0
  16. data/examples/pong3d_winner1.tga +0 -0
  17. data/examples/pong3d_winner2.tga +0 -0
  18. data/examples/splitview.rb +432 -0
  19. data/examples/triangle.rb +89 -0
  20. data/examples/wave.rb +294 -0
  21. data/ext/glfw/glfw.c +1094 -0
  22. data/ext/glfw/mkrf_conf.rb +70 -0
  23. data/glfw-src/Makefile +220 -0
  24. data/glfw-src/compile.ami +61 -0
  25. data/glfw-src/compile.bat +217 -0
  26. data/glfw-src/compile.sh +607 -0
  27. data/glfw-src/docs/Makefile +57 -0
  28. data/glfw-src/docs/Reference.pdf +0 -0
  29. data/glfw-src/docs/UsersGuide.pdf +0 -0
  30. data/glfw-src/docs/cleanup.bat +22 -0
  31. data/glfw-src/docs/glfwdoc.sty +80 -0
  32. data/glfw-src/docs/glfwrm.tex +3034 -0
  33. data/glfw-src/docs/glfwug.tex +2024 -0
  34. data/glfw-src/docs/readme.txt +80 -0
  35. data/glfw-src/examples/Makefile.amigaos.gcc +70 -0
  36. data/glfw-src/examples/Makefile.amigaos.vbcc +70 -0
  37. data/glfw-src/examples/Makefile.dos.djgpp +71 -0
  38. data/glfw-src/examples/Makefile.macosx.gcc +96 -0
  39. data/glfw-src/examples/Makefile.win32.bcc +75 -0
  40. data/glfw-src/examples/Makefile.win32.cross-mgw +79 -0
  41. data/glfw-src/examples/Makefile.win32.cygwin +79 -0
  42. data/glfw-src/examples/Makefile.win32.lcc +74 -0
  43. data/glfw-src/examples/Makefile.win32.mgw +75 -0
  44. data/glfw-src/examples/Makefile.win32.msvc +74 -0
  45. data/glfw-src/examples/Makefile.win32.ow +74 -0
  46. data/glfw-src/examples/Makefile.win32.pellesc +74 -0
  47. data/glfw-src/examples/Makefile.x11.in +54 -0
  48. data/glfw-src/examples/boing.c +606 -0
  49. data/glfw-src/examples/bundle.sh +46 -0
  50. data/glfw-src/examples/gears.c +382 -0
  51. data/glfw-src/examples/keytest.c +264 -0
  52. data/glfw-src/examples/listmodes.c +48 -0
  53. data/glfw-src/examples/mipmaps.c +126 -0
  54. data/glfw-src/examples/mipmaps.tga +0 -0
  55. data/glfw-src/examples/mtbench.c +301 -0
  56. data/glfw-src/examples/mthello.c +48 -0
  57. data/glfw-src/examples/particles.c +1148 -0
  58. data/glfw-src/examples/pong3d.c +839 -0
  59. data/glfw-src/examples/pong3d_field.tga +0 -0
  60. data/glfw-src/examples/pong3d_instr.tga +0 -0
  61. data/glfw-src/examples/pong3d_menu.tga +0 -0
  62. data/glfw-src/examples/pong3d_title.tga +0 -0
  63. data/glfw-src/examples/pong3d_winner1.tga +0 -0
  64. data/glfw-src/examples/pong3d_winner2.tga +0 -0
  65. data/glfw-src/examples/splitview.c +506 -0
  66. data/glfw-src/examples/triangle.c +108 -0
  67. data/glfw-src/examples/wave.c +397 -0
  68. data/glfw-src/images/opengl.gif +0 -0
  69. data/glfw-src/images/osicert.gif +0 -0
  70. data/glfw-src/include/GL/glfw.h +486 -0
  71. data/glfw-src/lib/amigaos/Makefile.amigaos.gcc +128 -0
  72. data/glfw-src/lib/amigaos/Makefile.amigaos.vbcc +128 -0
  73. data/glfw-src/lib/amigaos/SDI_compiler.h +94 -0
  74. data/glfw-src/lib/amigaos/amigaos_enable.c +51 -0
  75. data/glfw-src/lib/amigaos/amigaos_fullscreen.c +319 -0
  76. data/glfw-src/lib/amigaos/amigaos_glext.c +61 -0
  77. data/glfw-src/lib/amigaos/amigaos_init.c +284 -0
  78. data/glfw-src/lib/amigaos/amigaos_joystick.c +359 -0
  79. data/glfw-src/lib/amigaos/amigaos_thread.c +494 -0
  80. data/glfw-src/lib/amigaos/amigaos_time.c +206 -0
  81. data/glfw-src/lib/amigaos/amigaos_window.c +830 -0
  82. data/glfw-src/lib/amigaos/platform.h +337 -0
  83. data/glfw-src/lib/dos/Makefile.dos.djgpp +146 -0
  84. data/glfw-src/lib/dos/dos_enable.c +51 -0
  85. data/glfw-src/lib/dos/dos_events.c +173 -0
  86. data/glfw-src/lib/dos/dos_fullscreen.c +101 -0
  87. data/glfw-src/lib/dos/dos_glext.c +59 -0
  88. data/glfw-src/lib/dos/dos_init.c +105 -0
  89. data/glfw-src/lib/dos/dos_irq.s +246 -0
  90. data/glfw-src/lib/dos/dos_joystick.c +94 -0
  91. data/glfw-src/lib/dos/dos_keyboard.c +694 -0
  92. data/glfw-src/lib/dos/dos_mouse.c +337 -0
  93. data/glfw-src/lib/dos/dos_thread.c +267 -0
  94. data/glfw-src/lib/dos/dos_time.c +309 -0
  95. data/glfw-src/lib/dos/dos_window.c +563 -0
  96. data/glfw-src/lib/dos/platform.h +341 -0
  97. data/glfw-src/lib/enable.c +295 -0
  98. data/glfw-src/lib/fullscreen.c +95 -0
  99. data/glfw-src/lib/glext.c +201 -0
  100. data/glfw-src/lib/image.c +629 -0
  101. data/glfw-src/lib/init.c +108 -0
  102. data/glfw-src/lib/input.c +280 -0
  103. data/glfw-src/lib/internal.h +210 -0
  104. data/glfw-src/lib/joystick.c +101 -0
  105. data/glfw-src/lib/macosx/Makefile.macosx.gcc +172 -0
  106. data/glfw-src/lib/macosx/Makefile.macosx.gcc.universal +166 -0
  107. data/glfw-src/lib/macosx/libglfw.pc.in +11 -0
  108. data/glfw-src/lib/macosx/macosx_enable.c +42 -0
  109. data/glfw-src/lib/macosx/macosx_fullscreen.c +126 -0
  110. data/glfw-src/lib/macosx/macosx_glext.c +52 -0
  111. data/glfw-src/lib/macosx/macosx_init.c +194 -0
  112. data/glfw-src/lib/macosx/macosx_joystick.c +50 -0
  113. data/glfw-src/lib/macosx/macosx_thread.c +414 -0
  114. data/glfw-src/lib/macosx/macosx_time.c +112 -0
  115. data/glfw-src/lib/macosx/macosx_window.c +1279 -0
  116. data/glfw-src/lib/macosx/platform.h +349 -0
  117. data/glfw-src/lib/stream.c +194 -0
  118. data/glfw-src/lib/tga.c +405 -0
  119. data/glfw-src/lib/thread.c +340 -0
  120. data/glfw-src/lib/time.c +83 -0
  121. data/glfw-src/lib/win32/Makefile.win32.bcc +265 -0
  122. data/glfw-src/lib/win32/Makefile.win32.cross-mgw +274 -0
  123. data/glfw-src/lib/win32/Makefile.win32.cygwin +279 -0
  124. data/glfw-src/lib/win32/Makefile.win32.lcc +246 -0
  125. data/glfw-src/lib/win32/Makefile.win32.mgw +243 -0
  126. data/glfw-src/lib/win32/Makefile.win32.msvc +242 -0
  127. data/glfw-src/lib/win32/Makefile.win32.ow +242 -0
  128. data/glfw-src/lib/win32/Makefile.win32.pellesc +242 -0
  129. data/glfw-src/lib/win32/glfwdll.def +67 -0
  130. data/glfw-src/lib/win32/glfwdll_mgw1.def +67 -0
  131. data/glfw-src/lib/win32/glfwdll_mgw2.def +67 -0
  132. data/glfw-src/lib/win32/glfwdll_pellesc.def +65 -0
  133. data/glfw-src/lib/win32/libglfw.pc.in +11 -0
  134. data/glfw-src/lib/win32/platform.h +474 -0
  135. data/glfw-src/lib/win32/win32_dllmain.c +60 -0
  136. data/glfw-src/lib/win32/win32_enable.c +155 -0
  137. data/glfw-src/lib/win32/win32_fullscreen.c +317 -0
  138. data/glfw-src/lib/win32/win32_glext.c +85 -0
  139. data/glfw-src/lib/win32/win32_init.c +356 -0
  140. data/glfw-src/lib/win32/win32_joystick.c +234 -0
  141. data/glfw-src/lib/win32/win32_thread.c +511 -0
  142. data/glfw-src/lib/win32/win32_time.c +146 -0
  143. data/glfw-src/lib/win32/win32_window.c +1714 -0
  144. data/glfw-src/lib/window.c +727 -0
  145. data/glfw-src/lib/x11/Makefile.x11.in +243 -0
  146. data/glfw-src/lib/x11/platform.h +415 -0
  147. data/glfw-src/lib/x11/x11_enable.c +51 -0
  148. data/glfw-src/lib/x11/x11_fullscreen.c +524 -0
  149. data/glfw-src/lib/x11/x11_glext.c +69 -0
  150. data/glfw-src/lib/x11/x11_init.c +275 -0
  151. data/glfw-src/lib/x11/x11_joystick.c +371 -0
  152. data/glfw-src/lib/x11/x11_keysym2unicode.c +902 -0
  153. data/glfw-src/lib/x11/x11_thread.c +507 -0
  154. data/glfw-src/lib/x11/x11_time.c +154 -0
  155. data/glfw-src/lib/x11/x11_window.c +1746 -0
  156. data/glfw-src/license.txt +21 -0
  157. data/glfw-src/readme.html +927 -0
  158. data/glfw-src/support/d/examples/Makefile +59 -0
  159. data/glfw-src/support/d/examples/boing.d +610 -0
  160. data/glfw-src/support/d/examples/gears.d +379 -0
  161. data/glfw-src/support/d/examples/keytest.d +272 -0
  162. data/glfw-src/support/d/examples/listmodes.d +48 -0
  163. data/glfw-src/support/d/examples/mipmaps.d +126 -0
  164. data/glfw-src/support/d/examples/mtbench.d +304 -0
  165. data/glfw-src/support/d/examples/mthello.d +54 -0
  166. data/glfw-src/support/d/examples/particles.d +1150 -0
  167. data/glfw-src/support/d/examples/pong3d.d +840 -0
  168. data/glfw-src/support/d/examples/splitview.d +486 -0
  169. data/glfw-src/support/d/examples/triangle.d +108 -0
  170. data/glfw-src/support/d/examples/wave.d +400 -0
  171. data/glfw-src/support/d/imports/gl.d +4539 -0
  172. data/glfw-src/support/d/imports/glfw.d +349 -0
  173. data/glfw-src/support/d/imports/glu.d +328 -0
  174. data/glfw-src/support/d/lib/glfwdll.def +64 -0
  175. data/glfw-src/support/d/lib/glu32.def +56 -0
  176. data/glfw-src/support/d/lib/makefile +12 -0
  177. data/glfw-src/support/d/lib/opengl32.def +372 -0
  178. data/glfw-src/support/d/readme.html +83 -0
  179. data/glfw-src/support/delphi/examples/Triangle.dpr +105 -0
  180. data/glfw-src/support/delphi/lib/glfw.pas +437 -0
  181. data/glfw-src/support/delphi/readme.html +97 -0
  182. data/glfw-src/support/lua/examples/gears.lua +383 -0
  183. data/glfw-src/support/lua/examples/test1.lua +68 -0
  184. data/glfw-src/support/lua/readme.html +128 -0
  185. data/glfw-src/support/lua/src/luaglfw.c +1179 -0
  186. data/glfw-src/support/lua/src/luaglfw.h +48 -0
  187. data/glfw-src/support/lua/src/runlua.c +82 -0
  188. data/glfw-src/support/masm/examples/fpc.mac +47 -0
  189. data/glfw-src/support/masm/examples/makeit.bat +66 -0
  190. data/glfw-src/support/masm/examples/triangle.asm +232 -0
  191. data/glfw-src/support/masm/include/glfw.inc +326 -0
  192. data/glfw-src/support/masm/include/glu32.inc +55 -0
  193. data/glfw-src/support/masm/include/opengl32.inc +372 -0
  194. data/glfw-src/support/masm/lib/glfwdll.lib +0 -0
  195. data/glfw-src/support/masm/readme.html +170 -0
  196. data/glfw-src/support/msvc80/GLFW.sln +26 -0
  197. data/glfw-src/support/msvc80/GLFW.vcproj +257 -0
  198. data/glfw-src/support/msvc80/GLFWDLL.vcproj +287 -0
  199. data/glfw-src/support/visualbasic/bindings/glfw.bas +320 -0
  200. data/glfw-src/support/visualbasic/bindings/glu32.bas +284 -0
  201. data/glfw-src/support/visualbasic/bindings/opengl32.bas +999 -0
  202. data/glfw-src/support/visualbasic/examples/Triangle.bas +101 -0
  203. data/glfw-src/support/visualbasic/readme.html +164 -0
  204. data/website/index.html +84 -0
  205. data/website/style.css +110 -0
  206. metadata +301 -0
@@ -0,0 +1,48 @@
1
+ //========================================================================
2
+ // GLFW - An OpenGL framework
3
+ // File: luaglfw.h
4
+ // Platform: Lua 5.0
5
+ // API version: 2.5
6
+ // WWW: http://glfw.sourceforge.net
7
+ //------------------------------------------------------------------------
8
+ // Copyright (c) 2002-2005 Camilla Berglund
9
+ //
10
+ // This software is provided 'as-is', without any express or implied
11
+ // warranty. In no event will the authors be held liable for any damages
12
+ // arising from the use of this software.
13
+ //
14
+ // Permission is granted to anyone to use this software for any purpose,
15
+ // including commercial applications, and to alter it and redistribute it
16
+ // freely, subject to the following restrictions:
17
+ //
18
+ // 1. The origin of this software must not be misrepresented; you must not
19
+ // claim that you wrote the original software. If you use this software
20
+ // in a product, an acknowledgment in the product documentation would
21
+ // be appreciated but is not required.
22
+ //
23
+ // 2. Altered source versions must be plainly marked as such, and must not
24
+ // be misrepresented as being the original software.
25
+ //
26
+ // 3. This notice may not be removed or altered from any source
27
+ // distribution.
28
+ //
29
+ //========================================================================
30
+
31
+ #ifndef __luaglfw_h_
32
+ #define __luaglfw_h_
33
+
34
+ #ifdef __cplusplus
35
+ extern "C" {
36
+ #endif
37
+
38
+
39
+ #include <lua.h>
40
+
41
+ int luaopen_glfw( lua_State * L );
42
+
43
+
44
+ #ifdef __cplusplus
45
+ }
46
+ #endif
47
+
48
+ #endif // __luaglfw_h_
@@ -0,0 +1,82 @@
1
+ //========================================================================
2
+ // A simple Lua interpreter with support for GLFW and OpenGL
3
+ // File: runlua.c
4
+ // Platform: Lua 5.0 + LuaGL + luaglfw
5
+ // WWW: http://glfw.sourceforge.net
6
+ //------------------------------------------------------------------------
7
+ // Copyright (c) 2002-2005 Camilla Berglund
8
+ //
9
+ // This software is provided 'as-is', without any express or implied
10
+ // warranty. In no event will the authors be held liable for any damages
11
+ // arising from the use of this software.
12
+ //
13
+ // Permission is granted to anyone to use this software for any purpose,
14
+ // including commercial applications, and to alter it and redistribute it
15
+ // freely, subject to the following restrictions:
16
+ //
17
+ // 1. The origin of this software must not be misrepresented; you must not
18
+ // claim that you wrote the original software. If you use this software
19
+ // in a product, an acknowledgment in the product documentation would
20
+ // be appreciated but is not required.
21
+ //
22
+ // 2. Altered source versions must be plainly marked as such, and must not
23
+ // be misrepresented as being the original software.
24
+ //
25
+ // 3. This notice may not be removed or altered from any source
26
+ // distribution.
27
+ //
28
+ //========================================================================
29
+
30
+ #include <stdio.h>
31
+ #include <lua.h>
32
+ #include <lauxlib.h>
33
+ #include <lualib.h>
34
+
35
+ #include <LuaGL.h>
36
+ #include "luaglfw.h"
37
+
38
+
39
+ //========================================================================
40
+ // main() - Program entry point
41
+ //========================================================================
42
+
43
+ int main( int argc, char **argv )
44
+ {
45
+ lua_State *L;
46
+
47
+ // Check arguments
48
+ if( argc != 2 )
49
+ {
50
+ printf( "Usage: %s filename.lua\n", argv[0] );
51
+ return -1;
52
+ }
53
+
54
+ // Init Lua
55
+ L = lua_open();
56
+ if( !L )
57
+ {
58
+ printf("Unable to start Lua\n");
59
+ return -1;
60
+ }
61
+
62
+ // Open all Lua standard libraries
63
+ luaopen_base( L );
64
+ luaopen_table( L );
65
+ luaopen_io( L );
66
+ luaopen_string( L );
67
+ luaopen_math( L );
68
+
69
+ // Open LuaGL and luaglfw libraries
70
+ luaopen_opengl( L );
71
+ luaopen_glfw( L );
72
+
73
+ // Load and run the selected Lua program
74
+ if( luaL_loadfile( L, argv[1] ) || lua_pcall( L, 0, 0, 0 ) )
75
+ {
76
+ printf("Error running Lua program: %s\n", lua_tostring( L, -1 ) );
77
+ lua_pop( L, 1 );
78
+ return -1;
79
+ }
80
+
81
+ return 0;
82
+ }
@@ -0,0 +1,47 @@
1
+ ;#########################################################################
2
+ ;# FPC - Floating Point Constant #
3
+ ;# Macro by BitRake #
4
+ ;#########################################################################
5
+
6
+ fpc MACRO val:REQ
7
+ LOCAL w,x,y,z,zz,ww
8
+
9
+ ;; split type and value, defaulting to REAL4
10
+ z INSTR 1,<&val>,<! >
11
+ IF z EQ 0
12
+ y TEXTEQU <REAL4>
13
+ x TEXTEQU <&val>
14
+ ELSE
15
+ y TEXTEQU @SubStr(<&val>,1,z-1) ;; Type
16
+ x TEXTEQU @SubStr(<&val>,z+1,) ;; Value
17
+ ENDIF
18
+
19
+ ;; replace . with _
20
+ z INSTR 1,x,<!.>
21
+ IF z EQ 0
22
+ w TEXTEQU x
23
+ x CATSTR x,<.0> ;; prevent error message
24
+ ELSE
25
+ w CATSTR @SubStr(%x,1,z-1),<_>,@SubStr(%x,z+1,)
26
+ ENDIF
27
+
28
+ ;; replace - with _
29
+ zz INSTR 1,w,<!->
30
+ IF zz EQ 0
31
+ ww TEXTEQU w
32
+ ELSE
33
+ ww CATSTR @SubStr(%w,1,zz-1),<_>,@SubStr(%w,zz+1,)
34
+ ENDIF
35
+
36
+ ;; figure out global name for constant
37
+ z SIZESTR y ;; use last char for size distiction
38
+ ww CATSTR <__>,ww,<r>,@SubStr(%y,z,1)
39
+
40
+ IF (OPATTR(ww)) EQ 0 ;; not defined
41
+ CONST SEGMENT
42
+ ww y x
43
+ CONST ENDS
44
+ ENDIF
45
+ EXITM ww
46
+ ENDM
47
+
@@ -0,0 +1,66 @@
1
+ @ECHO OFF
2
+
3
+ REM **********************************************************************
4
+ REM * This is the build script for the GLFW example programs for MASM32. *
5
+ REM * *
6
+ REM * Unlike the MASM32 recommendations, I like to keep my MASM32 *
7
+ REM * installation on one partition, and my GLFW/MASM32 projects on *
8
+ REM * another partition, which is why the script begins by finding which *
9
+ REM * drive MASM32 is installed on. Thus, all MASM32 related paths (BIN, *
10
+ REM * INCLUDE and LIB) are absolute rather than drive relative. *
11
+ REM * *
12
+ REM * Feel free to use this build file for your own MASM32 projects (it *
13
+ REM * is only necessary to make minor changes in the Compile section). *
14
+ REM **********************************************************************
15
+
16
+ REM **********************************************************************
17
+ REM * MASM32 is drive sensitive. Figure out where it is installed. *
18
+ REM **********************************************************************
19
+ SET masmdrv=
20
+ IF EXIST C:\masm32\bin\ml.exe SET masmdrv=C:
21
+ IF EXIST D:\masm32\bin\ml.exe SET masmdrv=D:
22
+ IF EXIST E:\masm32\bin\ml.exe SET masmdrv=E:
23
+ IF EXIST F:\masm32\bin\ml.exe SET masmdrv=F:
24
+ IF EXIST G:\masm32\bin\ml.exe SET masmdrv=G:
25
+ IF EXIST H:\masm32\bin\ml.exe SET masmdrv=H:
26
+ IF NOT "%masmdrv%" == "" GOTO Compile
27
+
28
+
29
+ REM **********************************************************************
30
+ REM * Could not find MASM32 installation *
31
+ REM **********************************************************************
32
+
33
+ ECHO ERROR: Could not find MASM32 installation - Aborting.
34
+ GOTO Exit
35
+
36
+
37
+ REM **********************************************************************
38
+ REM * Compile programs *
39
+ REM **********************************************************************
40
+ :Compile
41
+
42
+ REM *** ASSEMBLER AND LINKER FLAGS (for all examples) ***
43
+ SET aflags=/nologo /c /coff /I%masmdrv%\masm32\include
44
+ SET lflags=/NOLOGO /SUBSYSTEM:WINDOWS /LIBPATH:%masmdrv%\masm32\lib
45
+
46
+ REM *** TRIANGLE ***
47
+ SET prgname=triangle
48
+ %masmdrv%\masm32\bin\ml %aflags% %prgname%.asm
49
+ %masmdrv%\masm32\bin\link %lflags% %prgname%.obj /OUT:%prgname%.exe
50
+
51
+
52
+ REM **********************************************************************
53
+ REM * Remove internal working variables *
54
+ REM **********************************************************************
55
+ :Done
56
+
57
+ SET masmdrv=
58
+ SET aflags=
59
+ SET lflags=
60
+ SET prgname=
61
+
62
+
63
+ REM **********************************************************************
64
+ REM * End of batch file *
65
+ REM **********************************************************************
66
+ :Exit
@@ -0,0 +1,232 @@
1
+ ;=========================================================================
2
+ ; This is a small test application for GLFW.
3
+ ; The program opens a window (640x480), and renders a spinning colored
4
+ ; triangle (it is controlled with both the GLFW timer and the mouse). It
5
+ ; also calculates the rendering speed (FPS), which is displayed in the
6
+ ; window title bar.
7
+ ;
8
+ ; This program was converted from C to x86 assembler by Toni Jovanoski.
9
+ ;=========================================================================
10
+
11
+ .686
12
+ .MODEL FLAT, STDCALL
13
+ OPTION CASEMAP:NONE
14
+
15
+
16
+ ;#########################################################################
17
+ ;# INCLUDES #
18
+ ;#########################################################################
19
+
20
+ ; Standard Windows includes
21
+ INCLUDE windows.inc
22
+ INCLUDE kernel32.inc
23
+ INCLUDE masm32.inc
24
+
25
+ ; OpenGL includes
26
+ INCLUDE opengl32.inc
27
+ INCLUDE glu32.inc
28
+ INCLUDE glfw.inc
29
+
30
+ ; Macros
31
+ INCLUDE fpc.mac ; floating point constant macro
32
+
33
+
34
+ ;#########################################################################
35
+ ;# INCLUDE LIBS #
36
+ ;#########################################################################
37
+
38
+ ; Standard Windows libs
39
+ INCLUDELIB kernel32.lib
40
+ INCLUDELIB masm32.lib
41
+
42
+ ; OpenGL libs
43
+ INCLUDELIB opengl32.lib
44
+ INCLUDELIB glu32.lib
45
+ INCLUDELIB glfwdll.lib
46
+
47
+
48
+ ;#########################################################################
49
+ ;# INIT DATA #
50
+ ;#########################################################################
51
+
52
+ .DATA
53
+
54
+
55
+ ;#########################################################################
56
+ ;# UNINIT DATA #
57
+ ;#########################################################################
58
+
59
+ .DATA?
60
+
61
+ ALIGN 8
62
+
63
+ t REAL8 ?
64
+ t0 REAL8 ?
65
+ fps REAL8 ?
66
+ ratio REAL8 ?
67
+
68
+ temp REAL4 ?
69
+
70
+ windowwidth DWORD ?
71
+ windowheight DWORD ?
72
+ cursorx DWORD ?
73
+ cursory DWORD ?
74
+ frames DWORD ?
75
+
76
+ windowtitle BYTE 64 DUP (?)
77
+
78
+
79
+ ;#########################################################################
80
+ ;# CODE #
81
+ ;#########################################################################
82
+
83
+ .CODE
84
+
85
+ start:
86
+
87
+ push ebx
88
+
89
+ ;We init GLFW
90
+ INVOKE glfwInit
91
+
92
+ ;We open window
93
+ INVOKE glfwOpenWindow, 640, 480, 0, 0, 0, 0, 0, 0, GLFW_WINDOW
94
+
95
+ ;If there is a problem with opening window, get out
96
+ .IF (!eax)
97
+ INVOKE glfwTerminate
98
+ INVOKE ExitProcess, NULL
99
+ .ENDIF
100
+
101
+ ;Enabling sticky keys
102
+ INVOKE glfwEnable, GLFW_STICKY_KEYS
103
+
104
+ ;we don't want vsync on
105
+ INVOKE glfwSwapInterval, 0
106
+
107
+ ;in frames we keep how much frames are rendered
108
+ and frames, 0
109
+
110
+ ;get a first "reference" time
111
+ INVOKE glfwGetTime
112
+ fstp t0
113
+
114
+ ;repeat until ESC is pressed or window is closed
115
+ .REPEAT
116
+
117
+
118
+ INVOKE glfwGetTime
119
+ fst t ;don't pop we gonna use him again
120
+
121
+ ;we find how much time had been elapsed
122
+ fsub t0 ;st(0)=t-t0
123
+ fld1 ;1, t-t0
124
+
125
+ ;we test if elapsed time is above or below 1 second
126
+ fcomip st(0), st(1) ;compare 1 with t-t0 (PPro upward instruction!!!)
127
+
128
+ ja @F
129
+
130
+ ;if elapsed time is above 1 second calculate fps
131
+ fild frames ;frames, t-t0
132
+ fdivrp st(1), st(0) ;frames/t-t0
133
+ fstp fps ;calculate fps
134
+
135
+ ;convert to string
136
+ INVOKE FloatToStr, fps, ADDR windowtitle ;float to string
137
+ INVOKE glfwSetWindowTitle, ADDR windowtitle
138
+
139
+ ;update t0, or t is now new "reference" time and reset frames
140
+ mov eax, DWORD PTR [t] ;using integer move instead FPU move
141
+ mov ecx, DWORD PTR [t+4]
142
+ mov DWORD PTR [t0], eax
143
+ mov DWORD PTR [t0+4], ecx
144
+ and frames, 0 ;reset frames
145
+
146
+ @@:
147
+
148
+ fstp st(0) ;free st(0) because st(0)=t-t0
149
+ inc frames
150
+
151
+ ;we need mouse position for rotating
152
+ INVOKE glfwGetMousePos, ADDR cursorx, ADDR cursory
153
+
154
+ ;we need size of window to setup the viewport and perspective
155
+ INVOKE glfwGetWindowSize, ADDR windowwidth, ADDR windowheight
156
+
157
+ .IF (windowheight==0)
158
+ mov windowheight, 1 ;avoid divide with zero
159
+ .ENDIF
160
+
161
+ ;setting viewport
162
+ INVOKE glViewport, 0, 0, windowwidth, windowheight
163
+
164
+ ;clearing color for framebuffer, pure black
165
+ INVOKE glClearColor, fpc(0), fpc(0), fpc(0), fpc(0)
166
+
167
+ ;clear framebuffer
168
+ INVOKE glClear, GL_COLOR_BUFFER_BIT
169
+
170
+ ;setting up perspective, first we "reset" projection matrix and
171
+ ;then we set the perspective
172
+ INVOKE glMatrixMode, GL_PROJECTION
173
+ INVOKE glLoadIdentity
174
+
175
+ ;calculate ratio (ratio = windowwidth / windowheight)
176
+ fild windowwidth
177
+ fild windowheight
178
+ fdivp st(1), st(0)
179
+ fstp ratio
180
+
181
+ ;FOV=65, znear=1, zfar=100
182
+ INVOKE gluPerspective, fpc(REAL8 65), ratio, fpc(REAL8 1), fpc(REAL8 100)
183
+
184
+ ;we "reset" the modelview matrix and we place the camera
185
+ INVOKE glMatrixMode, GL_MODELVIEW
186
+ INVOKE glLoadIdentity
187
+
188
+ INVOKE gluLookAt, fpc(REAL8 0), fpc(REAL8 1), fpc(REAL8 0),\ ;set camera
189
+ fpc(REAL8 0), fpc(REAL8 20), fpc(REAL8 0),\
190
+ fpc(REAL8 0), fpc(REAL8 0), fpc(REAL8 1)
191
+
192
+ INVOKE glTranslatef, fpc(0), fpc(14), fpc(0)
193
+
194
+ ;calculate the angle of rotation
195
+ fild cursorx
196
+ fmul fpc(0.3) ;0.3*x
197
+ fld t ;t, 0.3*x
198
+ fmul fpc(100) ;100*t, 0.3*x
199
+ faddp st(1), st(0) ;100*t+0.3*x
200
+ fstp temp
201
+
202
+ INVOKE glRotatef, temp, fpc(0), fpc(0), fpc(1)
203
+
204
+ ;draw a triagle
205
+ INVOKE glBegin, GL_TRIANGLES
206
+ INVOKE glColor3f, fpc(1), fpc(0), fpc(0)
207
+ INVOKE glVertex3f, fpc(-5), fpc(0), fpc(-4)
208
+ INVOKE glColor3f, fpc(0), fpc(1), fpc(0)
209
+ INVOKE glVertex3f, fpc(5), fpc(0), fpc(-4)
210
+ INVOKE glColor3f, fpc(0), fpc(0), fpc(1)
211
+ INVOKE glVertex3f, fpc(0), fpc(0), fpc(6)
212
+ INVOKE glEnd
213
+
214
+ ;swap buffers
215
+ INVOKE glfwSwapBuffers
216
+
217
+ ;get state of ESC key
218
+ INVOKE glfwGetKey, GLFW_KEY_ESC
219
+ mov ebx, eax
220
+
221
+ ;get state of window (opened or closed)
222
+ INVOKE glfwGetWindowParam, GLFW_OPENED
223
+
224
+ .UNTIL (ebx) || (!eax) ;if is pressed ESC or window is closed get out
225
+
226
+ INVOKE glfwTerminate
227
+
228
+ pop ebx
229
+
230
+ INVOKE ExitProcess, NULL
231
+
232
+ END start