ray 0.1.0.pre1 → 0.1.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.
- data/README.md +235 -32
- data/Rakefile +20 -49
- data/ext/audio.c +68 -0
- data/ext/audio_source.c +197 -0
- data/ext/buffer_renderer.c +130 -0
- data/ext/color.c +179 -0
- data/ext/drawable.c +446 -0
- data/ext/event.c +337 -0
- data/ext/extconf.rb +80 -6
- data/ext/font.c +97 -0
- data/ext/gl.c +114 -0
- data/ext/gl_buffer.c +224 -0
- data/ext/gl_index_buffer.c +202 -0
- data/ext/gl_int_array.c +139 -0
- data/ext/gl_vertex.c +157 -0
- data/ext/image.c +263 -0
- data/ext/image_target.c +84 -0
- data/ext/input.c +53 -0
- data/ext/matrix.c +374 -0
- data/ext/music.c +113 -0
- data/ext/polygon.c +426 -0
- data/ext/ray.c +59 -0
- data/ext/ray.h +168 -0
- data/ext/rect.c +255 -0
- data/ext/say.h +31 -0
- data/ext/say_all.h +77 -0
- data/ext/say_arial.h +14689 -0
- data/ext/say_array.c +124 -0
- data/ext/say_array.h +34 -0
- data/ext/say_audio.c +64 -0
- data/ext/say_audio.h +170 -0
- data/ext/say_audio_context.c +40 -0
- data/ext/say_audio_source.c +96 -0
- data/ext/say_basic_type.c +17 -0
- data/ext/say_basic_type.h +47 -0
- data/ext/say_buffer.c +277 -0
- data/ext/say_buffer.h +37 -0
- data/ext/say_buffer_renderer.c +121 -0
- data/ext/say_buffer_renderer.h +33 -0
- data/ext/say_buffer_slice.c +247 -0
- data/ext/say_buffer_slice.h +29 -0
- data/ext/say_clean_up.c +14 -0
- data/ext/say_context.c +163 -0
- data/ext/say_context.h +26 -0
- data/ext/say_drawable.c +350 -0
- data/ext/say_drawable.h +100 -0
- data/ext/say_error.c +27 -0
- data/ext/say_event.h +213 -0
- data/ext/say_font.c +335 -0
- data/ext/say_font.h +51 -0
- data/ext/say_image.c +283 -0
- data/ext/say_image.h +52 -0
- data/ext/say_image_target.c +134 -0
- data/ext/say_image_target.h +25 -0
- data/ext/say_imp.h +70 -0
- data/ext/say_index_buffer.c +90 -0
- data/ext/say_index_buffer.h +29 -0
- data/ext/say_index_buffer_slice.c +227 -0
- data/ext/say_index_buffer_slice.h +28 -0
- data/ext/say_input.c +35 -0
- data/ext/say_matrix.c +314 -0
- data/ext/say_matrix.h +55 -0
- data/ext/say_music.c +225 -0
- data/ext/say_osx.h +62 -0
- data/ext/say_osx_context.h +98 -0
- data/ext/say_osx_window.h +766 -0
- data/ext/say_polygon.c +358 -0
- data/ext/say_polygon.h +62 -0
- data/ext/say_renderer.c +42 -0
- data/ext/say_renderer.h +22 -0
- data/ext/say_shader.c +375 -0
- data/ext/say_shader.h +91 -0
- data/ext/say_sound.c +67 -0
- data/ext/say_sound_buffer.c +96 -0
- data/ext/say_sprite.c +273 -0
- data/ext/say_sprite.h +53 -0
- data/ext/say_string.c +9 -0
- data/ext/say_table.c +86 -0
- data/ext/say_table.h +24 -0
- data/ext/say_target.c +264 -0
- data/ext/say_target.h +67 -0
- data/ext/say_text.c +441 -0
- data/ext/say_text.h +56 -0
- data/ext/say_thread.c +46 -0
- data/ext/say_thread.h +39 -0
- data/ext/say_thread_variable.c +44 -0
- data/ext/say_utf.c +62 -0
- data/ext/say_vertex_type.c +113 -0
- data/ext/say_vertex_type.h +40 -0
- data/ext/say_vfile.c +57 -0
- data/ext/say_view.c +150 -0
- data/ext/say_view.h +44 -0
- data/ext/say_win.h +24 -0
- data/ext/say_win_context.h +91 -0
- data/ext/say_win_window.h +670 -0
- data/ext/say_window.c +155 -0
- data/ext/say_window.h +43 -0
- data/ext/say_x11.h +41 -0
- data/ext/say_x11_context.h +96 -0
- data/ext/say_x11_window.h +818 -0
- data/ext/shader.c +302 -0
- data/ext/sound.c +118 -0
- data/ext/sound_buffer.c +75 -0
- data/ext/sprite.c +241 -0
- data/ext/stb_image.h +4971 -0
- data/ext/stb_image_write.h +511 -0
- data/ext/target.c +184 -0
- data/ext/text.c +162 -0
- data/ext/utils.c +10 -0
- data/ext/vector.c +261 -0
- data/ext/vendor/freetype/bin/freetype6.dll +0 -0
- data/ext/vendor/freetype/bin/zlib1.dll +0 -0
- data/ext/vendor/freetype/include/freetype2/freetype/config/ftconfig.h +350 -0
- data/ext/vendor/freetype/include/freetype2/freetype/config/ftheader.h +729 -0
- data/ext/vendor/freetype/include/freetype2/freetype/config/ftmodule.h +22 -0
- data/ext/vendor/freetype/include/freetype2/freetype/config/ftoption.h +695 -0
- data/ext/vendor/freetype/include/freetype2/freetype/config/ftstdlib.h +180 -0
- data/ext/vendor/freetype/include/freetype2/freetype/freetype.h +3434 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftbbox.h +94 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftbdf.h +200 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftbitmap.h +206 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftcache.h +1110 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftchapters.h +100 -0
- data/ext/vendor/freetype/include/freetype2/freetype/fterrdef.h +239 -0
- data/ext/vendor/freetype/include/freetype2/freetype/fterrors.h +206 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftgasp.h +113 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftglyph.h +575 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftgxval.h +358 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftgzip.h +102 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftimage.h +1237 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftincrem.h +331 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftlcdfil.h +166 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftlist.h +273 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftlzw.h +99 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftmac.h +272 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftmm.h +378 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftmodapi.h +406 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftmoderr.h +155 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftotval.h +198 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftoutln.h +526 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftpfr.h +172 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftrender.h +229 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftsizes.h +159 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftsnames.h +170 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftstroke.h +716 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftsynth.h +73 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftsystem.h +346 -0
- data/ext/vendor/freetype/include/freetype2/freetype/fttrigon.h +350 -0
- data/ext/vendor/freetype/include/freetype2/freetype/fttypes.h +583 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftwinfnt.h +263 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ftxf86.h +80 -0
- data/ext/vendor/freetype/include/freetype2/freetype/t1tables.h +450 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ttnameid.h +1132 -0
- data/ext/vendor/freetype/include/freetype2/freetype/tttables.h +756 -0
- data/ext/vendor/freetype/include/freetype2/freetype/tttags.h +99 -0
- data/ext/vendor/freetype/include/freetype2/freetype/ttunpat.h +59 -0
- data/ext/vendor/freetype/include/ft2build.h +61 -0
- data/ext/vendor/freetype/lib/freetype-bcc.lib +0 -0
- data/ext/vendor/freetype/lib/freetype6.def +249 -0
- data/ext/vendor/freetype/lib/libfreetype.dll.a +0 -0
- data/ext/vendor/freetype/lib/tmp.freetype.lib +0 -0
- data/ext/vendor/glew/LICENSE.txt +73 -0
- data/ext/vendor/glew/README.txt +18 -0
- data/ext/vendor/glew/include/GL/glew.h +15507 -0
- data/ext/vendor/glew/include/GL/glxew.h +1568 -0
- data/ext/vendor/glew/include/GL/wglew.h +1361 -0
- data/ext/vendor/glew/lib/glew32.dll +0 -0
- data/ext/vendor/glew/lib/glew32mx.dll +0 -0
- data/ext/vendor/glew/lib/libglew32.a +0 -0
- data/ext/vendor/glew/lib/libglew32.dll.a +0 -0
- data/ext/vendor/glew/lib/libglew32mx.a +0 -0
- data/ext/vendor/glew/lib/libglew32mx.dll.a +0 -0
- data/ext/vendor/openal/COPYING +484 -0
- data/ext/vendor/openal/Win32/soft_oal.dll +0 -0
- data/ext/vendor/openal/include/AL/al.h +724 -0
- data/ext/vendor/openal/include/AL/alc.h +277 -0
- data/ext/vendor/openal/include/AL/alext.h +165 -0
- data/ext/vendor/openal/include/AL/efx-creative.h +3 -0
- data/ext/vendor/openal/include/AL/efx.h +758 -0
- data/ext/vendor/openal/lib/libOpenAL32.dll.a +0 -0
- data/ext/vendor/sndfile/bin/libsndfile-1.dll +0 -0
- data/ext/vendor/sndfile/include/sndfile.h +666 -0
- data/ext/vendor/sndfile/include/sndfile.hh +422 -0
- data/ext/vendor/sndfile/lib/libsndfile-1.def +41 -0
- data/ext/vendor/sndfile/lib/libsndfile-1.lib +0 -0
- data/ext/vertex.c +96 -0
- data/ext/view.c +131 -0
- data/ext/window.c +183 -0
- data/lib/ray/animation.rb +248 -0
- data/lib/ray/animation/block_animation.rb +36 -0
- data/lib/ray/animation/circular_motion.rb +57 -0
- data/lib/ray/animation/color_variation.rb +102 -0
- data/lib/ray/animation/combination.rb +71 -0
- data/lib/ray/animation/float_variation.rb +76 -0
- data/lib/ray/animation/sequence.rb +65 -0
- data/lib/ray/animation/sprite_animation.rb +68 -0
- data/lib/ray/animation/vector_variation.rb +111 -0
- data/lib/ray/animation_list.rb +50 -0
- data/lib/ray/audio.rb +4 -7
- data/lib/ray/buffer_renderer.rb +9 -0
- data/lib/ray/color.rb +41 -6
- data/lib/ray/drawable.rb +34 -9
- data/lib/ray/dsl.rb +6 -0
- data/lib/ray/dsl/event.rb +1 -1
- data/lib/ray/dsl/event_listener.rb +14 -10
- data/lib/ray/dsl/event_raiser.rb +5 -2
- data/lib/ray/dsl/event_runner.rb +4 -10
- data/lib/ray/dsl/event_translator.rb +67 -99
- data/lib/ray/dsl/handler.rb +1 -1
- data/lib/ray/dsl/matcher.rb +40 -27
- data/lib/ray/event.rb +22 -0
- data/lib/ray/font.rb +0 -42
- data/lib/ray/font_set.rb +3 -7
- data/lib/ray/game.rb +33 -73
- data/lib/ray/gl/int_array.rb +24 -0
- data/lib/ray/gl/vertex.rb +106 -0
- data/lib/ray/helper.rb +25 -11
- data/lib/ray/image.rb +9 -154
- data/lib/ray/image_set.rb +3 -8
- data/lib/ray/image_target.rb +12 -0
- data/lib/ray/matrix.rb +90 -0
- data/lib/ray/music.rb +12 -0
- data/lib/ray/polygon.rb +77 -0
- data/lib/ray/ray.rb +45 -13
- data/lib/ray/rect.rb +14 -3
- data/lib/ray/resource_set.rb +18 -35
- data/lib/ray/scene.rb +43 -81
- data/lib/ray/scene_list.rb +12 -5
- data/lib/ray/shader.rb +82 -0
- data/lib/ray/sound.rb +18 -0
- data/lib/ray/sound_buffer.rb +6 -0
- data/lib/ray/sound_buffer_set.rb +32 -0
- data/lib/ray/sprite.rb +111 -97
- data/lib/ray/target.rb +18 -0
- data/lib/ray/text.rb +80 -58
- data/lib/ray/text_helper.rb +21 -27
- data/lib/ray/turtle.rb +49 -38
- data/lib/ray/vector.rb +76 -1
- data/lib/ray/vertex.rb +24 -0
- data/lib/ray/view.rb +47 -0
- data/lib/ray/window.rb +23 -0
- data/samples/_media/Beep.wav +0 -0
- data/samples/_media/CptnRuby Gem.png +0 -0
- data/samples/_media/CptnRuby Map.txt +25 -0
- data/samples/_media/CptnRuby Tileset.png +0 -0
- data/samples/_media/CptnRuby.png +0 -0
- data/samples/_media/Space.png +0 -0
- data/samples/_media/Star.png +0 -0
- data/samples/_media/Starfighter.png +0 -0
- data/samples/animation/chain.rb +33 -0
- data/samples/animation/circle.rb +38 -0
- data/samples/animation/color.rb +18 -0
- data/samples/animation/rotation.rb +17 -0
- data/samples/animation/sequence.rb +33 -0
- data/samples/animation/shader.rb +65 -0
- data/samples/animation/sprite_motion.rb +103 -0
- data/samples/animation/translation.rb +23 -0
- data/samples/audio/spacial.rb +25 -11
- data/samples/buffer/buffer.rb +28 -0
- data/samples/buffer/index_buffer.rb +36 -0
- data/samples/buffer/renderer.rb +27 -0
- data/samples/cptn_ruby/cptn_ruby.rb +279 -0
- data/samples/hello_world/hello.rb +2 -2
- data/samples/hello_world/hello_dsl.rb +3 -3
- data/samples/hello_world/text.rb +2 -2
- data/samples/opengl/cube.rb +124 -0
- data/samples/opengl/image.rb +36 -16
- data/samples/opengl/obj_loader.rb +99 -0
- data/samples/opengl/opengl.rb +24 -18
- data/samples/opengl/shader.rb +36 -26
- data/samples/pong/pong.rb +41 -39
- data/samples/{run_scene.rb → scenes/run_scene.rb} +21 -7
- data/samples/shaders/geometry.rb +98 -0
- data/samples/shaders/scene.rb +19 -12
- data/samples/shaders/shaders.rb +34 -17
- data/samples/shaders/shape.rb +12 -7
- data/samples/sokoban/level_1 +11 -7
- data/samples/sokoban/sokoban.rb +36 -63
- data/samples/starfighter/starfighter.rb +159 -0
- data/samples/test/actual_scene.rb +3 -3
- data/samples/test/scene_riot.rb +4 -4
- data/samples/test/scene_spec.rb +3 -3
- data/samples/test/scene_test_unit.rb +1 -1
- data/samples/turtle/byzantium.rb +10 -5
- data/samples/turtle/hilbert.rb +16 -11
- data/samples/turtle/koch.rb +16 -11
- data/samples/turtle/mandala.rb +43 -38
- data/samples/turtle/tree.rb +13 -8
- data/samples/view/resize.rb +26 -0
- data/samples/view/view.rb +35 -0
- data/samples/window/all_events.rb +44 -0
- data/samples/window/change_title.rb +16 -0
- data/samples/window/fullscreen.rb +18 -0
- data/samples/window/get_pixel.rb +29 -0
- data/samples/window/icon.rb +88 -0
- data/samples/window/input.rb +27 -0
- data/samples/window/no_border.rb +16 -0
- data/samples/window/resize.rb +24 -0
- data/test/animation/color_variation_test.rb +64 -0
- data/test/animation/combination_test.rb +35 -0
- data/test/animation/float_variation_test.rb +75 -0
- data/test/animation/vector_variation_test.rb +123 -0
- data/test/animation_list_test.rb +122 -0
- data/test/animation_test.rb +83 -0
- data/test/audio_test.rb +88 -33
- data/test/buffer_renderer_test.rb +38 -0
- data/test/color_test.rb +31 -22
- data/test/drawable_test.rb +207 -7
- data/test/dsl_test.rb +25 -7
- data/test/font_test.rb +6 -40
- data/test/game_test.rb +76 -0
- data/test/gl_buffer_test.rb +26 -0
- data/test/gl_index_buffer_test.rb +17 -0
- data/test/gl_vertex_test.rb +117 -0
- data/test/helpers.rb +45 -5
- data/test/image_target_test.rb +19 -0
- data/test/image_test.rb +73 -53
- data/test/int_array_test.rb +64 -0
- data/test/matrix_test.rb +134 -0
- data/test/polygon_test.rb +126 -0
- data/test/rect_test.rb +6 -8
- data/test/res/frag.c +14 -0
- data/test/res/frag3d.c +10 -0
- data/test/res/frag_gray.c +17 -0
- data/test/res/frag_light3d.c +20 -0
- data/test/res/light3d.c +20 -0
- data/test/res/sprite.png +0 -0
- data/test/res/teapot.obj +12831 -0
- data/test/res/vert.c +17 -0
- data/test/res/vertex3d.c +14 -0
- data/test/resource_set_test.rb +8 -45
- data/test/run_all.rb +1 -1
- data/test/scene_list_test.rb +79 -0
- data/test/scene_test.rb +168 -0
- data/test/shader_test.rb +58 -0
- data/test/sprite_test.rb +46 -41
- data/test/target_test.rb +34 -0
- data/test/text_test.rb +20 -31
- data/test/turtle_test.rb +35 -20
- data/test/vector_test.rb +61 -19
- data/test/vertex_test.rb +43 -0
- data/test/view_test.rb +61 -0
- metadata +347 -126
- data/.yardopts +0 -4
- data/VERSION +0 -1
- data/ext/audio.cpp +0 -723
- data/ext/color.cpp +0 -159
- data/ext/drawable.cpp +0 -91
- data/ext/event.cpp +0 -460
- data/ext/font.cpp +0 -190
- data/ext/image.cpp +0 -733
- data/ext/input.cpp +0 -74
- data/ext/ray.cpp +0 -168
- data/ext/ray.hpp +0 -356
- data/ext/rect.cpp +0 -245
- data/ext/shader.cpp +0 -169
- data/ext/shape.cpp +0 -409
- data/ext/sprite.cpp +0 -306
- data/ext/text.cpp +0 -181
- data/ext/vector.cpp +0 -215
- data/guide.md +0 -619
- data/lib/ray/input.rb +0 -10
- data/lib/ray/music_set.rb +0 -37
- data/lib/ray/rmagick.rb +0 -41
- data/lib/ray/shape.rb +0 -132
- data/lib/ray/sound_set.rb +0 -37
- data/samples/opengl/binding.rb +0 -38
- data/test/ray_test.rb +0 -25
- data/test/shape_test.rb +0 -101
- data/yard_ext.rb +0 -63
data/ext/shader.c
ADDED
@@ -0,0 +1,302 @@
|
|
1
|
+
#include "ray.h"
|
2
|
+
|
3
|
+
VALUE ray_cShader = Qnil;
|
4
|
+
|
5
|
+
VALUE ray_shader2rb(say_shader *shader, VALUE owner) {
|
6
|
+
VALUE obj = Data_Wrap_Struct(rb_path2class("Ray::Shader"), NULL, NULL,
|
7
|
+
shader);
|
8
|
+
rb_iv_set(obj, "@owner", owner);
|
9
|
+
rb_iv_set(obj, "@locations", rb_hash_new());
|
10
|
+
rb_iv_set(obj, "@images", rb_hash_new());
|
11
|
+
return obj;
|
12
|
+
}
|
13
|
+
|
14
|
+
say_shader *ray_rb2shader(VALUE obj) {
|
15
|
+
if (!RAY_IS_A(obj, rb_path2class("Ray::Shader"))) {
|
16
|
+
rb_raise(rb_eTypeError, "Can't convert %s into Ray::Shader",
|
17
|
+
RAY_OBJ_CLASSNAME(obj));
|
18
|
+
}
|
19
|
+
|
20
|
+
say_shader *shader = NULL;
|
21
|
+
Data_Get_Struct(obj, say_shader, shader);
|
22
|
+
|
23
|
+
return shader;
|
24
|
+
}
|
25
|
+
|
26
|
+
static
|
27
|
+
VALUE ray_shader_alloc(VALUE self) {
|
28
|
+
say_shader *obj = say_shader_create();
|
29
|
+
return Data_Wrap_Struct(self, NULL, say_shader_free, obj);
|
30
|
+
}
|
31
|
+
|
32
|
+
/*
|
33
|
+
Make Ray's shaders forcefully use old (deprecated) style shaders.
|
34
|
+
This should be called before the shaders get created (in the case of targets,
|
35
|
+
this means before the creations of those targets)
|
36
|
+
*/
|
37
|
+
static
|
38
|
+
VALUE ray_shader_use_old(VALUE self) {
|
39
|
+
say_shader_force_old();
|
40
|
+
return Qnil;
|
41
|
+
}
|
42
|
+
|
43
|
+
/*
|
44
|
+
* @return [true, falsue] True if geometry shaders are available
|
45
|
+
*/
|
46
|
+
static
|
47
|
+
VALUE ray_shader_geometry_available(VALUE self) {
|
48
|
+
return say_shader_is_geometry_available() ? Qtrue : Qfalse;
|
49
|
+
}
|
50
|
+
|
51
|
+
/*
|
52
|
+
@overload compile_frag(src)
|
53
|
+
Compiles the fragment shader with a new source code.
|
54
|
+
@param [String] src Source code
|
55
|
+
*/
|
56
|
+
static
|
57
|
+
VALUE ray_shader_compile_frag(VALUE self, VALUE src) {
|
58
|
+
if (!say_shader_compile_frag(ray_rb2shader(self), StringValuePtr(src))) {
|
59
|
+
rb_raise(rb_path2class("Ray::Shader::CompileError"), "%s",
|
60
|
+
say_error_get_last());
|
61
|
+
}
|
62
|
+
return self;
|
63
|
+
}
|
64
|
+
|
65
|
+
/*
|
66
|
+
@overload compile_vertex(src)
|
67
|
+
Compiles the vertex shader with a new source code.
|
68
|
+
@param [String] src Source code
|
69
|
+
*/
|
70
|
+
static
|
71
|
+
VALUE ray_shader_compile_vertex(VALUE self, VALUE src) {
|
72
|
+
if (!say_shader_compile_vertex(ray_rb2shader(self), StringValuePtr(src))) {
|
73
|
+
rb_raise(rb_path2class("Ray::Shader::CompileError"), "%s",
|
74
|
+
say_error_get_last());
|
75
|
+
}
|
76
|
+
|
77
|
+
return self;
|
78
|
+
}
|
79
|
+
|
80
|
+
|
81
|
+
/*
|
82
|
+
* @overload compile_vertex(src)
|
83
|
+
* Compiles the geometry shader with a new source code.
|
84
|
+
* @param [String] src Source code
|
85
|
+
*/
|
86
|
+
static
|
87
|
+
VALUE ray_shader_compile_geometry(VALUE self, VALUE src) {
|
88
|
+
if (!say_shader_compile_geometry(ray_rb2shader(self), StringValuePtr(src))) {
|
89
|
+
rb_raise(rb_path2class("Ray::Shader::CompileError"), "%s",
|
90
|
+
say_error_get_last());
|
91
|
+
}
|
92
|
+
|
93
|
+
return self;
|
94
|
+
}
|
95
|
+
|
96
|
+
/*
|
97
|
+
* Detaches any geomtry shader attached to the shader.
|
98
|
+
*/
|
99
|
+
static
|
100
|
+
VALUE ray_shader_detach_geometry(VALUE self) {
|
101
|
+
say_shader_detach_geometry(ray_rb2shader(self));
|
102
|
+
return self;
|
103
|
+
}
|
104
|
+
|
105
|
+
/*
|
106
|
+
Links the shader.
|
107
|
+
This is required once you have compiled the vertex and fragment shaders.
|
108
|
+
*/
|
109
|
+
static
|
110
|
+
VALUE ray_shader_link(VALUE self) {
|
111
|
+
if (!say_shader_link(ray_rb2shader(self))) {
|
112
|
+
rb_raise(rb_path2class("Ray::Shader::LinkError"), "%s",
|
113
|
+
say_error_get_last());
|
114
|
+
}
|
115
|
+
|
116
|
+
return Qnil;
|
117
|
+
}
|
118
|
+
|
119
|
+
/*
|
120
|
+
@overload apply_vertex(klass)
|
121
|
+
Sets the vertex layout to use. It is required to link the vertex again for
|
122
|
+
this change to be applied.
|
123
|
+
|
124
|
+
@param [Class] klass Class of the vertex to use with this shader.
|
125
|
+
*/
|
126
|
+
static
|
127
|
+
VALUE ray_shader_apply_vertex(VALUE self, VALUE klass) {
|
128
|
+
say_shader *shader = ray_rb2shader(self);
|
129
|
+
|
130
|
+
if (klass == rb_path2class("Ray::Vertex"))
|
131
|
+
say_shader_apply_vertex_type(shader, 0);
|
132
|
+
else
|
133
|
+
say_shader_apply_vertex_type(shader, ray_get_vtype(klass));
|
134
|
+
|
135
|
+
return klass;
|
136
|
+
}
|
137
|
+
|
138
|
+
/*
|
139
|
+
@overload locate(name)
|
140
|
+
@param [String, Symbol] name Name of the attribute
|
141
|
+
@return [Integer, nil] Location of the attribute
|
142
|
+
*/
|
143
|
+
static
|
144
|
+
VALUE ray_shader_locate(VALUE self, VALUE attr) {
|
145
|
+
const char *str = rb_id2name(rb_to_id(attr));
|
146
|
+
int loc = say_shader_locate(ray_rb2shader(self), str);
|
147
|
+
|
148
|
+
if (loc >= 0)
|
149
|
+
return INT2FIX(loc);
|
150
|
+
else
|
151
|
+
return Qnil;
|
152
|
+
}
|
153
|
+
|
154
|
+
/* Binds the shader program */
|
155
|
+
static
|
156
|
+
VALUE ray_shader_bind(VALUE self) {
|
157
|
+
say_shader_bind(ray_rb2shader(self));
|
158
|
+
return Qnil;
|
159
|
+
}
|
160
|
+
|
161
|
+
static
|
162
|
+
VALUE ray_shader_set_vector2(VALUE self, VALUE loc, VALUE val) {
|
163
|
+
rb_check_frozen(self);
|
164
|
+
rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
|
165
|
+
say_shader_set_vector2_loc(ray_rb2shader(self), NUM2INT(loc),
|
166
|
+
ray_convert_to_vector2(val));
|
167
|
+
return val;
|
168
|
+
}
|
169
|
+
|
170
|
+
static
|
171
|
+
VALUE ray_shader_set_vector3(VALUE self, VALUE loc, VALUE val) {
|
172
|
+
rb_check_frozen(self);
|
173
|
+
rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
|
174
|
+
say_shader_set_vector3_loc(ray_rb2shader(self), NUM2INT(loc),
|
175
|
+
ray_convert_to_vector3(val));
|
176
|
+
return val;
|
177
|
+
}
|
178
|
+
|
179
|
+
static
|
180
|
+
VALUE ray_shader_set_color(VALUE self, VALUE loc, VALUE val) {
|
181
|
+
rb_check_frozen(self);
|
182
|
+
rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
|
183
|
+
say_shader_set_color_loc(ray_rb2shader(self), NUM2INT(loc), ray_rb2col(val));
|
184
|
+
return val;
|
185
|
+
}
|
186
|
+
|
187
|
+
|
188
|
+
static
|
189
|
+
VALUE ray_shader_set_array(VALUE self, VALUE loc, VALUE val) {
|
190
|
+
rb_check_frozen(self);
|
191
|
+
|
192
|
+
rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
|
193
|
+
|
194
|
+
size_t size = RARRAY_LEN(val);
|
195
|
+
|
196
|
+
float vector[4];
|
197
|
+
size_t id = 0;
|
198
|
+
switch (size) {
|
199
|
+
case 4:
|
200
|
+
vector[id] = NUM2DBL(RAY_ARRAY_AT(val, id));
|
201
|
+
id++;
|
202
|
+
case 3:
|
203
|
+
vector[id] = NUM2DBL(RAY_ARRAY_AT(val, id));
|
204
|
+
id++;
|
205
|
+
case 2:
|
206
|
+
vector[id] = NUM2DBL(RAY_ARRAY_AT(val, id));
|
207
|
+
id++;
|
208
|
+
case 1:
|
209
|
+
vector[id] = NUM2DBL(RAY_ARRAY_AT(val, id));
|
210
|
+
id++;
|
211
|
+
break;
|
212
|
+
default:
|
213
|
+
rb_raise(rb_eRuntimeError, "can't send %zu-sized vector",
|
214
|
+
size);
|
215
|
+
return Qnil;
|
216
|
+
}
|
217
|
+
|
218
|
+
say_shader_set_floats_loc(ray_rb2shader(self), NUM2INT(loc),
|
219
|
+
size, vector);
|
220
|
+
return val;
|
221
|
+
}
|
222
|
+
|
223
|
+
static
|
224
|
+
VALUE ray_shader_set_numeric(VALUE self, VALUE loc, VALUE val) {
|
225
|
+
rb_check_frozen(self);
|
226
|
+
rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
|
227
|
+
say_shader_set_float_loc(ray_rb2shader(self), NUM2INT(loc),
|
228
|
+
NUM2DBL(val));
|
229
|
+
return val;
|
230
|
+
}
|
231
|
+
|
232
|
+
static
|
233
|
+
VALUE ray_shader_set_image(VALUE self, VALUE loc, VALUE val) {
|
234
|
+
rb_check_frozen(self);
|
235
|
+
rb_hash_aset(rb_iv_get(self, "@images"), loc, val);
|
236
|
+
say_shader_set_image_loc(ray_rb2shader(self), NUM2INT(loc),
|
237
|
+
ray_rb2image(val));
|
238
|
+
return val;
|
239
|
+
}
|
240
|
+
|
241
|
+
static
|
242
|
+
VALUE ray_shader_set_current_texture(VALUE self, VALUE loc) {
|
243
|
+
rb_check_frozen(self);
|
244
|
+
rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
|
245
|
+
say_shader_set_current_texture_loc(ray_rb2shader(self), NUM2INT(loc));
|
246
|
+
return Qnil;
|
247
|
+
}
|
248
|
+
|
249
|
+
static
|
250
|
+
VALUE ray_shader_set_bool(VALUE self, VALUE loc, VALUE val) {
|
251
|
+
rb_check_frozen(self);
|
252
|
+
rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
|
253
|
+
say_shader_set_bool_loc(ray_rb2shader(self), NUM2INT(loc),
|
254
|
+
RTEST(val));
|
255
|
+
return val;
|
256
|
+
}
|
257
|
+
|
258
|
+
static
|
259
|
+
VALUE ray_shader_set_matrix(VALUE self, VALUE loc, VALUE val) {
|
260
|
+
rb_check_frozen(self);
|
261
|
+
rb_hash_aset(rb_iv_get(self, "@images"), loc, Qnil);
|
262
|
+
say_shader_set_matrix_loc(ray_rb2shader(self), NUM2INT(loc),
|
263
|
+
ray_rb2matrix(val));
|
264
|
+
return val;
|
265
|
+
}
|
266
|
+
|
267
|
+
void Init_ray_shader() {
|
268
|
+
ray_cShader = rb_define_class_under(ray_mRay, "Shader", rb_cObject);
|
269
|
+
rb_define_class_under(ray_cShader, "CompileError", rb_eStandardError);
|
270
|
+
rb_define_class_under(ray_cShader, "LinkError", rb_eStandardError);
|
271
|
+
|
272
|
+
rb_define_alloc_func(ray_cShader, ray_shader_alloc);
|
273
|
+
|
274
|
+
rb_define_singleton_method(ray_cShader, "use_old!", ray_shader_use_old, 0);
|
275
|
+
rb_define_singleton_method(ray_cShader, "geometry_available?",
|
276
|
+
ray_shader_geometry_available, 0);
|
277
|
+
|
278
|
+
rb_define_method(ray_cShader, "compile_frag", ray_shader_compile_frag, 1);
|
279
|
+
rb_define_method(ray_cShader, "compile_vertex", ray_shader_compile_vertex, 1);
|
280
|
+
rb_define_method(ray_cShader, "compile_geometry", ray_shader_compile_geometry,
|
281
|
+
1);
|
282
|
+
rb_define_method(ray_cShader, "detach_geometry", ray_shader_detach_geometry,
|
283
|
+
0);
|
284
|
+
|
285
|
+
rb_define_method(ray_cShader, "link", ray_shader_link, 0);
|
286
|
+
|
287
|
+
rb_define_method(ray_cShader, "apply_vertex", ray_shader_apply_vertex, 1);
|
288
|
+
|
289
|
+
rb_define_method(ray_cShader, "locate", ray_shader_locate, 1);
|
290
|
+
|
291
|
+
rb_define_method(ray_cShader, "set_vector2", ray_shader_set_vector2, 2);
|
292
|
+
rb_define_method(ray_cShader, "set_vector3", ray_shader_set_vector3, 2);
|
293
|
+
rb_define_method(ray_cShader, "set_color", ray_shader_set_color, 2);
|
294
|
+
rb_define_method(ray_cShader, "set_matrix", ray_shader_set_matrix, 2);
|
295
|
+
rb_define_method(ray_cShader, "set_numeric", ray_shader_set_numeric, 2);
|
296
|
+
rb_define_method(ray_cShader, "set_array", ray_shader_set_array, 2);
|
297
|
+
rb_define_method(ray_cShader, "set_image", ray_shader_set_image, 2);
|
298
|
+
rb_define_method(ray_cShader, "set_current_texture", ray_shader_set_current_texture, 1);
|
299
|
+
rb_define_method(ray_cShader, "set_bool", ray_shader_set_bool, 2);
|
300
|
+
|
301
|
+
rb_define_method(ray_cShader, "bind", ray_shader_bind, 0);
|
302
|
+
}
|
data/ext/sound.c
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
#include "ray.h"
|
2
|
+
|
3
|
+
VALUE ray_cSound = Qnil;
|
4
|
+
|
5
|
+
say_sound *ray_rb2sound(VALUE obj) {
|
6
|
+
if (!RAY_IS_A(obj, rb_path2class("Ray::Sound"))) {
|
7
|
+
rb_raise(rb_eTypeError, "Can't convert %s into Ray::Sound",
|
8
|
+
RAY_OBJ_CLASSNAME(obj));
|
9
|
+
}
|
10
|
+
|
11
|
+
say_sound *snd;
|
12
|
+
Data_Get_Struct(obj, say_sound, snd);
|
13
|
+
|
14
|
+
return snd;
|
15
|
+
}
|
16
|
+
|
17
|
+
static
|
18
|
+
VALUE ray_sound_alloc(VALUE self) {
|
19
|
+
say_sound *snd = say_sound_create();
|
20
|
+
return Data_Wrap_Struct(self, NULL, say_sound_free, snd);
|
21
|
+
}
|
22
|
+
|
23
|
+
/*
|
24
|
+
@overload buffer=(buf)
|
25
|
+
Sets a new buffer for the sound. Causes it to stop playing.
|
26
|
+
@param [Ray::SoundBuffer, nil] buf New buffer used by the sound.
|
27
|
+
*/
|
28
|
+
static
|
29
|
+
VALUE ray_sound_set_buffer(VALUE self, VALUE buf) {
|
30
|
+
say_sound_set_buffer(ray_rb2sound(self), ray_rb2sound_buffer(buf));
|
31
|
+
rb_iv_set(self, "@buffer", buf);
|
32
|
+
return buf;
|
33
|
+
}
|
34
|
+
|
35
|
+
/* @return [Ray::SoundBuffer, nil] */
|
36
|
+
static
|
37
|
+
VALUE ray_sound_buffer(VALUE self) {
|
38
|
+
return rb_iv_get(self, "@buffer");
|
39
|
+
}
|
40
|
+
|
41
|
+
/* @return [true, false] True if the sound is looping */
|
42
|
+
static
|
43
|
+
VALUE ray_sound_is_looping(VALUE self) {
|
44
|
+
return say_sound_is_looping(ray_rb2sound(self)) ? Qtrue : Qfalse;
|
45
|
+
}
|
46
|
+
|
47
|
+
/* @overload looping=(val) */
|
48
|
+
static
|
49
|
+
VALUE ray_sound_set_looping(VALUE self, VALUE val) {
|
50
|
+
say_sound_set_looping(ray_rb2sound(self), RTEST(val));
|
51
|
+
return val;
|
52
|
+
}
|
53
|
+
|
54
|
+
/*
|
55
|
+
@overload seek(time)
|
56
|
+
Seeks to a specific time in the sound.
|
57
|
+
@param [Float] time Time in seconds
|
58
|
+
*/
|
59
|
+
static
|
60
|
+
VALUE ray_sound_seek(VALUE self, VALUE time) {
|
61
|
+
say_sound_seek(ray_rb2sound(self), NUM2DBL(time));
|
62
|
+
return time;
|
63
|
+
}
|
64
|
+
|
65
|
+
/* @return [Float] current playing offset, in seconds */
|
66
|
+
static
|
67
|
+
VALUE ray_sound_time(VALUE self) {
|
68
|
+
return rb_float_new(say_sound_get_time(ray_rb2sound(self)));
|
69
|
+
}
|
70
|
+
|
71
|
+
/* @return [Float] Duration of the sound. 0 when no buffer is attached to the
|
72
|
+
* sound.
|
73
|
+
*/
|
74
|
+
static
|
75
|
+
VALUE ray_sound_duration(VALUE self) {
|
76
|
+
return rb_float_new(say_sound_get_duration(ray_rb2sound(self)));
|
77
|
+
}
|
78
|
+
|
79
|
+
/* Plays the sound (or resume from a pause) */
|
80
|
+
static
|
81
|
+
VALUE ray_sound_play(VALUE self) {
|
82
|
+
say_sound_play(ray_rb2sound(self));
|
83
|
+
return self;
|
84
|
+
}
|
85
|
+
|
86
|
+
/* Pauses the sound. Can be resumed using play. */
|
87
|
+
static
|
88
|
+
VALUE ray_sound_pause(VALUE self) {
|
89
|
+
say_sound_pause(ray_rb2sound(self));
|
90
|
+
return self;
|
91
|
+
}
|
92
|
+
|
93
|
+
/* Stops the sound */
|
94
|
+
static
|
95
|
+
VALUE ray_sound_stop(VALUE self) {
|
96
|
+
say_sound_stop(ray_rb2sound(self));
|
97
|
+
return self;
|
98
|
+
}
|
99
|
+
|
100
|
+
void Init_ray_sound() {
|
101
|
+
ray_cSound = rb_define_class_under(ray_mRay, "Sound", ray_cAudioSource);
|
102
|
+
rb_define_alloc_func(ray_cSound, ray_sound_alloc);
|
103
|
+
|
104
|
+
rb_define_method(ray_cSound, "buffer=", ray_sound_set_buffer, 1);
|
105
|
+
rb_define_method(ray_cSound, "buffer", ray_sound_buffer, 0);
|
106
|
+
|
107
|
+
rb_define_method(ray_cSound, "looping?", ray_sound_is_looping, 0);
|
108
|
+
rb_define_method(ray_cSound, "looping=", ray_sound_set_looping, 1);
|
109
|
+
|
110
|
+
rb_define_method(ray_cSound, "seek", ray_sound_seek, 1);
|
111
|
+
rb_define_method(ray_cSound, "time", ray_sound_time, 0);
|
112
|
+
|
113
|
+
rb_define_method(ray_cSound, "duration", ray_sound_duration, 0);
|
114
|
+
|
115
|
+
rb_define_method(ray_cSound, "play", ray_sound_play, 0);
|
116
|
+
rb_define_method(ray_cSound, "pause", ray_sound_pause, 0);
|
117
|
+
rb_define_method(ray_cSound, "stop", ray_sound_stop, 0);
|
118
|
+
}
|
data/ext/sound_buffer.c
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
#include "ray.h"
|
2
|
+
|
3
|
+
VALUE ray_cSoundBuffer = Qnil;
|
4
|
+
|
5
|
+
say_sound_buffer *ray_rb2sound_buffer(VALUE obj) {
|
6
|
+
if (!RAY_IS_A(obj, rb_path2class("Ray::SoundBuffer"))) {
|
7
|
+
rb_raise(rb_eTypeError, "Can't convert %s into Ray::SoundBuffer",
|
8
|
+
RAY_OBJ_CLASSNAME(obj));
|
9
|
+
}
|
10
|
+
|
11
|
+
say_sound_buffer *buf;
|
12
|
+
Data_Get_Struct(obj, say_sound_buffer, buf);
|
13
|
+
|
14
|
+
return buf;
|
15
|
+
}
|
16
|
+
|
17
|
+
static
|
18
|
+
VALUE ray_sound_buffer_alloc(VALUE self) {
|
19
|
+
say_sound_buffer *buf = say_sound_buffer_create();
|
20
|
+
return Data_Wrap_Struct(self, NULL, say_sound_buffer_free, buf);
|
21
|
+
}
|
22
|
+
|
23
|
+
/*
|
24
|
+
@overload initialize(io_or_string)
|
25
|
+
Loads the sound buffer out of an IO object or a string.
|
26
|
+
*/
|
27
|
+
static
|
28
|
+
VALUE ray_sound_buffer_init(VALUE self, VALUE arg) {
|
29
|
+
say_sound_buffer *buf = ray_rb2sound_buffer(self);
|
30
|
+
|
31
|
+
if (rb_respond_to(arg, RAY_METH("read"))) {
|
32
|
+
arg = rb_funcall(arg, RAY_METH("read"), 0);
|
33
|
+
|
34
|
+
if (!say_sound_buffer_load_from_memory(buf, RSTRING_LEN(arg),
|
35
|
+
StringValuePtr(arg))) {
|
36
|
+
rb_raise(rb_eRangeError, "%s", say_error_get_last());
|
37
|
+
}
|
38
|
+
}
|
39
|
+
else {
|
40
|
+
if (!say_sound_buffer_load_from_file(buf, StringValuePtr(arg))) {
|
41
|
+
rb_raise(rb_eRangeError, "%s", say_error_get_last());
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
return self;
|
46
|
+
}
|
47
|
+
|
48
|
+
/* @return [Float] duration of the sound in seconds */
|
49
|
+
static
|
50
|
+
VALUE ray_sound_buffer_duration(VALUE self) {
|
51
|
+
return rb_float_new(say_sound_buffer_get_duration(ray_rb2sound_buffer(self)));
|
52
|
+
}
|
53
|
+
|
54
|
+
/* @return [Integer] amount of channels in the sound */
|
55
|
+
static
|
56
|
+
VALUE ray_sound_buffer_channel_count(VALUE self) {
|
57
|
+
return INT2FIX(say_sound_buffer_get_channel_count(ray_rb2sound_buffer(self)));
|
58
|
+
}
|
59
|
+
|
60
|
+
/* @return [Integer] sample rate */
|
61
|
+
static
|
62
|
+
VALUE ray_sound_buffer_sample_rate(VALUE self) {
|
63
|
+
return INT2FIX(say_sound_buffer_get_sample_rate(ray_rb2sound_buffer(self)));
|
64
|
+
}
|
65
|
+
|
66
|
+
void Init_ray_sound_buffer() {
|
67
|
+
ray_cSoundBuffer = rb_define_class_under(ray_mRay, "SoundBuffer", rb_cObject);
|
68
|
+
|
69
|
+
rb_define_alloc_func(ray_cSoundBuffer, ray_sound_buffer_alloc);
|
70
|
+
rb_define_method(ray_cSoundBuffer, "initialize", ray_sound_buffer_init, 1);
|
71
|
+
|
72
|
+
rb_define_method(ray_cSoundBuffer, "duration", ray_sound_buffer_duration, 0);
|
73
|
+
rb_define_method(ray_cSoundBuffer, "channel_count", ray_sound_buffer_channel_count, 0);
|
74
|
+
rb_define_method(ray_cSoundBuffer, "sample_rate", ray_sound_buffer_sample_rate, 0);
|
75
|
+
}
|