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.
- checksums.yaml +7 -0
- data/assets/README.md +22 -0
- data/assets/Rakefile +85 -0
- data/assets/app.icns +0 -0
- data/assets/include/SDL2/SDL.h +138 -0
- data/assets/include/SDL2/SDL_assert.h +293 -0
- data/assets/include/SDL2/SDL_atomic.h +295 -0
- data/assets/include/SDL2/SDL_audio.h +859 -0
- data/assets/include/SDL2/SDL_bits.h +121 -0
- data/assets/include/SDL2/SDL_blendmode.h +123 -0
- data/assets/include/SDL2/SDL_clipboard.h +71 -0
- data/assets/include/SDL2/SDL_config.h +55 -0
- data/assets/include/SDL2/SDL_config_android.h +182 -0
- data/assets/include/SDL2/SDL_config_iphoneos.h +207 -0
- data/assets/include/SDL2/SDL_config_macosx.h +266 -0
- data/assets/include/SDL2/SDL_config_minimal.h +85 -0
- data/assets/include/SDL2/SDL_config_os2.h +188 -0
- data/assets/include/SDL2/SDL_config_pandora.h +135 -0
- data/assets/include/SDL2/SDL_config_psp.h +165 -0
- data/assets/include/SDL2/SDL_config_windows.h +288 -0
- data/assets/include/SDL2/SDL_config_winrt.h +243 -0
- data/assets/include/SDL2/SDL_config_wiz.h +149 -0
- data/assets/include/SDL2/SDL_copying.h +20 -0
- data/assets/include/SDL2/SDL_cpuinfo.h +299 -0
- data/assets/include/SDL2/SDL_egl.h +1676 -0
- data/assets/include/SDL2/SDL_endian.h +263 -0
- data/assets/include/SDL2/SDL_error.h +112 -0
- data/assets/include/SDL2/SDL_events.h +827 -0
- data/assets/include/SDL2/SDL_filesystem.h +136 -0
- data/assets/include/SDL2/SDL_gamecontroller.h +541 -0
- data/assets/include/SDL2/SDL_gesture.h +87 -0
- data/assets/include/SDL2/SDL_haptic.h +1247 -0
- data/assets/include/SDL2/SDL_hints.h +1578 -0
- data/assets/include/SDL2/SDL_image.h +161 -0
- data/assets/include/SDL2/SDL_joystick.h +499 -0
- data/assets/include/SDL2/SDL_keyboard.h +217 -0
- data/assets/include/SDL2/SDL_keycode.h +351 -0
- data/assets/include/SDL2/SDL_loadso.h +81 -0
- data/assets/include/SDL2/SDL_locale.h +101 -0
- data/assets/include/SDL2/SDL_log.h +211 -0
- data/assets/include/SDL2/SDL_main.h +180 -0
- data/assets/include/SDL2/SDL_messagebox.h +146 -0
- data/assets/include/SDL2/SDL_metal.h +117 -0
- data/assets/include/SDL2/SDL_misc.h +75 -0
- data/assets/include/SDL2/SDL_mixer.h +651 -0
- data/assets/include/SDL2/SDL_mouse.h +302 -0
- data/assets/include/SDL2/SDL_mutex.h +251 -0
- data/assets/include/SDL2/SDL_name.h +33 -0
- data/assets/include/SDL2/SDL_opengl.h +2183 -0
- data/assets/include/SDL2/SDL_opengl_glext.h +11180 -0
- data/assets/include/SDL2/SDL_opengles.h +39 -0
- data/assets/include/SDL2/SDL_opengles2.h +52 -0
- data/assets/include/SDL2/SDL_opengles2_gl2.h +621 -0
- data/assets/include/SDL2/SDL_opengles2_gl2ext.h +2050 -0
- data/assets/include/SDL2/SDL_opengles2_gl2platform.h +30 -0
- data/assets/include/SDL2/SDL_opengles2_khrplatform.h +282 -0
- data/assets/include/SDL2/SDL_pixels.h +479 -0
- data/assets/include/SDL2/SDL_platform.h +198 -0
- data/assets/include/SDL2/SDL_power.h +75 -0
- data/assets/include/SDL2/SDL_quit.h +58 -0
- data/assets/include/SDL2/SDL_rect.h +174 -0
- data/assets/include/SDL2/SDL_render.h +1158 -0
- data/assets/include/SDL2/SDL_revision.h +2 -0
- data/assets/include/SDL2/SDL_rwops.h +283 -0
- data/assets/include/SDL2/SDL_scancode.h +413 -0
- data/assets/include/SDL2/SDL_sensor.h +267 -0
- data/assets/include/SDL2/SDL_shape.h +144 -0
- data/assets/include/SDL2/SDL_stdinc.h +647 -0
- data/assets/include/SDL2/SDL_surface.h +563 -0
- data/assets/include/SDL2/SDL_system.h +325 -0
- data/assets/include/SDL2/SDL_syswm.h +354 -0
- data/assets/include/SDL2/SDL_test.h +69 -0
- data/assets/include/SDL2/SDL_test_assert.h +105 -0
- data/assets/include/SDL2/SDL_test_common.h +218 -0
- data/assets/include/SDL2/SDL_test_compare.h +69 -0
- data/assets/include/SDL2/SDL_test_crc32.h +124 -0
- data/assets/include/SDL2/SDL_test_font.h +81 -0
- data/assets/include/SDL2/SDL_test_fuzzer.h +384 -0
- data/assets/include/SDL2/SDL_test_harness.h +134 -0
- data/assets/include/SDL2/SDL_test_images.h +78 -0
- data/assets/include/SDL2/SDL_test_log.h +67 -0
- data/assets/include/SDL2/SDL_test_md5.h +129 -0
- data/assets/include/SDL2/SDL_test_memory.h +63 -0
- data/assets/include/SDL2/SDL_test_random.h +115 -0
- data/assets/include/SDL2/SDL_thread.h +366 -0
- data/assets/include/SDL2/SDL_timer.h +115 -0
- data/assets/include/SDL2/SDL_touch.h +102 -0
- data/assets/include/SDL2/SDL_ttf.h +294 -0
- data/assets/include/SDL2/SDL_types.h +29 -0
- data/assets/include/SDL2/SDL_version.h +162 -0
- data/assets/include/SDL2/SDL_video.h +1282 -0
- data/assets/include/SDL2/SDL_vulkan.h +276 -0
- data/assets/include/SDL2/begin_code.h +166 -0
- data/assets/include/SDL2/close_code.h +40 -0
- data/assets/include/glew.h +23686 -0
- data/assets/ios/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
- data/assets/ios/Assets.xcassets/Contents.json +6 -0
- data/assets/ios/Base.lproj/LaunchScreen.storyboard +27 -0
- data/assets/ios/Info.plist +43 -0
- data/assets/ios/MRuby.framework/Headers/mrbconf.h +143 -0
- data/assets/ios/MRuby.framework/Headers/mruby/array.h +280 -0
- data/assets/ios/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
- data/assets/ios/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
- data/assets/ios/MRuby.framework/Headers/mruby/boxing_word.h +144 -0
- data/assets/ios/MRuby.framework/Headers/mruby/class.h +97 -0
- data/assets/ios/MRuby.framework/Headers/mruby/common.h +77 -0
- data/assets/ios/MRuby.framework/Headers/mruby/compile.h +195 -0
- data/assets/ios/MRuby.framework/Headers/mruby/data.h +75 -0
- data/assets/ios/MRuby.framework/Headers/mruby/debug.h +67 -0
- data/assets/ios/MRuby.framework/Headers/mruby/dump.h +196 -0
- data/assets/ios/MRuby.framework/Headers/mruby/error.h +75 -0
- data/assets/ios/MRuby.framework/Headers/mruby/gc.h +91 -0
- data/assets/ios/MRuby.framework/Headers/mruby/hash.h +215 -0
- data/assets/ios/MRuby.framework/Headers/mruby/irep.h +75 -0
- data/assets/ios/MRuby.framework/Headers/mruby/istruct.h +47 -0
- data/assets/ios/MRuby.framework/Headers/mruby/khash.h +274 -0
- data/assets/ios/MRuby.framework/Headers/mruby/numeric.h +161 -0
- data/assets/ios/MRuby.framework/Headers/mruby/object.h +44 -0
- data/assets/ios/MRuby.framework/Headers/mruby/opcode.h +69 -0
- data/assets/ios/MRuby.framework/Headers/mruby/ops.h +117 -0
- data/assets/ios/MRuby.framework/Headers/mruby/proc.h +131 -0
- data/assets/ios/MRuby.framework/Headers/mruby/range.h +49 -0
- data/assets/ios/MRuby.framework/Headers/mruby/re.h +16 -0
- data/assets/ios/MRuby.framework/Headers/mruby/string.h +444 -0
- data/assets/ios/MRuby.framework/Headers/mruby/throw.h +55 -0
- data/assets/ios/MRuby.framework/Headers/mruby/value.h +309 -0
- data/assets/ios/MRuby.framework/Headers/mruby/variable.h +136 -0
- data/assets/ios/MRuby.framework/Headers/mruby/version.h +110 -0
- data/assets/ios/MRuby.framework/Headers/mruby.h +1282 -0
- data/assets/ios/MRuby.framework/Info.plist +20 -0
- data/assets/ios/MRuby.framework/MRuby +0 -0
- data/assets/ios/MyApp.xcodeproj/project.pbxproj +368 -0
- data/assets/ios/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- data/assets/ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
- data/assets/ios/main.c +1 -0
- data/assets/macos/lib/libFLAC.a +0 -0
- data/assets/macos/lib/libSDL2.a +0 -0
- data/assets/macos/lib/libSDL2_image.a +0 -0
- data/assets/macos/lib/libSDL2_mixer.a +0 -0
- data/assets/macos/lib/libSDL2_ttf.a +0 -0
- data/assets/macos/lib/libfreetype.a +0 -0
- data/assets/macos/lib/libjpeg.a +0 -0
- data/assets/macos/lib/libmodplug.a +0 -0
- data/assets/macos/lib/libmpg123.a +0 -0
- data/assets/macos/lib/libogg.a +0 -0
- data/assets/macos/lib/libpng16.a +0 -0
- data/assets/macos/lib/libtiff.a +0 -0
- data/assets/macos/lib/libvorbis.a +0 -0
- data/assets/macos/lib/libvorbisfile.a +0 -0
- data/assets/macos/lib/libwebp.a +0 -0
- data/assets/mingw/bin/SDL2.dll +0 -0
- data/assets/mingw/bin/SDL2_image.dll +0 -0
- data/assets/mingw/bin/SDL2_mixer.dll +0 -0
- data/assets/mingw/bin/SDL2_ttf.dll +0 -0
- data/assets/mingw/bin/glew32.dll +0 -0
- data/assets/mingw/bin/libFLAC-8.dll +0 -0
- data/assets/mingw/bin/libfreetype-6.dll +0 -0
- data/assets/mingw/bin/libjpeg-9.dll +0 -0
- data/assets/mingw/bin/libmodplug-1.dll +0 -0
- data/assets/mingw/bin/libmpg123-0.dll +0 -0
- data/assets/mingw/bin/libogg-0.dll +0 -0
- data/assets/mingw/bin/libopus-0.dll +0 -0
- data/assets/mingw/bin/libopusfile-0.dll +0 -0
- data/assets/mingw/bin/libpng16-16.dll +0 -0
- data/assets/mingw/bin/libtiff-5.dll +0 -0
- data/assets/mingw/bin/libvorbis-0.dll +0 -0
- data/assets/mingw/bin/libvorbisfile-3.dll +0 -0
- data/assets/mingw/bin/libwebp-7.dll +0 -0
- data/assets/mingw/bin/libwinpthread-1.dll +0 -0
- data/assets/mingw/bin/zlib1.dll +0 -0
- data/assets/mingw/lib/libSDL2.a +0 -0
- data/assets/mingw/lib/libSDL2.dll.a +0 -0
- data/assets/mingw/lib/libSDL2_image.a +0 -0
- data/assets/mingw/lib/libSDL2_image.dll.a +0 -0
- data/assets/mingw/lib/libSDL2_mixer.a +0 -0
- data/assets/mingw/lib/libSDL2_mixer.dll.a +0 -0
- data/assets/mingw/lib/libSDL2_test.a +0 -0
- data/assets/mingw/lib/libSDL2_ttf.a +0 -0
- data/assets/mingw/lib/libSDL2_ttf.dll.a +0 -0
- data/assets/mingw/lib/libSDL2main.a +0 -0
- data/assets/mingw/lib/libglew32.a +0 -0
- data/assets/mingw/lib/libglew32.dll.a +0 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +16 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Contents.json +17 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +16 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +16 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json +16 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Contents.json +17 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json +16 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json +16 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json +32 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json +16 -0
- data/assets/tvos/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json +16 -0
- data/assets/tvos/Assets.xcassets/Contents.json +6 -0
- data/assets/tvos/Assets.xcassets/LaunchImage.launchimage/Contents.json +22 -0
- data/assets/tvos/Info.plist +30 -0
- data/assets/tvos/MRuby.framework/Headers/mrbconf.h +143 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/array.h +280 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/boxing_nan.h +102 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/boxing_no.h +56 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/boxing_word.h +144 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/class.h +97 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/common.h +77 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/compile.h +195 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/data.h +75 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/debug.h +67 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/dump.h +196 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/error.h +75 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/gc.h +91 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/hash.h +215 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/irep.h +75 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/istruct.h +47 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/khash.h +274 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/numeric.h +161 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/object.h +44 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/opcode.h +69 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/ops.h +117 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/proc.h +131 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/range.h +49 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/re.h +16 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/string.h +444 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/throw.h +55 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/value.h +309 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/variable.h +136 -0
- data/assets/tvos/MRuby.framework/Headers/mruby/version.h +110 -0
- data/assets/tvos/MRuby.framework/Headers/mruby.h +1282 -0
- data/assets/tvos/MRuby.framework/Info.plist +20 -0
- data/assets/tvos/MRuby.framework/MRuby +0 -0
- data/assets/tvos/MyApp.xcodeproj/project.pbxproj +350 -0
- data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- data/assets/tvos/MyApp.xcodeproj/project.xcworkspace/xcshareddata/MyApp.xcscmblueprint +30 -0
- data/assets/tvos/main.c +1 -0
- data/bin/ruby2d +142 -0
- data/ext/ruby2d/common.c +185 -0
- data/ext/ruby2d/controllers.c +110 -0
- data/ext/ruby2d/extconf.rb +147 -0
- data/ext/ruby2d/font.c +35 -0
- data/ext/ruby2d/gl.c +398 -0
- data/ext/ruby2d/gl2.c +86 -0
- data/ext/ruby2d/gl3.c +305 -0
- data/ext/ruby2d/gles.c +249 -0
- data/ext/ruby2d/image.c +58 -0
- data/ext/ruby2d/input.c +48 -0
- data/ext/ruby2d/music.c +127 -0
- data/ext/ruby2d/ruby2d.c +1374 -0
- data/ext/ruby2d/ruby2d.h +656 -0
- data/ext/ruby2d/shapes.c +154 -0
- data/ext/ruby2d/sound.c +118 -0
- data/ext/ruby2d/text.c +22 -0
- data/ext/ruby2d/window.c +414 -0
- data/lib/ruby2d/circle.rb +43 -0
- data/lib/ruby2d/cli/build.rb +237 -0
- data/lib/ruby2d/cli/colorize.rb +10 -0
- data/lib/ruby2d/cli/console.rb +65 -0
- data/lib/ruby2d/cli/enable_console.rb +5 -0
- data/lib/ruby2d/cli/launch.rb +50 -0
- data/lib/ruby2d/color.rb +136 -0
- data/lib/ruby2d/dsl.rb +46 -0
- data/lib/ruby2d/entity.rb +17 -0
- data/lib/ruby2d/exceptions.rb +6 -0
- data/lib/ruby2d/font.rb +96 -0
- data/lib/ruby2d/image.rb +58 -0
- data/lib/ruby2d/line.rb +89 -0
- data/lib/ruby2d/music.rb +67 -0
- data/lib/ruby2d/pixel.rb +17 -0
- data/lib/ruby2d/quad.rb +96 -0
- data/lib/ruby2d/rectangle.rb +65 -0
- data/lib/ruby2d/renderable.rb +40 -0
- data/lib/ruby2d/ruby2d.so +0 -0
- data/lib/ruby2d/sound.rb +55 -0
- data/lib/ruby2d/sprite.rb +232 -0
- data/lib/ruby2d/square.rb +37 -0
- data/lib/ruby2d/text.rb +76 -0
- data/lib/ruby2d/texture.rb +28 -0
- data/lib/ruby2d/tileset.rb +87 -0
- data/lib/ruby2d/triangle.rb +82 -0
- data/lib/ruby2d/version.rb +5 -0
- data/lib/ruby2d/vertices.rb +84 -0
- data/lib/ruby2d/window.rb +673 -0
- data/lib/ruby2d.rb +69 -0
- 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
|
data/ext/ruby2d/image.c
ADDED
|
@@ -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
|
+
}
|
data/ext/ruby2d/input.c
ADDED
|
@@ -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
|
+
}
|