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()