ruby2d 0.9.3 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
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