add GL.draw_rect()

This commit is contained in:
Josh Holtrop 2014-08-04 22:07:45 -04:00
parent e2608b1d29
commit ab4c3e322f

View File

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