ruby2d-rpeck-windows 0.11.1

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 (289) hide show
  1. checksums.yaml +7 -0
  2. data/assets/README.md +22 -0
  3. data/assets/Rakefile +85 -0
  4. data/assets/app.icns +0 -0
  5. data/assets/include/SDL2/SDL.h +138 -0
  6. data/assets/include/SDL2/SDL_assert.h +293 -0
  7. data/assets/include/SDL2/SDL_atomic.h +295 -0
  8. data/assets/include/SDL2/SDL_audio.h +859 -0
  9. data/assets/include/SDL2/SDL_bits.h +121 -0
  10. data/assets/include/SDL2/SDL_blendmode.h +123 -0
  11. data/assets/include/SDL2/SDL_clipboard.h +71 -0
  12. data/assets/include/SDL2/SDL_config.h +55 -0
  13. data/assets/include/SDL2/SDL_config_android.h +182 -0
  14. data/assets/include/SDL2/SDL_config_iphoneos.h +207 -0
  15. data/assets/include/SDL2/SDL_config_macosx.h +266 -0
  16. data/assets/include/SDL2/SDL_config_minimal.h +85 -0
  17. data/assets/include/SDL2/SDL_config_os2.h +188 -0
  18. data/assets/include/SDL2/SDL_config_pandora.h +135 -0
  19. data/assets/include/SDL2/SDL_config_psp.h +165 -0
  20. data/assets/include/SDL2/SDL_config_windows.h +288 -0
  21. data/assets/include/SDL2/SDL_config_winrt.h +243 -0
  22. data/assets/include/SDL2/SDL_config_wiz.h +149 -0
  23. data/assets/include/SDL2/SDL_copying.h +20 -0
  24. data/assets/include/SDL2/SDL_cpuinfo.h +299 -0
  25. data/assets/include/SDL2/SDL_egl.h +1676 -0
  26. data/assets/include/SDL2/SDL_endian.h +263 -0
  27. data/assets/include/SDL2/SDL_error.h +112 -0
  28. data/assets/include/SDL2/SDL_events.h +827 -0
  29. data/assets/include/SDL2/SDL_filesystem.h +136 -0
  30. data/assets/include/SDL2/SDL_gamecontroller.h +541 -0
  31. data/assets/include/SDL2/SDL_gesture.h +87 -0
  32. data/assets/include/SDL2/SDL_haptic.h +1247 -0
  33. data/assets/include/SDL2/SDL_hints.h +1578 -0
  34. data/assets/include/SDL2/SDL_image.h +161 -0
  35. data/assets/include/SDL2/SDL_joystick.h +499 -0
  36. data/assets/include/SDL2/SDL_keyboard.h +217 -0
  37. data/assets/include/SDL2/SDL_keycode.h +351 -0
  38. data/assets/include/SDL2/SDL_loadso.h +81 -0
  39. data/assets/include/SDL2/SDL_locale.h +101 -0
  40. data/assets/include/SDL2/SDL_log.h +211 -0
  41. data/assets/include/SDL2/SDL_main.h +180 -0
  42. data/assets/include/SDL2/SDL_messagebox.h +146 -0
  43. data/assets/include/SDL2/SDL_metal.h +117 -0
  44. data/assets/include/SDL2/SDL_misc.h +75 -0
  45. data/assets/include/SDL2/SDL_mixer.h +651 -0
  46. data/assets/include/SDL2/SDL_mouse.h +302 -0
  47. data/assets/include/SDL2/SDL_mutex.h +251 -0
  48. data/assets/include/SDL2/SDL_name.h +33 -0
  49. data/assets/include/SDL2/SDL_opengl.h +2183 -0
  50. data/assets/include/SDL2/SDL_opengl_glext.h +11180 -0
  51. data/assets/include/SDL2/SDL_opengles.h +39 -0
  52. data/assets/include/SDL2/SDL_opengles2.h +52 -0
  53. data/assets/include/SDL2/SDL_opengles2_gl2.h +621 -0
  54. data/assets/include/SDL2/SDL_opengles2_gl2ext.h +2050 -0
  55. data/assets/include/SDL2/SDL_opengles2_gl2platform.h +30 -0
  56. data/assets/include/SDL2/SDL_opengles2_khrplatform.h +282 -0
  57. data/assets/include/SDL2/SDL_pixels.h +479 -0
  58. data/assets/include/SDL2/SDL_platform.h +198 -0
  59. data/assets/include/SDL2/SDL_power.h +75 -0
  60. data/assets/include/SDL2/SDL_quit.h +58 -0
  61. data/assets/include/SDL2/SDL_rect.h +174 -0
  62. data/assets/include/SDL2/SDL_render.h +1158 -0
  63. data/assets/include/SDL2/SDL_revision.h +2 -0
  64. data/assets/include/SDL2/SDL_rwops.h +283 -0
  65. data/assets/include/SDL2/SDL_scancode.h +413 -0
  66. data/assets/include/SDL2/SDL_sensor.h +267 -0
  67. data/assets/include/SDL2/SDL_shape.h +144 -0
  68. data/assets/include/SDL2/SDL_stdinc.h +647 -0
  69. data/assets/include/SDL2/SDL_surface.h +563 -0
  70. data/assets/include/SDL2/SDL_system.h +325 -0
  71. data/assets/include/SDL2/SDL_syswm.h +354 -0
  72. data/assets/include/SDL2/SDL_test.h +69 -0
  73. data/assets/include/SDL2/SDL_test_assert.h +105 -0
  74. data/assets/include/SDL2/SDL_test_common.h +218 -0
  75. data/assets/include/SDL2/SDL_test_compare.h +69 -0
  76. data/assets/include/SDL2/SDL_test_crc32.h +124 -0
  77. data/assets/include/SDL2/SDL_test_font.h +81 -0
  78. data/assets/include/SDL2/SDL_test_fuzzer.h +384 -0
  79. data/assets/include/SDL2/SDL_test_harness.h +134 -0
  80. data/assets/include/SDL2/SDL_test_images.h +78 -0
  81. data/assets/include/SDL2/SDL_test_log.h +67 -0
  82. data/assets/include/SDL2/SDL_test_md5.h +129 -0
  83. data/assets/include/SDL2/SDL_test_memory.h +63 -0
  84. data/assets/include/SDL2/SDL_test_random.h +115 -0
  85. data/assets/include/SDL2/SDL_thread.h +366 -0
  86. data/assets/include/SDL2/SDL_timer.h +115 -0
  87. data/assets/include/SDL2/SDL_touch.h +102 -0
  88. data/assets/include/SDL2/SDL_ttf.h +294 -0
  89. data/assets/include/SDL2/SDL_types.h +29 -0
  90. data/assets/include/SDL2/SDL_version.h +162 -0
  91. data/assets/include/SDL2/SDL_video.h +1282 -0
  92. data/assets/include/SDL2/SDL_vulkan.h +276 -0
  93. data/assets/include/SDL2/begin_code.h +166 -0
  94. data/assets/include/SDL2/close_code.h +40 -0
  95. data/assets/include/glew.h +23686 -0
  96. data/assets/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  97. data/assets/ios/Assets.xcassets/Contents.json +6 -0
  98. data/assets/ios/Base.lproj/LaunchScreen.storyboard +27 -0
  99. data/assets/ios/Info.plist +43 -0
  100. data/assets/ios/MRuby.framework/Headers/mrbconf.h +143 -0
  101. data/assets/ios/MRuby.framework/Headers/mruby/array.h +280 -0
  102. data/assets/ios/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
  103. data/assets/ios/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
  104. data/assets/ios/MRuby.framework/Headers/mruby/boxing_word.h +144 -0
  105. data/assets/ios/MRuby.framework/Headers/mruby/class.h +97 -0
  106. data/assets/ios/MRuby.framework/Headers/mruby/common.h +77 -0
  107. data/assets/ios/MRuby.framework/Headers/mruby/compile.h +195 -0
  108. data/assets/ios/MRuby.framework/Headers/mruby/data.h +75 -0
  109. data/assets/ios/MRuby.framework/Headers/mruby/debug.h +67 -0
  110. data/assets/ios/MRuby.framework/Headers/mruby/dump.h +196 -0
  111. data/assets/ios/MRuby.framework/Headers/mruby/error.h +75 -0
  112. data/assets/ios/MRuby.framework/Headers/mruby/gc.h +91 -0
  113. data/assets/ios/MRuby.framework/Headers/mruby/hash.h +215 -0
  114. data/assets/ios/MRuby.framework/Headers/mruby/irep.h +75 -0
  115. data/assets/ios/MRuby.framework/Headers/mruby/istruct.h +47 -0
  116. data/assets/ios/MRuby.framework/Headers/mruby/khash.h +274 -0
  117. data/assets/ios/MRuby.framework/Headers/mruby/numeric.h +161 -0
  118. data/assets/ios/MRuby.framework/Headers/mruby/object.h +44 -0
  119. data/assets/ios/MRuby.framework/Headers/mruby/opcode.h +69 -0
  120. data/assets/ios/MRuby.framework/Headers/mruby/ops.h +117 -0
  121. data/assets/ios/MRuby.framework/Headers/mruby/proc.h +131 -0
  122. data/assets/ios/MRuby.framework/Headers/mruby/range.h +49 -0
  123. data/assets/ios/MRuby.framework/Headers/mruby/re.h +16 -0
  124. data/assets/ios/MRuby.framework/Headers/mruby/string.h +444 -0
  125. data/assets/ios/MRuby.framework/Headers/mruby/throw.h +55 -0
  126. data/assets/ios/MRuby.framework/Headers/mruby/value.h +309 -0
  127. data/assets/ios/MRuby.framework/Headers/mruby/variable.h +136 -0
  128. data/assets/ios/MRuby.framework/Headers/mruby/version.h +110 -0
  129. data/assets/ios/MRuby.framework/Headers/mruby.h +1282 -0
  130. data/assets/ios/MRuby.framework/Info.plist +20 -0
  131. data/assets/ios/MRuby.framework/MRuby +0 -0
  132. data/assets/ios/MyApp.xcodeproj/project.pbxproj +368 -0
  133. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  134. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  135. data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
  136. data/assets/ios/main.c +1 -0
  137. data/assets/macos/lib/libFLAC.a +0 -0
  138. data/assets/macos/lib/libSDL2.a +0 -0
  139. data/assets/macos/lib/libSDL2_image.a +0 -0
  140. data/assets/macos/lib/libSDL2_mixer.a +0 -0
  141. data/assets/macos/lib/libSDL2_ttf.a +0 -0
  142. data/assets/macos/lib/libfreetype.a +0 -0
  143. data/assets/macos/lib/libjpeg.a +0 -0
  144. data/assets/macos/lib/libmodplug.a +0 -0
  145. data/assets/macos/lib/libmpg123.a +0 -0
  146. data/assets/macos/lib/libogg.a +0 -0
  147. data/assets/macos/lib/libpng16.a +0 -0
  148. data/assets/macos/lib/libtiff.a +0 -0
  149. data/assets/macos/lib/libvorbis.a +0 -0
  150. data/assets/macos/lib/libvorbisfile.a +0 -0
  151. data/assets/macos/lib/libwebp.a +0 -0
  152. data/assets/mingw/bin/SDL2.dll +0 -0
  153. data/assets/mingw/bin/SDL2_image.dll +0 -0
  154. data/assets/mingw/bin/SDL2_mixer.dll +0 -0
  155. data/assets/mingw/bin/SDL2_ttf.dll +0 -0
  156. data/assets/mingw/bin/glew32.dll +0 -0
  157. data/assets/mingw/bin/libFLAC-8.dll +0 -0
  158. data/assets/mingw/bin/libfreetype-6.dll +0 -0
  159. data/assets/mingw/bin/libjpeg-9.dll +0 -0
  160. data/assets/mingw/bin/libmodplug-1.dll +0 -0
  161. data/assets/mingw/bin/libmpg123-0.dll +0 -0
  162. data/assets/mingw/bin/libogg-0.dll +0 -0
  163. data/assets/mingw/bin/libopus-0.dll +0 -0
  164. data/assets/mingw/bin/libopusfile-0.dll +0 -0
  165. data/assets/mingw/bin/libpng16-16.dll +0 -0
  166. data/assets/mingw/bin/libtiff-5.dll +0 -0
  167. data/assets/mingw/bin/libvorbis-0.dll +0 -0
  168. data/assets/mingw/bin/libvorbisfile-3.dll +0 -0
  169. data/assets/mingw/bin/libwebp-7.dll +0 -0
  170. data/assets/mingw/bin/libwinpthread-1.dll +0 -0
  171. data/assets/mingw/bin/zlib1.dll +0 -0
  172. data/assets/mingw/lib/libSDL2.a +0 -0
  173. data/assets/mingw/lib/libSDL2.dll.a +0 -0
  174. data/assets/mingw/lib/libSDL2_image.a +0 -0
  175. data/assets/mingw/lib/libSDL2_image.dll.a +0 -0
  176. data/assets/mingw/lib/libSDL2_mixer.a +0 -0
  177. data/assets/mingw/lib/libSDL2_mixer.dll.a +0 -0
  178. data/assets/mingw/lib/libSDL2_test.a +0 -0
  179. data/assets/mingw/lib/libSDL2_ttf.a +0 -0
  180. data/assets/mingw/lib/libSDL2_ttf.dll.a +0 -0
  181. data/assets/mingw/lib/libSDL2main.a +0 -0
  182. data/assets/mingw/lib/libglew32.a +0 -0
  183. data/assets/mingw/lib/libglew32.dll.a +0 -0
  184. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +16 -0
  185. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +6 -0
  186. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +17 -0
  187. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +16 -0
  188. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +6 -0
  189. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +16 -0
  190. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +6 -0
  191. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +16 -0
  192. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +6 -0
  193. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +17 -0
  194. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +16 -0
  195. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +6 -0
  196. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +16 -0
  197. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +6 -0
  198. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +32 -0
  199. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +16 -0
  200. data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +16 -0
  201. data/assets/tvos/Assets.xcassets/Contents.json +6 -0
  202. data/assets/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +22 -0
  203. data/assets/tvos/Info.plist +30 -0
  204. data/assets/tvos/MRuby.framework/Headers/mrbconf.h +143 -0
  205. data/assets/tvos/MRuby.framework/Headers/mruby/array.h +280 -0
  206. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
  207. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
  208. data/assets/tvos/MRuby.framework/Headers/mruby/boxing_word.h +144 -0
  209. data/assets/tvos/MRuby.framework/Headers/mruby/class.h +97 -0
  210. data/assets/tvos/MRuby.framework/Headers/mruby/common.h +77 -0
  211. data/assets/tvos/MRuby.framework/Headers/mruby/compile.h +195 -0
  212. data/assets/tvos/MRuby.framework/Headers/mruby/data.h +75 -0
  213. data/assets/tvos/MRuby.framework/Headers/mruby/debug.h +67 -0
  214. data/assets/tvos/MRuby.framework/Headers/mruby/dump.h +196 -0
  215. data/assets/tvos/MRuby.framework/Headers/mruby/error.h +75 -0
  216. data/assets/tvos/MRuby.framework/Headers/mruby/gc.h +91 -0
  217. data/assets/tvos/MRuby.framework/Headers/mruby/hash.h +215 -0
  218. data/assets/tvos/MRuby.framework/Headers/mruby/irep.h +75 -0
  219. data/assets/tvos/MRuby.framework/Headers/mruby/istruct.h +47 -0
  220. data/assets/tvos/MRuby.framework/Headers/mruby/khash.h +274 -0
  221. data/assets/tvos/MRuby.framework/Headers/mruby/numeric.h +161 -0
  222. data/assets/tvos/MRuby.framework/Headers/mruby/object.h +44 -0
  223. data/assets/tvos/MRuby.framework/Headers/mruby/opcode.h +69 -0
  224. data/assets/tvos/MRuby.framework/Headers/mruby/ops.h +117 -0
  225. data/assets/tvos/MRuby.framework/Headers/mruby/proc.h +131 -0
  226. data/assets/tvos/MRuby.framework/Headers/mruby/range.h +49 -0
  227. data/assets/tvos/MRuby.framework/Headers/mruby/re.h +16 -0
  228. data/assets/tvos/MRuby.framework/Headers/mruby/string.h +444 -0
  229. data/assets/tvos/MRuby.framework/Headers/mruby/throw.h +55 -0
  230. data/assets/tvos/MRuby.framework/Headers/mruby/value.h +309 -0
  231. data/assets/tvos/MRuby.framework/Headers/mruby/variable.h +136 -0
  232. data/assets/tvos/MRuby.framework/Headers/mruby/version.h +110 -0
  233. data/assets/tvos/MRuby.framework/Headers/mruby.h +1282 -0
  234. data/assets/tvos/MRuby.framework/Info.plist +20 -0
  235. data/assets/tvos/MRuby.framework/MRuby +0 -0
  236. data/assets/tvos/MyApp.xcodeproj/project.pbxproj +350 -0
  237. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  238. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  239. data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
  240. data/assets/tvos/main.c +1 -0
  241. data/bin/ruby2d +142 -0
  242. data/ext/ruby2d/common.c +185 -0
  243. data/ext/ruby2d/controllers.c +110 -0
  244. data/ext/ruby2d/extconf.rb +147 -0
  245. data/ext/ruby2d/font.c +35 -0
  246. data/ext/ruby2d/gl.c +398 -0
  247. data/ext/ruby2d/gl2.c +86 -0
  248. data/ext/ruby2d/gl3.c +305 -0
  249. data/ext/ruby2d/gles.c +249 -0
  250. data/ext/ruby2d/image.c +58 -0
  251. data/ext/ruby2d/input.c +48 -0
  252. data/ext/ruby2d/music.c +127 -0
  253. data/ext/ruby2d/ruby2d.c +1374 -0
  254. data/ext/ruby2d/ruby2d.h +656 -0
  255. data/ext/ruby2d/shapes.c +154 -0
  256. data/ext/ruby2d/sound.c +118 -0
  257. data/ext/ruby2d/text.c +22 -0
  258. data/ext/ruby2d/window.c +414 -0
  259. data/lib/ruby2d/circle.rb +43 -0
  260. data/lib/ruby2d/cli/build.rb +237 -0
  261. data/lib/ruby2d/cli/colorize.rb +10 -0
  262. data/lib/ruby2d/cli/console.rb +65 -0
  263. data/lib/ruby2d/cli/enable_console.rb +5 -0
  264. data/lib/ruby2d/cli/launch.rb +50 -0
  265. data/lib/ruby2d/color.rb +136 -0
  266. data/lib/ruby2d/dsl.rb +46 -0
  267. data/lib/ruby2d/entity.rb +17 -0
  268. data/lib/ruby2d/exceptions.rb +6 -0
  269. data/lib/ruby2d/font.rb +96 -0
  270. data/lib/ruby2d/image.rb +58 -0
  271. data/lib/ruby2d/line.rb +89 -0
  272. data/lib/ruby2d/music.rb +67 -0
  273. data/lib/ruby2d/pixel.rb +17 -0
  274. data/lib/ruby2d/quad.rb +96 -0
  275. data/lib/ruby2d/rectangle.rb +65 -0
  276. data/lib/ruby2d/renderable.rb +40 -0
  277. data/lib/ruby2d/ruby2d.so +0 -0
  278. data/lib/ruby2d/sound.rb +55 -0
  279. data/lib/ruby2d/sprite.rb +232 -0
  280. data/lib/ruby2d/square.rb +37 -0
  281. data/lib/ruby2d/text.rb +76 -0
  282. data/lib/ruby2d/texture.rb +28 -0
  283. data/lib/ruby2d/tileset.rb +87 -0
  284. data/lib/ruby2d/triangle.rb +82 -0
  285. data/lib/ruby2d/version.rb +5 -0
  286. data/lib/ruby2d/vertices.rb +84 -0
  287. data/lib/ruby2d/window.rb +673 -0
  288. data/lib/ruby2d.rb +69 -0
  289. metadata +346 -0
data/ext/ruby2d/gl3.c ADDED
@@ -0,0 +1,305 @@
1
+ // OpenGL 3.3+
2
+
3
+ #include "ruby2d.h"
4
+
5
+ // Skip this file if OpenGL ES
6
+ #if !GLES
7
+
8
+ static GLuint vbo; // our primary vertex buffer object (VBO)
9
+ static GLuint vboSize; // size of the VBO in bytes
10
+ static GLfloat *vboData; // pointer to the VBO data
11
+ static GLfloat *vboDataCurrent; // pointer to the data for the current vertices
12
+ static GLuint vboDataIndex = 0; // index of the current object being rendered
13
+ static GLuint vboObjCapacity = 7500; // number of objects the VBO can store
14
+ static GLuint verticesTextureIds[7500]; // store the texture_id of each vertices
15
+ static GLuint shaderProgram; // triangle shader program
16
+ static GLuint texShaderProgram; // texture shader program
17
+
18
+
19
+ /*
20
+ * Applies the projection matrix
21
+ */
22
+ void R2D_GL3_ApplyProjection(GLfloat orthoMatrix[16]) {
23
+
24
+ // Use the program object
25
+ glUseProgram(shaderProgram);
26
+
27
+ // Apply the projection matrix to the triangle shader
28
+ glUniformMatrix4fv(
29
+ glGetUniformLocation(shaderProgram, "u_mvpMatrix"),
30
+ 1, GL_FALSE, orthoMatrix
31
+ );
32
+
33
+ // Use the texture program object
34
+ glUseProgram(texShaderProgram);
35
+
36
+ // Apply the projection matrix to the texture shader
37
+ glUniformMatrix4fv(
38
+ glGetUniformLocation(texShaderProgram, "u_mvpMatrix"),
39
+ 1, GL_FALSE, orthoMatrix
40
+ );
41
+ }
42
+
43
+
44
+ /*
45
+ * Initalize OpenGL
46
+ */
47
+ int R2D_GL3_Init() {
48
+
49
+ // Enable transparency
50
+ glEnable(GL_BLEND);
51
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
52
+
53
+ // Vertex shader source string
54
+ GLchar vertexSource[] =
55
+ "#version 150 core\n" // shader version
56
+
57
+ "uniform mat4 u_mvpMatrix;" // projection matrix
58
+
59
+ // Input attributes to the vertex shader
60
+ "in vec4 position;" // position value
61
+ "in vec4 color;" // vertex color
62
+ "in vec2 texcoord;" // texture coordinates
63
+
64
+ // Outputs to the fragment shader
65
+ "out vec4 Color;" // vertex color
66
+ "out vec2 Texcoord;" // texture coordinates
67
+
68
+ "void main() {"
69
+ // Send the color and texture coordinates right through to the fragment shader
70
+ " Color = color;"
71
+ " Texcoord = texcoord;"
72
+ // Transform the vertex position using the projection matrix
73
+ " gl_Position = u_mvpMatrix * position;"
74
+ "}";
75
+
76
+ // Fragment shader source string
77
+ GLchar fragmentSource[] =
78
+ "#version 150 core\n" // shader version
79
+ "in vec4 Color;" // input color from vertex shader
80
+ "out vec4 outColor;" // output fragment color
81
+
82
+ "void main() {"
83
+ " outColor = Color;" // pass the color right through
84
+ "}";
85
+
86
+ // Fragment shader source string for textures
87
+ GLchar texFragmentSource[] =
88
+ "#version 150 core\n" // shader version
89
+ "in vec4 Color;" // input color from vertex shader
90
+ "in vec2 Texcoord;" // input texture coordinates
91
+ "out vec4 outColor;" // output fragment color
92
+ "uniform sampler2D tex;" // 2D texture unit
93
+
94
+ "void main() {"
95
+ // Apply the texture unit, texture coordinates, and color
96
+ " outColor = texture(tex, Texcoord) * Color;"
97
+ "}";
98
+
99
+ // Create a vertex array object
100
+ GLuint vao;
101
+ glGenVertexArrays(1, &vao);
102
+ glBindVertexArray(vao);
103
+
104
+ // Create a vertex buffer object and allocate data
105
+ glGenBuffers(1, &vbo);
106
+ glBindBuffer(GL_ARRAY_BUFFER, vbo);
107
+ vboSize = vboObjCapacity * sizeof(GLfloat) * 8;
108
+ vboData = (GLfloat *) malloc(vboSize);
109
+ vboDataCurrent = vboData;
110
+
111
+ // Create an element buffer object
112
+ GLuint ebo;
113
+ glGenBuffers(1, &ebo);
114
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
115
+
116
+ // Load the vertex and fragment shaders
117
+ GLuint vertexShader = R2D_GL_LoadShader( GL_VERTEX_SHADER, vertexSource, "GL3 Vertex");
118
+ GLuint fragmentShader = R2D_GL_LoadShader(GL_FRAGMENT_SHADER, fragmentSource, "GL3 Fragment");
119
+ GLuint texFragmentShader = R2D_GL_LoadShader(GL_FRAGMENT_SHADER, texFragmentSource, "GL3 Texture Fragment");
120
+
121
+ // Triangle Shader //
122
+
123
+ // Create the shader program object
124
+ shaderProgram = glCreateProgram();
125
+
126
+ // Check if program was created successfully
127
+ if (shaderProgram == 0) {
128
+ R2D_GL_PrintError("Failed to create shader program");
129
+ return GL_FALSE;
130
+ }
131
+
132
+ // Attach the shader objects to the program object
133
+ glAttachShader(shaderProgram, vertexShader);
134
+ glAttachShader(shaderProgram, fragmentShader);
135
+
136
+ // Bind the output color variable to the fragment shader color number
137
+ glBindFragDataLocation(shaderProgram, 0, "outColor");
138
+
139
+ // Link the shader program
140
+ glLinkProgram(shaderProgram);
141
+
142
+ // Check if linked
143
+ R2D_GL_CheckLinked(shaderProgram, "GL3 shader");
144
+
145
+ // Specify the layout of the position vertex data...
146
+ GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
147
+ glEnableVertexAttribArray(posAttrib);
148
+ glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), 0);
149
+
150
+ // ...and the color vertex data
151
+ GLint colAttrib = glGetAttribLocation(shaderProgram, "color");
152
+ glEnableVertexAttribArray(colAttrib);
153
+ glVertexAttribPointer(colAttrib, 4, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (void*)(2 * sizeof(GLfloat)));
154
+
155
+ // Texture Shader //
156
+
157
+ // Create the texture shader program object
158
+ texShaderProgram = glCreateProgram();
159
+
160
+ // Check if program was created successfully
161
+ if (texShaderProgram == 0) {
162
+ R2D_GL_PrintError("Failed to create shader program");
163
+ return GL_FALSE;
164
+ }
165
+
166
+ // Attach the shader objects to the program object
167
+ glAttachShader(texShaderProgram, vertexShader);
168
+ glAttachShader(texShaderProgram, texFragmentShader);
169
+
170
+ // Bind the output color variable to the fragment shader color number
171
+ glBindFragDataLocation(texShaderProgram, 0, "outColor");
172
+
173
+ // Link the shader program
174
+ glLinkProgram(texShaderProgram);
175
+
176
+ // Check if linked
177
+ R2D_GL_CheckLinked(texShaderProgram, "GL3 texture shader");
178
+
179
+ // Specify the layout of the position vertex data...
180
+ posAttrib = glGetAttribLocation(texShaderProgram, "position");
181
+ glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), 0);
182
+ glEnableVertexAttribArray(posAttrib);
183
+
184
+ // ...and the color vertex data...
185
+ colAttrib = glGetAttribLocation(texShaderProgram, "color");
186
+ glVertexAttribPointer(colAttrib, 4, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (void*)(2 * sizeof(GLfloat)));
187
+ glEnableVertexAttribArray(colAttrib);
188
+
189
+ // ...and the texture coordinates
190
+ GLint texAttrib = glGetAttribLocation(texShaderProgram, "texcoord");
191
+ glVertexAttribPointer(texAttrib, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (void*)(6 * sizeof(GLfloat)));
192
+ glEnableVertexAttribArray(texAttrib);
193
+
194
+ // Clean up
195
+ glDeleteShader(vertexShader);
196
+ glDeleteShader(fragmentShader);
197
+ glDeleteShader(texFragmentShader);
198
+
199
+ // If successful, return true
200
+ return GL_TRUE;
201
+ }
202
+
203
+
204
+ /*
205
+ * Render the vertex buffer and reset it
206
+ */
207
+ void R2D_GL3_FlushBuffers() {
208
+ // Bind to the vertex buffer object and update its data
209
+ glBindBuffer(GL_ARRAY_BUFFER, vbo);
210
+
211
+ glBufferData(GL_ARRAY_BUFFER, vboSize, NULL, GL_DYNAMIC_DRAW);
212
+ glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(GLfloat) * vboDataIndex * 8, vboData);
213
+
214
+ GLuint verticesOffset = 0;
215
+ GLuint lastTextureId = verticesTextureIds[0];
216
+
217
+ for (GLuint i = 0; i <= vboDataIndex; i++) {
218
+ if(lastTextureId != verticesTextureIds[i] || i == vboDataIndex) {
219
+ // A texture ID of 0 represents no texture (render a triangle)
220
+ if(lastTextureId == 0) {
221
+
222
+ // Use the triangle shader program
223
+ glUseProgram(shaderProgram);
224
+
225
+ // A number other than 0 represents a texture_id
226
+ } else {
227
+
228
+ // Use the texture shader program
229
+ glUseProgram(texShaderProgram);
230
+
231
+ // Bind the texture using the provided ID
232
+ glBindTexture(GL_TEXTURE_2D, lastTextureId);
233
+ }
234
+
235
+ glDrawArrays(GL_TRIANGLES, verticesOffset, i - verticesOffset);
236
+
237
+ lastTextureId = verticesTextureIds[i];
238
+ verticesOffset = i;
239
+ }
240
+ }
241
+
242
+ // Reset the buffer object index and data pointer
243
+ vboDataIndex = 0;
244
+ vboDataCurrent = vboData;
245
+ }
246
+
247
+
248
+ /*
249
+ * Draw triangle
250
+ */
251
+ void R2D_GL3_DrawTriangle(GLfloat x1, GLfloat y1,
252
+ GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
253
+ GLfloat x2, GLfloat y2,
254
+ GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
255
+ GLfloat x3, GLfloat y3,
256
+ GLfloat r3, GLfloat g3, GLfloat b3, GLfloat a3) {
257
+
258
+ // If buffer is full, flush it
259
+ if (vboDataIndex + 3 >= vboObjCapacity) R2D_GL3_FlushBuffers();
260
+
261
+ // Set the triangle data into a formatted array
262
+ GLfloat vertices[24] =
263
+ { x1, y1, r1, g1, b1, a1, 0, 0,
264
+ x2, y2, r2, g2, b2, a2, 0, 0,
265
+ x3, y3, r3, g3, b3, a3, 0, 0 };
266
+
267
+ // Copy the vertex data into the current position of the buffer
268
+ memcpy(vboDataCurrent, vertices, sizeof(vertices));
269
+
270
+ // Increment the buffer object index and the vertex data pointer for next use
271
+ verticesTextureIds[vboDataIndex] = verticesTextureIds[vboDataIndex + 1] = verticesTextureIds[vboDataIndex + 2] = 0;
272
+ vboDataIndex += 3;
273
+ vboDataCurrent = (GLfloat *)((char *)vboDataCurrent + (sizeof(GLfloat) * 24));
274
+ }
275
+
276
+
277
+ /*
278
+ * Draw a texture (New method with vertices pre-calculated)
279
+ */
280
+ void R2D_GL3_DrawTexture(GLfloat coordinates[], GLfloat texture_coordinates[], GLfloat color[], int texture_id) {
281
+ // If buffer is full, flush it
282
+ if (vboDataIndex + 6 >= vboObjCapacity) R2D_GL3_FlushBuffers();
283
+
284
+ // There are 6 vertices for a square as we are rendering two Triangles to make up our square:
285
+ // Triangle one: Top left, Top right, Bottom right
286
+ // Triangle two: Bottom right, Bottom left, Top left
287
+ GLfloat vertices[48] = {
288
+ coordinates[0], coordinates[1], color[0], color[1], color[2], color[3], texture_coordinates[0], texture_coordinates[1],
289
+ coordinates[2], coordinates[3], color[0], color[1], color[2], color[3], texture_coordinates[2], texture_coordinates[3],
290
+ coordinates[4], coordinates[5], color[0], color[1], color[2], color[3], texture_coordinates[4], texture_coordinates[5],
291
+ coordinates[4], coordinates[5], color[0], color[1], color[2], color[3], texture_coordinates[4], texture_coordinates[5],
292
+ coordinates[6], coordinates[7], color[0], color[1], color[2], color[3], texture_coordinates[6], texture_coordinates[7],
293
+ coordinates[0], coordinates[1], color[0], color[1], color[2], color[3], texture_coordinates[0], texture_coordinates[1],
294
+ };
295
+
296
+ // Copy the vertex data into the current position of the buffer
297
+ memcpy(vboDataCurrent, vertices, sizeof(vertices));
298
+
299
+ verticesTextureIds[vboDataIndex] = verticesTextureIds[vboDataIndex + 1] = verticesTextureIds[vboDataIndex + 2] = verticesTextureIds[vboDataIndex + 3] = verticesTextureIds[vboDataIndex + 4] = verticesTextureIds[vboDataIndex + 5] = texture_id;
300
+ vboDataIndex += 6;
301
+ vboDataCurrent = (GLfloat *)((char *)vboDataCurrent + (sizeof(GLfloat) * 48));
302
+ }
303
+
304
+
305
+ #endif
data/ext/ruby2d/gles.c ADDED
@@ -0,0 +1,249 @@
1
+ // OpenGL ES 2.0
2
+
3
+ #include "ruby2d.h"
4
+
5
+ #if GLES
6
+
7
+ // Triangle shader
8
+ static GLuint shaderProgram;
9
+ static GLuint positionLocation;
10
+ static GLuint colorLocation;
11
+
12
+ // Texture shader
13
+ static GLuint texShaderProgram;
14
+ static GLuint texPositionLocation;
15
+ static GLuint texColorLocation;
16
+ static GLuint texCoordLocation;
17
+ static GLuint samplerLocation;
18
+
19
+ static GLushort indices[] =
20
+ { 0, 1, 2,
21
+ 2, 3, 0 };
22
+
23
+
24
+ /*
25
+ * Applies the projection matrix
26
+ */
27
+ void R2D_GLES_ApplyProjection(GLfloat orthoMatrix[16]) {
28
+
29
+ // Use the program object
30
+ glUseProgram(shaderProgram);
31
+
32
+ glUniformMatrix4fv(
33
+ glGetUniformLocation(shaderProgram, "u_mvpMatrix"),
34
+ 1, GL_FALSE, orthoMatrix
35
+ );
36
+
37
+ // Use the texture program object
38
+ glUseProgram(texShaderProgram);
39
+
40
+ glUniformMatrix4fv(
41
+ glGetUniformLocation(texShaderProgram, "u_mvpMatrix"),
42
+ 1, GL_FALSE, orthoMatrix
43
+ );
44
+ }
45
+
46
+
47
+ /*
48
+ * Initalize OpenGL ES
49
+ */
50
+ int R2D_GLES_Init() {
51
+
52
+ // Enable transparency
53
+ glEnable(GL_BLEND);
54
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
55
+
56
+ // Vertex shader source string
57
+ GLchar vertexSource[] =
58
+ // uniforms used by the vertex shader
59
+ "uniform mat4 u_mvpMatrix;" // projection matrix
60
+
61
+ // attributes input to the vertex shader
62
+ "attribute vec4 a_position;" // position value
63
+ "attribute vec4 a_color;" // input vertex color
64
+ "attribute vec2 a_texcoord;" // input texture
65
+
66
+ // varying variables, input to the fragment shader
67
+ "varying vec4 v_color;" // output vertex color
68
+ "varying vec2 v_texcoord;" // output texture
69
+
70
+ "void main()"
71
+ "{"
72
+ " v_color = a_color;"
73
+ " v_texcoord = a_texcoord;"
74
+ " gl_Position = u_mvpMatrix * a_position;"
75
+ "}";
76
+
77
+ // Fragment shader source string
78
+ GLchar fragmentSource[] =
79
+ "precision mediump float;"
80
+ // input vertex color from vertex shader
81
+ "varying vec4 v_color;"
82
+
83
+ "void main()"
84
+ "{"
85
+ " gl_FragColor = v_color;"
86
+ "}";
87
+
88
+ // Fragment shader source string for textures
89
+ GLchar texFragmentSource[] =
90
+ "precision mediump float;"
91
+ // input vertex color from vertex shader
92
+ "varying vec4 v_color;"
93
+ "varying vec2 v_texcoord;"
94
+ "uniform sampler2D s_texture;"
95
+
96
+ "void main()"
97
+ "{"
98
+ " gl_FragColor = texture2D(s_texture, v_texcoord) * v_color;"
99
+ "}";
100
+
101
+ // Load the vertex and fragment shaders
102
+ GLuint vertexShader = R2D_GL_LoadShader( GL_VERTEX_SHADER, vertexSource, "GLES Vertex");
103
+ GLuint fragmentShader = R2D_GL_LoadShader(GL_FRAGMENT_SHADER, fragmentSource, "GLES Fragment");
104
+ GLuint texFragmentShader = R2D_GL_LoadShader(GL_FRAGMENT_SHADER, texFragmentSource, "GLES Texture Fragment");
105
+
106
+ // Triangle Shader //
107
+
108
+ // Create the shader program object
109
+ shaderProgram = glCreateProgram();
110
+
111
+ // Check if program was created successfully
112
+ if (shaderProgram == 0) {
113
+ R2D_GL_PrintError("Failed to create shader program");
114
+ return GL_FALSE;
115
+ }
116
+
117
+ // Attach the shader objects to the program object
118
+ glAttachShader(shaderProgram, vertexShader);
119
+ glAttachShader(shaderProgram, fragmentShader);
120
+
121
+ // Link the shader program
122
+ glLinkProgram(shaderProgram);
123
+
124
+ // Check if linked
125
+ R2D_GL_CheckLinked(shaderProgram, "GLES shader");
126
+
127
+ // Get the attribute locations
128
+ positionLocation = glGetAttribLocation(shaderProgram, "a_position");
129
+ colorLocation = glGetAttribLocation(shaderProgram, "a_color");
130
+
131
+ // Texture Shader //
132
+
133
+ // Create the texture shader program object
134
+ texShaderProgram = glCreateProgram();
135
+
136
+ // Check if program was created successfully
137
+ if (texShaderProgram == 0) {
138
+ R2D_GL_PrintError("Failed to create shader program");
139
+ return GL_FALSE;
140
+ }
141
+
142
+ // Attach the shader objects to the program object
143
+ glAttachShader(texShaderProgram, vertexShader);
144
+ glAttachShader(texShaderProgram, texFragmentShader);
145
+
146
+ // Link the shader program
147
+ glLinkProgram(texShaderProgram);
148
+
149
+ // Check if linked
150
+ R2D_GL_CheckLinked(texShaderProgram, "GLES texture shader");
151
+
152
+ // Get the attribute locations
153
+ texPositionLocation = glGetAttribLocation(texShaderProgram, "a_position");
154
+ texColorLocation = glGetAttribLocation(texShaderProgram, "a_color");
155
+ texCoordLocation = glGetAttribLocation(texShaderProgram, "a_texcoord");
156
+
157
+ // Get the sampler location
158
+ samplerLocation = glGetUniformLocation(texShaderProgram, "s_texture");
159
+
160
+ // Clean up
161
+ glDeleteShader(vertexShader);
162
+ glDeleteShader(fragmentShader);
163
+ glDeleteShader(texFragmentShader);
164
+
165
+ return GL_TRUE;
166
+ }
167
+
168
+
169
+ /*
170
+ * Draw triangle
171
+ */
172
+ void R2D_GLES_DrawTriangle(GLfloat x1, GLfloat y1,
173
+ GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
174
+ GLfloat x2, GLfloat y2,
175
+ GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
176
+ GLfloat x3, GLfloat y3,
177
+ GLfloat r3, GLfloat g3, GLfloat b3, GLfloat a3) {
178
+
179
+ GLfloat vertices[] =
180
+ { x1, y1, 0.f,
181
+ x2, y2, 0.f,
182
+ x3, y3, 0.f };
183
+
184
+ GLfloat colors[] =
185
+ { r1, g1, b1, a1,
186
+ r2, g2, b2, a2,
187
+ r3, g3, b3, a3 };
188
+
189
+ glUseProgram(shaderProgram);
190
+
191
+ // Load the vertex position
192
+ glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 0, vertices);
193
+ glEnableVertexAttribArray(positionLocation);
194
+
195
+ // Load the colors
196
+ glVertexAttribPointer(colorLocation, 4, GL_FLOAT, GL_FALSE, 0, colors);
197
+ glEnableVertexAttribArray(colorLocation);
198
+
199
+ // draw
200
+ glDrawArrays(GL_TRIANGLES, 0, 3);
201
+ }
202
+
203
+
204
+ /*
205
+ * Draw a texture (New method with vertices pre-calculated)
206
+ */
207
+ void R2D_GLES_DrawTexture(GLfloat coordinates[], GLfloat texture_coordinates[], GLfloat color[], int texture_id);
208
+ GLfloat vertices[] =
209
+ // x, y coords | x, y texture coords
210
+ {
211
+ coordinates[0], coordinates[1], 0.f, texture_coordinates[0], texture_coordinates[1],
212
+ coordinates[2], coordinates[3], 0.f, texture_coordinates[2], texture_coordinates[3],
213
+ coordinates[4], coordinates[5], 0.f, texture_coordinates[4], texture_coordinates[5],
214
+ coordinates[6], coordinates[7], 0.f, texture_coordinates[6], texture_coordinates[7] };
215
+
216
+ GLfloat colors[] =
217
+ { color[0], color[1], color[2], color[3],
218
+ color[0], color[1], color[2], color[3],
219
+ color[0], color[1], color[2], color[3],
220
+ color[0], color[1], color[2], color[3] };
221
+
222
+ glUseProgram(texShaderProgram);
223
+
224
+ // Load the vertex position
225
+ glVertexAttribPointer(texPositionLocation, 3, GL_FLOAT, GL_FALSE,
226
+ 5 * sizeof(GLfloat), vertices);
227
+ glEnableVertexAttribArray(texPositionLocation);
228
+
229
+ // Load the colors
230
+ glVertexAttribPointer(texColorLocation, 4, GL_FLOAT, GL_FALSE, 0, colors);
231
+ glEnableVertexAttribArray(texColorLocation);
232
+
233
+ // Load the texture coordinate
234
+ glVertexAttribPointer(texCoordLocation, 2, GL_FLOAT, GL_FALSE,
235
+ 5 * sizeof(GLfloat), &vertices[3]);
236
+ glEnableVertexAttribArray(texCoordLocation);
237
+
238
+ // Bind the texture
239
+ glActiveTexture(GL_TEXTURE0);
240
+ glBindTexture(GL_TEXTURE_2D, texture_id);
241
+
242
+ // Set the sampler texture unit to 0
243
+ glUniform1i(samplerLocation, 0);
244
+
245
+ glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
246
+ }
247
+
248
+
249
+ #endif
@@ -0,0 +1,58 @@
1
+ // image.c
2
+
3
+ #include "ruby2d.h"
4
+
5
+
6
+ SDL_Surface *R2D_CreateImageSurface(const char *path) {
7
+ R2D_Init();
8
+
9
+ // Check if image file exists
10
+ if (!R2D_FileExists(path)) {
11
+ R2D_Error("R2D_CreateImageSurface", "Image file `%s` not found", path);
12
+ return NULL;
13
+ }
14
+
15
+ // Load image from file as SDL_Surface
16
+ SDL_Surface *surface = IMG_Load(path);
17
+
18
+ int bits_per_color = surface->format->Amask == 0 ?
19
+ surface->format->BitsPerPixel / 3 :
20
+ surface->format->BitsPerPixel / 4;
21
+
22
+ if (bits_per_color < 8) {
23
+ R2D_Log(R2D_WARN, "`%s` has less than 8 bits per color and will likely not render correctly", path, bits_per_color);
24
+ }
25
+
26
+ return surface;
27
+ }
28
+
29
+ void R2D_ImageConvertToRGB(SDL_Surface *surface) {
30
+ Uint32 r = surface->format->Rmask;
31
+ Uint32 g = surface->format->Gmask;
32
+ Uint32 a = surface->format->Amask;
33
+
34
+ if (r&0xFF000000 || r&0xFF0000) {
35
+ char *p = (char *)surface->pixels;
36
+ int bpp = surface->format->BytesPerPixel;
37
+ int w = surface->w;
38
+ int h = surface->h;
39
+ char tmp;
40
+ for (int i = 0; i < bpp * w * h; i += bpp) {
41
+ if (a&0xFF) {
42
+ tmp = p[i];
43
+ p[i] = p[i+3];
44
+ p[i+3] = tmp;
45
+ }
46
+ if (g&0xFF0000) {
47
+ tmp = p[i+1];
48
+ p[i+1] = p[i+2];
49
+ p[i+2] = tmp;
50
+ }
51
+ if (r&0xFF0000) {
52
+ tmp = p[i];
53
+ p[i] = p[i+2];
54
+ p[i+2] = tmp;
55
+ }
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,48 @@
1
+ // input.c
2
+
3
+ #include "ruby2d.h"
4
+
5
+
6
+ /*
7
+ * Get the mouse coordinates relative to the viewport
8
+ */
9
+ void R2D_GetMouseOnViewport(R2D_Window *window, int wx, int wy, int *x, int *y) {
10
+
11
+ double scale; // viewport scale factor
12
+ int w, h; // width and height of scaled viewport
13
+
14
+ switch (window->viewport.mode) {
15
+
16
+ case R2D_FIXED: case R2D_EXPAND:
17
+ *x = wx / (window->orig_width / (double)window->viewport.width);
18
+ *y = wy / (window->orig_height / (double)window->viewport.height);
19
+ break;
20
+
21
+ case R2D_SCALE:
22
+ R2D_GL_GetViewportScale(window, &w, &h, &scale);
23
+ *x = wx * 1 / scale - (window->width - w) / (2.0 * scale);
24
+ *y = wy * 1 / scale - (window->height - h) / (2.0 * scale);
25
+ break;
26
+
27
+ case R2D_STRETCH:
28
+ *x = wx * window->viewport.width / (double)window->width;
29
+ *y = wy * window->viewport.height / (double)window->height;
30
+ break;
31
+ }
32
+ }
33
+
34
+
35
+ /*
36
+ * Show the cursor over the window
37
+ */
38
+ void R2D_ShowCursor() {
39
+ SDL_ShowCursor(SDL_ENABLE);
40
+ }
41
+
42
+
43
+ /*
44
+ * Hide the cursor over the window
45
+ */
46
+ void R2D_HideCursor() {
47
+ SDL_ShowCursor(SDL_DISABLE);
48
+ }