From ab4c3e322f5bef057b94448297d430be77343817 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Mon, 4 Aug 2014 22:07:45 -0400 Subject: [PATCH] add GL.draw_rect() --- src/GL.cc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/GL.cc b/src/GL.cc index 391d6e2..6c99487 100644 --- a/src/GL.cc +++ b/src/GL.cc @@ -22,9 +22,31 @@ static VALUE ruby_module; static GLBufferRef rect_buffer; static GLProgram * programs[PROGRAM_COUNT]; +static VALUE GL_draw_rect(VALUE klass, + VALUE x, VALUE y, VALUE width, VALUE height, + VALUE r, VALUE g, VALUE b, VALUE a) +{ + glUseProgram(programs[PROGRAM_RECT]->id); + glUniform2i(programs[PROGRAM_RECT]->uniforms[UNIFORM_POSITION], FIX2INT(x), FIX2INT(y)); + glUniform2i(programs[PROGRAM_RECT]->uniforms[UNIFORM_SIZE], FIX2INT(width), FIX2INT(height)); + glUniform4f(programs[PROGRAM_RECT]->uniforms[UNIFORM_COLOR], + RFLOAT_VALUE(r), + RFLOAT_VALUE(g), + RFLOAT_VALUE(b), + RFLOAT_VALUE(a)); + rect_buffer->bind(); + glEnableVertexAttribArray(0); + glVertexAttribIPointer(0, 2, GL_INT, 0, 0); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + return Qnil; +} + void GL_Init() { ruby_module = rb_define_module("GL"); + rb_define_singleton_method(ruby_module, "draw_rect", + (VALUE(*)(...))GL_draw_rect, 4); } static void load_gl_buffers()