ruby2d 0.9.3 → 0.11.0

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 (166) hide show
  1. checksums.yaml +4 -4
  2. data/assets/README.md +7 -9
  3. data/assets/Rakefile +85 -0
  4. data/assets/include/SDL2/SDL.h +4 -1
  5. data/assets/include/SDL2/SDL_assert.h +3 -1
  6. data/assets/include/SDL2/SDL_atomic.h +20 -2
  7. data/assets/include/SDL2/SDL_audio.h +47 -14
  8. data/assets/include/SDL2/SDL_bits.h +10 -1
  9. data/assets/include/SDL2/SDL_blendmode.h +10 -7
  10. data/assets/include/SDL2/SDL_clipboard.h +1 -1
  11. data/assets/include/SDL2/SDL_config.h +24 -390
  12. data/assets/include/SDL2/SDL_config_android.h +182 -0
  13. data/assets/include/SDL2/SDL_config_iphoneos.h +207 -0
  14. data/assets/include/SDL2/SDL_config_macosx.h +266 -0
  15. data/assets/include/SDL2/SDL_config_minimal.h +85 -0
  16. data/assets/include/SDL2/SDL_config_os2.h +188 -0
  17. data/assets/include/SDL2/SDL_config_pandora.h +135 -0
  18. data/assets/include/SDL2/SDL_config_psp.h +165 -0
  19. data/assets/include/SDL2/SDL_config_windows.h +288 -0
  20. data/assets/include/SDL2/SDL_config_winrt.h +243 -0
  21. data/assets/include/SDL2/SDL_config_wiz.h +149 -0
  22. data/assets/include/SDL2/SDL_copying.h +20 -0
  23. data/assets/include/SDL2/SDL_cpuinfo.h +119 -8
  24. data/assets/include/SDL2/SDL_egl.h +4 -1
  25. data/assets/include/SDL2/SDL_endian.h +6 -3
  26. data/assets/include/SDL2/SDL_error.h +38 -2
  27. data/assets/include/SDL2/SDL_events.h +67 -28
  28. data/assets/include/SDL2/SDL_filesystem.h +1 -1
  29. data/assets/include/SDL2/SDL_gamecontroller.h +160 -9
  30. data/assets/include/SDL2/SDL_gesture.h +1 -1
  31. data/assets/include/SDL2/SDL_haptic.h +10 -1
  32. data/assets/include/SDL2/SDL_hints.h +460 -17
  33. data/assets/include/SDL2/SDL_image.h +2 -2
  34. data/assets/include/SDL2/SDL_joystick.h +115 -24
  35. data/assets/include/SDL2/SDL_keyboard.h +1 -1
  36. data/assets/include/SDL2/SDL_keycode.h +11 -9
  37. data/assets/include/SDL2/SDL_loadso.h +1 -1
  38. data/assets/include/SDL2/SDL_locale.h +101 -0
  39. data/assets/include/SDL2/SDL_log.h +3 -3
  40. data/assets/include/SDL2/SDL_main.h +28 -16
  41. data/assets/include/SDL2/SDL_messagebox.h +6 -4
  42. data/assets/include/SDL2/SDL_metal.h +117 -0
  43. data/assets/include/SDL2/SDL_misc.h +75 -0
  44. data/assets/include/SDL2/SDL_mouse.h +1 -1
  45. data/assets/include/SDL2/SDL_mutex.h +1 -1
  46. data/assets/include/SDL2/SDL_name.h +1 -1
  47. data/assets/include/SDL2/SDL_opengl.h +1 -1
  48. data/assets/include/SDL2/SDL_opengl_glext.h +3 -0
  49. data/assets/include/SDL2/SDL_opengles.h +1 -1
  50. data/assets/include/SDL2/SDL_opengles2.h +1 -1
  51. data/assets/include/SDL2/SDL_pixels.h +27 -18
  52. data/assets/include/SDL2/SDL_platform.h +1 -1
  53. data/assets/include/SDL2/SDL_power.h +1 -1
  54. data/assets/include/SDL2/SDL_quit.h +1 -1
  55. data/assets/include/SDL2/SDL_rect.h +29 -3
  56. data/assets/include/SDL2/SDL_render.h +230 -3
  57. data/assets/include/SDL2/SDL_revision.h +2 -2
  58. data/assets/include/SDL2/SDL_rwops.h +51 -22
  59. data/assets/include/SDL2/SDL_scancode.h +2 -2
  60. data/assets/include/SDL2/SDL_sensor.h +28 -12
  61. data/assets/include/SDL2/SDL_shape.h +1 -1
  62. data/assets/include/SDL2/SDL_stdinc.h +44 -4
  63. data/assets/include/SDL2/SDL_surface.h +12 -2
  64. data/assets/include/SDL2/SDL_system.h +50 -4
  65. data/assets/include/SDL2/SDL_syswm.h +39 -9
  66. data/assets/include/SDL2/SDL_test.h +1 -1
  67. data/assets/include/SDL2/SDL_test_assert.h +1 -1
  68. data/assets/include/SDL2/SDL_test_common.h +32 -2
  69. data/assets/include/SDL2/SDL_test_compare.h +1 -1
  70. data/assets/include/SDL2/SDL_test_crc32.h +1 -1
  71. data/assets/include/SDL2/SDL_test_font.h +1 -1
  72. data/assets/include/SDL2/SDL_test_fuzzer.h +1 -1
  73. data/assets/include/SDL2/SDL_test_harness.h +1 -1
  74. data/assets/include/SDL2/SDL_test_images.h +1 -1
  75. data/assets/include/SDL2/SDL_test_log.h +1 -1
  76. data/assets/include/SDL2/SDL_test_md5.h +1 -1
  77. data/assets/include/SDL2/SDL_test_memory.h +3 -3
  78. data/assets/include/SDL2/SDL_test_random.h +1 -1
  79. data/assets/include/SDL2/SDL_thread.h +34 -11
  80. data/assets/include/SDL2/SDL_timer.h +1 -1
  81. data/assets/include/SDL2/SDL_touch.h +17 -1
  82. data/assets/include/SDL2/SDL_types.h +1 -1
  83. data/assets/include/SDL2/SDL_version.h +2 -2
  84. data/assets/include/SDL2/SDL_video.h +11 -5
  85. data/assets/include/SDL2/SDL_vulkan.h +9 -11
  86. data/assets/include/SDL2/begin_code.h +8 -9
  87. data/assets/include/SDL2/close_code.h +4 -1
  88. data/assets/macos/lib/libFLAC.a +0 -0
  89. data/assets/macos/lib/libSDL2.a +0 -0
  90. data/assets/macos/lib/libSDL2_image.a +0 -0
  91. data/assets/macos/lib/libSDL2_mixer.a +0 -0
  92. data/assets/macos/lib/libSDL2_ttf.a +0 -0
  93. data/assets/macos/lib/libfreetype.a +0 -0
  94. data/assets/macos/lib/libjpeg.a +0 -0
  95. data/assets/macos/lib/libmpg123.a +0 -0
  96. data/assets/macos/lib/libogg.a +0 -0
  97. data/assets/macos/lib/libpng16.a +0 -0
  98. data/assets/macos/lib/libtiff.a +0 -0
  99. data/assets/macos/lib/libvorbis.a +0 -0
  100. data/assets/macos/lib/libvorbisfile.a +0 -0
  101. data/assets/macos/lib/libwebp.a +0 -0
  102. data/assets/mingw/bin/SDL2.dll +0 -0
  103. data/assets/mingw/bin/SDL2_image.dll +0 -0
  104. data/assets/mingw/bin/libpng16-16.dll +0 -0
  105. data/assets/mingw/bin/libtiff-5.dll +0 -0
  106. data/assets/mingw/bin/libwebp-7.dll +0 -0
  107. data/assets/mingw/lib/libSDL2.a +0 -0
  108. data/assets/mingw/lib/libSDL2.dll.a +0 -0
  109. data/assets/mingw/lib/libSDL2_image.a +0 -0
  110. data/assets/mingw/lib/libSDL2_image.dll.a +0 -0
  111. data/assets/mingw/lib/libSDL2_test.a +0 -0
  112. data/assets/mingw/lib/libSDL2main.a +0 -0
  113. data/bin/ruby2d +1 -0
  114. data/{assets/linux/simple2d/src/simple2d.c → ext/ruby2d/common.c} +32 -32
  115. data/{assets/linux/simple2d/src → ext/ruby2d}/controllers.c +17 -17
  116. data/ext/ruby2d/extconf.rb +36 -58
  117. data/ext/ruby2d/font.c +35 -0
  118. data/{assets/linux/simple2d/src → ext/ruby2d}/gl.c +72 -100
  119. data/ext/ruby2d/gl2.c +86 -0
  120. data/ext/ruby2d/gl3.c +305 -0
  121. data/{assets/linux/simple2d/src → ext/ruby2d}/gles.c +22 -81
  122. data/ext/ruby2d/image.c +58 -0
  123. data/{assets/linux/simple2d/src → ext/ruby2d}/input.c +8 -8
  124. data/{assets/linux/simple2d/src → ext/ruby2d}/music.c +30 -17
  125. data/ext/ruby2d/ruby2d.c +449 -439
  126. data/ext/ruby2d/ruby2d.h +652 -0
  127. data/{assets/linux/simple2d/src → ext/ruby2d}/shapes.c +18 -18
  128. data/ext/ruby2d/sound.c +118 -0
  129. data/ext/ruby2d/text.c +22 -0
  130. data/{assets/linux/simple2d/src → ext/ruby2d}/window.c +73 -62
  131. data/lib/ruby2d/circle.rb +21 -3
  132. data/lib/ruby2d/cli/build.rb +4 -7
  133. data/lib/ruby2d/dsl.rb +16 -9
  134. data/lib/ruby2d/entity.rb +17 -0
  135. data/lib/ruby2d/font.rb +23 -3
  136. data/lib/ruby2d/image.rb +35 -7
  137. data/lib/ruby2d/line.rb +23 -1
  138. data/lib/ruby2d/music.rb +5 -0
  139. data/lib/ruby2d/pixel.rb +17 -0
  140. data/lib/ruby2d/quad.rb +21 -1
  141. data/lib/ruby2d/rectangle.rb +12 -3
  142. data/lib/ruby2d/renderable.rb +4 -20
  143. data/lib/ruby2d/sound.rb +30 -0
  144. data/lib/ruby2d/sprite.rb +57 -75
  145. data/lib/ruby2d/square.rb +10 -1
  146. data/lib/ruby2d/text.rb +55 -12
  147. data/lib/ruby2d/texture.rb +28 -0
  148. data/lib/ruby2d/tileset.rb +87 -0
  149. data/lib/ruby2d/triangle.rb +19 -1
  150. data/lib/ruby2d/version.rb +1 -1
  151. data/lib/ruby2d/vertices.rb +84 -0
  152. data/lib/ruby2d/window.rb +259 -22
  153. data/lib/ruby2d.rb +6 -1
  154. metadata +41 -26
  155. data/assets/include/simple2d.h +0 -735
  156. data/assets/linux/simple2d/Makefile +0 -257
  157. data/assets/linux/simple2d/bin/simple2d.sh +0 -1312
  158. data/assets/linux/simple2d/include/simple2d.h +0 -735
  159. data/assets/linux/simple2d/src/gl2.c +0 -146
  160. data/assets/linux/simple2d/src/gl3.c +0 -275
  161. data/assets/linux/simple2d/src/image.c +0 -138
  162. data/assets/linux/simple2d/src/sound.c +0 -56
  163. data/assets/linux/simple2d/src/sprite.c +0 -147
  164. data/assets/linux/simple2d/src/text.c +0 -129
  165. data/assets/macos/lib/libsimple2d.a +0 -0
  166. data/assets/mingw/lib/libsimple2d.a +0 -0
@@ -0,0 +1,652 @@
1
+ // ruby2d.h
2
+
3
+ #ifdef __cplusplus
4
+ extern "C" {
5
+ #endif
6
+
7
+ #include <stdbool.h>
8
+
9
+ // Set Platform Constants //////////////////////////////////////////////////////
10
+
11
+ // Apple
12
+ #ifdef __APPLE__
13
+ #ifndef __TARGETCONDITIONALS__
14
+ #include "TargetConditionals.h"
15
+ #endif
16
+ #if TARGET_OS_OSX
17
+ #define MACOS true
18
+ #elif TARGET_OS_IOS
19
+ #define IOS true
20
+ #elif TARGET_OS_TV
21
+ #define TVOS true
22
+ #endif
23
+ #endif
24
+
25
+ // Windows
26
+ #ifdef _WIN32
27
+ #define WINDOWS true
28
+ #endif
29
+
30
+ // Windows and MinGW
31
+ #ifdef __MINGW32__
32
+ #define MINGW true
33
+ #endif
34
+
35
+ // GLES
36
+ #if defined(__arm__) || IOS || TVOS
37
+ #define GLES true
38
+ #else
39
+ #define GLES false
40
+ #endif
41
+
42
+ // Includes ////////////////////////////////////////////////////////////////////
43
+
44
+ // Define to get GNU extension functions and types, like `vasprintf()` and M_PI
45
+ #ifndef _GNU_SOURCE
46
+ #define _GNU_SOURCE 1
47
+ #endif
48
+
49
+ #if WINDOWS && !MINGW
50
+ #include <io.h>
51
+ #define F_OK 0 // For testing file existence
52
+ #else
53
+ #include <unistd.h>
54
+ #endif
55
+
56
+ #if WINDOWS
57
+ #include <stdio.h>
58
+ #include <math.h>
59
+ #include <windows.h>
60
+ // For terminal colors
61
+ #ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
62
+ #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
63
+ #endif
64
+ #endif
65
+
66
+ // SDL
67
+ #if IOS || TVOS
68
+ #include "SDL2/SDL.h"
69
+ #else
70
+ #include <SDL2/SDL.h>
71
+ #endif
72
+
73
+ // If MinGW, undefine `main()` from SDL_main.c
74
+ #if MINGW
75
+ #undef main
76
+ #endif
77
+
78
+ // OpenGL
79
+ #if GLES
80
+ #if IOS || TVOS
81
+ #include "SDL2/SDL_opengles2.h"
82
+ #else
83
+ #include <SDL2/SDL_opengles2.h>
84
+ #endif
85
+ #else
86
+ #define GL_GLEXT_PROTOTYPES 1
87
+ #if WINDOWS
88
+ #include <glew.h>
89
+ #endif
90
+ #include <SDL2/SDL_opengl.h>
91
+ #endif
92
+
93
+ // SDL libraries
94
+ #if IOS || TVOS
95
+ #include "SDL2/SDL_image.h"
96
+ #include "SDL2/SDL_mixer.h"
97
+ #include "SDL2/SDL_ttf.h"
98
+ #else
99
+ #include <SDL2/SDL_image.h>
100
+ #include <SDL2/SDL_mixer.h>
101
+ #include <SDL2/SDL_ttf.h>
102
+ #endif
103
+
104
+ // Ruby 2D Definitions /////////////////////////////////////////////////////////
105
+
106
+ // Messages
107
+ #define R2D_INFO 1
108
+ #define R2D_WARN 2
109
+ #define R2D_ERROR 3
110
+
111
+ // Window attributes
112
+ #define R2D_RESIZABLE SDL_WINDOW_RESIZABLE
113
+ #define R2D_BORDERLESS SDL_WINDOW_BORDERLESS
114
+ #define R2D_FULLSCREEN SDL_WINDOW_FULLSCREEN_DESKTOP
115
+ #define R2D_HIGHDPI SDL_WINDOW_ALLOW_HIGHDPI
116
+ #define R2D_DISPLAY_WIDTH 0
117
+ #define R2D_DISPLAY_HEIGHT 0
118
+
119
+ // Viewport scaling modes
120
+ #define R2D_FIXED 1
121
+ #define R2D_EXPAND 2
122
+ #define R2D_SCALE 3
123
+ #define R2D_STRETCH 4
124
+
125
+ // Positions
126
+ #define R2D_CENTER 1
127
+ #define R2D_TOP_LEFT 2
128
+ #define R2D_TOP_RIGHT 3
129
+ #define R2D_BOTTOM_LEFT 4
130
+ #define R2D_BOTTOM_RIGHT 5
131
+
132
+ // Keyboard events
133
+ #define R2D_KEY_DOWN 1 // key is pressed
134
+ #define R2D_KEY_HELD 2 // key is held down
135
+ #define R2D_KEY_UP 3 // key is released
136
+
137
+ // Mouse events
138
+ #define R2D_MOUSE_DOWN 1 // mouse button pressed
139
+ #define R2D_MOUSE_UP 2 // mouse button released
140
+ #define R2D_MOUSE_SCROLL 3 // mouse scrolling or wheel movement
141
+ #define R2D_MOUSE_MOVE 4 // mouse movement
142
+ #define R2D_MOUSE_LEFT SDL_BUTTON_LEFT
143
+ #define R2D_MOUSE_MIDDLE SDL_BUTTON_MIDDLE
144
+ #define R2D_MOUSE_RIGHT SDL_BUTTON_RIGHT
145
+ #define R2D_MOUSE_X1 SDL_BUTTON_X1
146
+ #define R2D_MOUSE_X2 SDL_BUTTON_X2
147
+ #define R2D_MOUSE_SCROLL_NORMAL SDL_MOUSEWHEEL_NORMAL
148
+ #define R2D_MOUSE_SCROLL_INVERTED SDL_MOUSEWHEEL_FLIPPED
149
+
150
+ // Controller events
151
+ #define R2D_AXIS 1
152
+ #define R2D_BUTTON_DOWN 2
153
+ #define R2D_BUTTON_UP 3
154
+
155
+ // Controller axis labels
156
+ #define R2D_AXIS_INVALID SDL_CONTROLLER_AXIS_INVALID
157
+ #define R2D_AXIS_LEFTX SDL_CONTROLLER_AXIS_LEFTX
158
+ #define R2D_AXIS_LEFTY SDL_CONTROLLER_AXIS_LEFTY
159
+ #define R2D_AXIS_RIGHTX SDL_CONTROLLER_AXIS_RIGHTX
160
+ #define R2D_AXIS_RIGHTY SDL_CONTROLLER_AXIS_RIGHTY
161
+ #define R2D_AXIS_TRIGGERLEFT SDL_CONTROLLER_AXIS_TRIGGERLEFT
162
+ #define R2D_AXIS_TRIGGERRIGHT SDL_CONTROLLER_AXIS_TRIGGERRIGHT
163
+ #define R2D_AXIS_MAX SDL_CONTROLLER_AXIS_MAX
164
+
165
+ // Controller button labels
166
+ #define R2D_BUTTON_INVALID SDL_CONTROLLER_BUTTON_INVALID
167
+ #define R2D_BUTTON_A SDL_CONTROLLER_BUTTON_A
168
+ #define R2D_BUTTON_B SDL_CONTROLLER_BUTTON_B
169
+ #define R2D_BUTTON_X SDL_CONTROLLER_BUTTON_X
170
+ #define R2D_BUTTON_Y SDL_CONTROLLER_BUTTON_Y
171
+ #define R2D_BUTTON_BACK SDL_CONTROLLER_BUTTON_BACK
172
+ #define R2D_BUTTON_GUIDE SDL_CONTROLLER_BUTTON_GUIDE
173
+ #define R2D_BUTTON_START SDL_CONTROLLER_BUTTON_START
174
+ #define R2D_BUTTON_LEFTSTICK SDL_CONTROLLER_BUTTON_LEFTSTICK
175
+ #define R2D_BUTTON_RIGHTSTICK SDL_CONTROLLER_BUTTON_RIGHTSTICK
176
+ #define R2D_BUTTON_LEFTSHOULDER SDL_CONTROLLER_BUTTON_LEFTSHOULDER
177
+ #define R2D_BUTTON_RIGHTSHOULDER SDL_CONTROLLER_BUTTON_RIGHTSHOULDER
178
+ #define R2D_BUTTON_DPAD_UP SDL_CONTROLLER_BUTTON_DPAD_UP
179
+ #define R2D_BUTTON_DPAD_DOWN SDL_CONTROLLER_BUTTON_DPAD_DOWN
180
+ #define R2D_BUTTON_DPAD_LEFT SDL_CONTROLLER_BUTTON_DPAD_LEFT
181
+ #define R2D_BUTTON_DPAD_RIGHT SDL_CONTROLLER_BUTTON_DPAD_RIGHT
182
+ #define R2D_BUTTON_MAX SDL_CONTROLLER_BUTTON_MAX
183
+
184
+ // Internal Shared Data ////////////////////////////////////////////////////////
185
+
186
+ extern bool R2D_diagnostics; // flag for whether to print diagnostics with R2D_Log
187
+
188
+ // Type Definitions ////////////////////////////////////////////////////////////
189
+
190
+ // R2D_Event
191
+ typedef struct {
192
+ int which;
193
+ int type;
194
+ int button;
195
+ bool dblclick;
196
+ const char *key;
197
+ int x;
198
+ int y;
199
+ int delta_x;
200
+ int delta_y;
201
+ int direction;
202
+ int axis;
203
+ int value;
204
+ } R2D_Event;
205
+
206
+ typedef void (*R2D_Update)();
207
+ typedef void (*R2D_Render)();
208
+ typedef void (*R2D_On_Key)(R2D_Event e);
209
+ typedef void (*R2D_On_Mouse)(R2D_Event e);
210
+ typedef void (*R2D_On_Controller)(R2D_Event e);
211
+
212
+ // R2D_GL_Point, for graphics calculations
213
+ typedef struct {
214
+ GLfloat x;
215
+ GLfloat y;
216
+ } R2D_GL_Point;
217
+
218
+ // R2D_Color
219
+ typedef struct {
220
+ GLfloat r;
221
+ GLfloat g;
222
+ GLfloat b;
223
+ GLfloat a;
224
+ } R2D_Color;
225
+
226
+ // R2D_Mouse
227
+ typedef struct {
228
+ int visible;
229
+ int x;
230
+ int y;
231
+ } R2D_Mouse;
232
+
233
+ // R2D_Viewport
234
+ typedef struct {
235
+ int width;
236
+ int height;
237
+ int mode;
238
+ } R2D_Viewport;
239
+
240
+ // R2D_Window
241
+ typedef struct {
242
+ SDL_Window *sdl;
243
+ SDL_GLContext glcontext;
244
+ const GLubyte *R2D_GL_VENDOR;
245
+ const GLubyte *R2D_GL_RENDERER;
246
+ const GLubyte *R2D_GL_VERSION;
247
+ GLint R2D_GL_MAJOR_VERSION;
248
+ GLint R2D_GL_MINOR_VERSION;
249
+ const GLubyte *R2D_GL_SHADING_LANGUAGE_VERSION;
250
+ const char *title;
251
+ int width;
252
+ int height;
253
+ int orig_width;
254
+ int orig_height;
255
+ R2D_Viewport viewport;
256
+ R2D_Update update;
257
+ R2D_Render render;
258
+ int flags;
259
+ R2D_Mouse mouse;
260
+ R2D_On_Key on_key;
261
+ R2D_On_Mouse on_mouse;
262
+ R2D_On_Controller on_controller;
263
+ bool vsync;
264
+ int fps_cap;
265
+ R2D_Color background;
266
+ const char *icon;
267
+ Uint32 frames;
268
+ Uint32 elapsed_ms;
269
+ Uint32 loop_ms;
270
+ Uint32 delay_ms;
271
+ double fps;
272
+ bool close;
273
+ } R2D_Window;
274
+
275
+
276
+ // R2D_Sound
277
+ typedef struct {
278
+ const char *path;
279
+ Mix_Chunk *data;
280
+ } R2D_Sound;
281
+
282
+ // R2D_Music
283
+ typedef struct {
284
+ const char *path;
285
+ Mix_Music *data;
286
+ int length; // Length of music track
287
+ } R2D_Music;
288
+
289
+ // Ruby 2D Functions ///////////////////////////////////////////////////////////
290
+
291
+ /*
292
+ * Checks if a file exists and can be accessed
293
+ */
294
+ bool R2D_FileExists(const char *path);
295
+
296
+ /*
297
+ * Logs standard messages to the console
298
+ */
299
+ void R2D_Log(int type, const char *msg, ...);
300
+
301
+ /*
302
+ * Logs Ruby 2D errors to the console, with caller and message body
303
+ */
304
+ void R2D_Error(const char *caller, const char *msg, ...);
305
+
306
+ /*
307
+ * Enable/disable logging of diagnostics
308
+ */
309
+ void R2D_Diagnostics(bool status);
310
+
311
+ /*
312
+ * Enable terminal colors in Windows
313
+ */
314
+ void R2D_Windows_EnableTerminalColors();
315
+
316
+ /*
317
+ * Initialize Ruby 2D subsystems
318
+ */
319
+ bool R2D_Init();
320
+
321
+ /*
322
+ * Gets the primary display's dimensions
323
+ */
324
+ void R2D_GetDisplayDimensions(int *w, int *h);
325
+
326
+ /*
327
+ * Quits Ruby 2D subsystems
328
+ */
329
+ void R2D_Quit(void);
330
+
331
+ // Shapes //////////////////////////////////////////////////////////////////////
332
+
333
+ /*
334
+ * Rotate a point around a given point
335
+ * Params:
336
+ * p The point to rotate
337
+ * angle The angle in degrees
338
+ * rx The x coordinate to rotate around
339
+ * ry The y coordinate to rotate around
340
+ */
341
+ R2D_GL_Point R2D_RotatePoint(R2D_GL_Point p, GLfloat angle, GLfloat rx, GLfloat ry);
342
+
343
+ /*
344
+ * Get the point to be rotated around given a position in a rectangle
345
+ */
346
+ R2D_GL_Point R2D_GetRectRotationPoint(int x, int y, int w, int h, int position);
347
+
348
+ /*
349
+ * Draw a triangle
350
+ */
351
+ void R2D_DrawTriangle(
352
+ GLfloat x1, GLfloat y1,
353
+ GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
354
+ GLfloat x2, GLfloat y2,
355
+ GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
356
+ GLfloat x3, GLfloat y3,
357
+ GLfloat r3, GLfloat g3, GLfloat b3, GLfloat a3
358
+ );
359
+
360
+ /*
361
+ * Draw a quad, using two triangles
362
+ */
363
+ void R2D_DrawQuad(
364
+ GLfloat x1, GLfloat y1,
365
+ GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
366
+ GLfloat x2, GLfloat y2,
367
+ GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
368
+ GLfloat x3, GLfloat y3,
369
+ GLfloat r3, GLfloat g3, GLfloat b3, GLfloat a3,
370
+ GLfloat x4, GLfloat y4,
371
+ GLfloat r4, GLfloat g4, GLfloat b4, GLfloat a4
372
+ );
373
+
374
+ /*
375
+ * Draw a line from a quad
376
+ */
377
+ void R2D_DrawLine(
378
+ GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2,
379
+ GLfloat width,
380
+ GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
381
+ GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
382
+ GLfloat r3, GLfloat g3, GLfloat b3, GLfloat a3,
383
+ GLfloat r4, GLfloat g4, GLfloat b4, GLfloat a4
384
+ );
385
+
386
+ /*
387
+ * Draw a circle from triangles
388
+ */
389
+ void R2D_DrawCircle(
390
+ GLfloat x, GLfloat y, GLfloat radius, int sectors,
391
+ GLfloat r, GLfloat g, GLfloat b, GLfloat a
392
+ );
393
+
394
+ // Image ///////////////////////////////////////////////////////////////////////
395
+
396
+ /*
397
+ * Create a surface with image pixel data, given a file path
398
+ */
399
+ SDL_Surface *R2D_CreateImageSurface(const char *path);
400
+
401
+ /*
402
+ * Convert images to RGB format if they are in a different (BGR for example) format.
403
+ */
404
+ void R2D_ImageConvertToRGB(SDL_Surface *surface);
405
+
406
+ // Font ////////////////////////////////////////////////////////////////////////
407
+
408
+ /*
409
+ * Create a TTF_Font object given a path to a font and a size
410
+ */
411
+ TTF_Font *R2D_FontCreateTTFFont(const char *path, int size, const char *style);
412
+
413
+ // Text ////////////////////////////////////////////////////////////////////////
414
+
415
+ /*
416
+ * Create a SDL_Surface that contains the pixel data to render text, given a font and message
417
+ */
418
+ SDL_Surface *R2D_TextCreateSurface(TTF_Font *font, const char *message);
419
+
420
+ // Sound ///////////////////////////////////////////////////////////////////////
421
+
422
+ /*
423
+ * Create a sound, given an audio file path
424
+ */
425
+ R2D_Sound *R2D_CreateSound(const char *path);
426
+
427
+ /*
428
+ * Play the sound
429
+ */
430
+ void R2D_PlaySound(R2D_Sound *snd);
431
+
432
+ /*
433
+ * Get the sound's length
434
+ */
435
+ int R2D_GetSoundLength(R2D_Sound *snd);
436
+
437
+ /*
438
+ * Get the sound's volume
439
+ */
440
+ int R2D_GetSoundVolume(R2D_Sound *snd);
441
+
442
+ /*
443
+ * Set the sound's volume a given percentage
444
+ */
445
+ void R2D_SetSoundVolume(R2D_Sound *snd, int volume);
446
+
447
+ /*
448
+ * Get the sound mixer volume
449
+ */
450
+ int R2D_GetSoundMixVolume();
451
+
452
+ /*
453
+ * Set the sound mixer volume a given percentage
454
+ */
455
+ void R2D_SetSoundMixVolume(int volume);
456
+
457
+ /*
458
+ * Free the sound
459
+ */
460
+ void R2D_FreeSound(R2D_Sound *snd);
461
+
462
+ // Music ///////////////////////////////////////////////////////////////////////
463
+
464
+ /*
465
+ * Create the music, given an audio file path
466
+ */
467
+ R2D_Music *R2D_CreateMusic(const char *path);
468
+
469
+ /*
470
+ * Play the music
471
+ */
472
+ void R2D_PlayMusic(R2D_Music *mus, bool loop);
473
+
474
+ /*
475
+ * Pause the playing music
476
+ */
477
+ void R2D_PauseMusic();
478
+
479
+ /*
480
+ * Resume the current music
481
+ */
482
+ void R2D_ResumeMusic();
483
+
484
+ /*
485
+ * Stop the playing music; interrupts fader effects
486
+ */
487
+ void R2D_StopMusic();
488
+
489
+ /*
490
+ * Get the music volume
491
+ */
492
+ int R2D_GetMusicVolume();
493
+
494
+ /*
495
+ * Set the music volume a given percentage
496
+ */
497
+ void R2D_SetMusicVolume(int volume);
498
+
499
+ /*
500
+ * Fade out the playing music
501
+ */
502
+ void R2D_FadeOutMusic(int ms);
503
+
504
+ /*
505
+ * Get the length of the music in seconds
506
+ */
507
+ int R2D_GetMusicLength(R2D_Music *mus);
508
+
509
+ /*
510
+ * Free the music
511
+ */
512
+ void R2D_FreeMusic(R2D_Music *mus);
513
+
514
+ // Input ///////////////////////////////////////////////////////////////////////
515
+
516
+ /*
517
+ * Get the mouse coordinates relative to the viewport
518
+ */
519
+ void R2D_GetMouseOnViewport(R2D_Window *window, int wx, int wy, int *x, int *y);
520
+
521
+ /*
522
+ * Show the cursor over the window
523
+ */
524
+ void R2D_ShowCursor();
525
+
526
+ /*
527
+ * Hide the cursor over the window
528
+ */
529
+ void R2D_HideCursor();
530
+
531
+ // Controllers /////////////////////////////////////////////////////////////////
532
+
533
+ /*
534
+ * Add controller mapping from string
535
+ */
536
+ void R2D_AddControllerMapping(const char *map);
537
+
538
+ /*
539
+ * Load controller mappings from the specified file
540
+ */
541
+ void R2D_AddControllerMappingsFromFile(const char *path);
542
+
543
+ /*
544
+ * Check if joystick is a controller
545
+ */
546
+ bool R2D_IsController(SDL_JoystickID id);
547
+
548
+ /*
549
+ * Open controllers and joysticks
550
+ */
551
+ void R2D_OpenControllers();
552
+
553
+ // Window //////////////////////////////////////////////////////////////////////
554
+
555
+ /*
556
+ * Create a window
557
+ */
558
+ R2D_Window *R2D_CreateWindow(
559
+ const char *title, int width, int height, R2D_Update, R2D_Render, int flags
560
+ );
561
+
562
+ /*
563
+ * Show the window
564
+ */
565
+ int R2D_Show(R2D_Window *window);
566
+
567
+ /*
568
+ * Set the icon for the window
569
+ */
570
+ void R2D_SetIcon(R2D_Window *window, const char *icon);
571
+
572
+ /*
573
+ * Take a screenshot of the window
574
+ */
575
+ void R2D_Screenshot(R2D_Window *window, const char *path);
576
+
577
+ /*
578
+ * Close the window
579
+ */
580
+ int R2D_Close(R2D_Window *window);
581
+
582
+ /*
583
+ * Free all resources
584
+ */
585
+ int R2D_FreeWindow(R2D_Window *window);
586
+
587
+ // Ruby 2D OpenGL Functions ////////////////////////////////////////////////////
588
+
589
+ int R2D_GL_Init(R2D_Window *window);
590
+ void R2D_GL_PrintError(const char *error);
591
+ void R2D_GL_PrintContextInfo(R2D_Window *window);
592
+ void R2D_GL_StoreContextInfo(R2D_Window *window);
593
+ GLuint R2D_GL_LoadShader(GLenum type, const GLchar *shaderSrc, const char *shaderName);
594
+ int R2D_GL_CheckLinked(GLuint program, const char *name);
595
+ void R2D_GL_GetViewportScale(R2D_Window *window, int *w, int *h, double *scale);
596
+ void R2D_GL_SetViewport(R2D_Window *window);
597
+ void R2D_GL_CreateTexture(
598
+ GLuint *id, GLint format,
599
+ int w, int h,
600
+ const GLvoid *data, GLint filter);
601
+ void R2D_GL_DrawTriangle(
602
+ GLfloat x1, GLfloat y1,
603
+ GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
604
+ GLfloat x2, GLfloat y2,
605
+ GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
606
+ GLfloat x3, GLfloat y3,
607
+ GLfloat r3, GLfloat g3, GLfloat b3, GLfloat a3);
608
+ void R2D_GL_DrawTexture(GLfloat coordinates[], GLfloat texture_coordinates[], GLfloat color[], int texture_id);
609
+ void R2D_GL_FreeTexture(GLuint *id);
610
+ void R2D_GL_Clear(R2D_Color clr);
611
+ void R2D_GL_FlushBuffers();
612
+
613
+ // OpenGL & GLES Internal Functions ////////////////////////////////////////////
614
+
615
+ #if GLES
616
+ int R2D_GLES_Init();
617
+ void R2D_GLES_ApplyProjection(GLfloat orthoMatrix[16]);
618
+ void R2D_GLES_DrawTriangle(
619
+ GLfloat x1, GLfloat y1,
620
+ GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
621
+ GLfloat x2, GLfloat y2,
622
+ GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
623
+ GLfloat x3, GLfloat y3,
624
+ GLfloat r3, GLfloat g3, GLfloat b3, GLfloat a3);
625
+ void R2D_GLES_DrawTexture(GLfloat coordinates[], GLfloat texture_coordinates[], GLfloat color[], int texture_id);
626
+ #else
627
+ int R2D_GL2_Init();
628
+ int R2D_GL3_Init();
629
+ void R2D_GL2_ApplyProjection(int w, int h);
630
+ void R2D_GL3_ApplyProjection(GLfloat orthoMatrix[16]);
631
+ void R2D_GL2_DrawTriangle(
632
+ GLfloat x1, GLfloat y1,
633
+ GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
634
+ GLfloat x2, GLfloat y2,
635
+ GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
636
+ GLfloat x3, GLfloat y3,
637
+ GLfloat r3, GLfloat g3, GLfloat b3, GLfloat a3);
638
+ void R2D_GL3_DrawTriangle(
639
+ GLfloat x1, GLfloat y1,
640
+ GLfloat r1, GLfloat g1, GLfloat b1, GLfloat a1,
641
+ GLfloat x2, GLfloat y2,
642
+ GLfloat r2, GLfloat g2, GLfloat b2, GLfloat a2,
643
+ GLfloat x3, GLfloat y3,
644
+ GLfloat r3, GLfloat g3, GLfloat b3, GLfloat a3);
645
+ void R2D_GL2_DrawTexture(GLfloat coordinates[], GLfloat texture_coordinates[], GLfloat color[], int texture_id);
646
+ void R2D_GL3_DrawTexture(GLfloat coordinates[], GLfloat texture_coordinates[], GLfloat color[], int texture_id);
647
+ void R2D_GL3_FlushBuffers();
648
+ #endif
649
+
650
+ #ifdef __cplusplus
651
+ }
652
+ #endif