static VALUE gl_VertexAttribPointerNV(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3,VALUE arg4,VALUE arg5) { GLuint index; GLuint size; GLenum type; GLsizei stride; LOAD_GL_FUNC(glVertexAttribPointerNV, "GL_NV_vertex_program"); index = (GLuint)NUM2UINT(arg1); size = (GLuint)NUM2UINT(arg2); type = (GLenum)NUM2INT(arg3); stride = (GLsizei)NUM2UINT(arg4); if (index>_MAX_VERTEX_ATTRIBS) rb_raise(rb_eArgError, "Index too large, maximum allowed value '%i'",_MAX_VERTEX_ATTRIBS); if (CheckBufferBinding(GL_ARRAY_BUFFER_BINDING)) { g_VertexAttrib_ptr[index] = arg5; fptr_glVertexAttribPointerNV(index,size,type,stride,(GLvoid *)NUM2LONG(arg5)); } else { VALUE data; data = pack_array_or_pass_string(type,arg5); rb_str_freeze(data); g_VertexAttrib_ptr[index] = data; fptr_glVertexAttribPointerNV(index,size,type,stride,(GLvoid *)RSTRING_PTR(data)); } CHECK_GLERROR_FROM("glVertexAttribPointerNV"); return Qnil; }
static VALUE gl_GetProgramivNV(VALUE obj,VALUE arg1,VALUE arg2) { GLint ret = 0; LOAD_GL_FUNC(glGetProgramivNV, "GL_NV_vertex_program"); fptr_glGetProgramivNV(NUM2INT(arg1),NUM2INT(arg2),&ret); CHECK_GLERROR_FROM("glGetProgramivNV"); return cond_GLBOOL2RUBY(NUM2INT(arg2),ret); }
static VALUE gl_LoadProgramNV(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3) { LOAD_GL_FUNC(glLoadProgramNV, "GL_NV_vertex_program"); Check_Type(arg3,T_STRING); fptr_glLoadProgramNV((GLenum)NUM2INT(arg1),(GLuint)NUM2UINT(arg2),(GLsizei)RSTRING_LENINT(arg3),(GLubyte *)RSTRING_PTR(arg3)); CHECK_GLERROR_FROM("glLoadProgramNV"); return Qnil; }
static VALUE gl_ProgramStringARB(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3) { LOAD_GL_FUNC(glProgramStringARB, "GL_ARB_vertex_program"); Check_Type(arg3,T_STRING); fptr_glProgramStringARB((GLenum)NUM2INT(arg1),(GLenum)NUM2INT(arg2),(GLsizei)RSTRING_LENINT(arg3),RSTRING_PTR(arg3)); CHECK_GLERROR_FROM("glProgramStringARB"); return Qnil; }
static VALUE gl_ExecuteProgramNV(VALUE obj,VALUE arg1,VALUE arg2,VALUE arg3) { GLfloat params[4] = {0,0,0,0}; LOAD_GL_FUNC(glExecuteProgramNV, "GL_NV_vertex_program"); ary2cflt(arg3,params,4); fptr_glExecuteProgramNV(NUM2UINT(arg1),NUM2UINT(arg2),params); CHECK_GLERROR_FROM("glExecuteProgramNV"); return Qnil; }
static VALUE gl_GetProgramStringNV(VALUE obj,VALUE arg1,VALUE arg2) { GLsizei len = 0; char *buffer; VALUE ret_buffer; LOAD_GL_FUNC(glGetProgramStringNV, "GL_NV_vertex_program"); LOAD_GL_FUNC(glGetProgramivNV, "GL_NV_vertex_program"); fptr_glGetProgramivNV(NUM2INT(arg1),GL_PROGRAM_LENGTH_NV,&len); CHECK_GLERROR_FROM("glGetProgramivNV"); if (len<=0) return rb_str_new2(""); buffer = ALLOC_N(GLchar,len+1); memset(buffer,0,sizeof(GLchar) * (len+1)); fptr_glGetProgramStringNV(NUM2INT(arg1),NUM2INT(arg2),buffer); ret_buffer = rb_str_new2(buffer); xfree(buffer); CHECK_GLERROR_FROM("glGetProgramStringNV"); return ret_buffer; }
VALUE rb_gl_buffer_s_map(VALUE klass, VALUE _target, VALUE _access) { struct buffer *buf = ALLOC(struct buffer); LOAD_GL_FUNC(glMapBuffer, "1.5"); buf->target = RUBY2GLENUM(_target); buf->len = 0; buf->ptr = fptr_glMapBuffer(buf->target, RUBY2GLENUM(_access)); if (buf->ptr == NULL) { xfree(buf); CHECK_GLERROR_FROM("glMapBuffer"); } return TypedData_Wrap_Struct(klass, &buffer_type, buf); }
static VALUE gl_PointParameterfvARB(VALUE obj,VALUE arg1,VALUE arg2) { GLfloat params[3] = {(GLfloat)0.0,(GLfloat)0.0,(GLfloat)0.0}; GLenum pname; GLint size; LOAD_GL_FUNC(glPointParameterfvARB, "GL_ARB_point_parameters"); pname = NUM2UINT(arg1); Check_Type(arg2,T_ARRAY); if (pname==GL_POINT_DISTANCE_ATTENUATION) size = 3; else size = 1; ary2cflt(arg2,params,size); fptr_glPointParameterfvARB(pname,params); CHECK_GLERROR_FROM("glPointParameterfvARB"); return Qnil; }
static VALUE rb_gl_buffer_unmap(VALUE self) { struct buffer *buf; LOAD_GL_FUNC(glUnmapBuffer, "1.5"); TypedData_Get_Struct(self, struct buffer, &buffer_type, buf); if (!buf->ptr) return self; fptr_glUnmapBuffer(buf->target); CHECK_GLERROR_FROM("glUnmapBuffer"); buf->ptr = NULL; buf->len = 0; buf->target = 0; return self; }