|
@@ -37,10 +37,39 @@ int GLLoadAPI() {
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+#ifdef GL_LOG
|
|
|
|
+# define GLOG(fmt,...) if( gl_log_active ) fprintf(gl_log_out, __FUNCTION__ "(" fmt ")\n", __VA_ARGS__)
|
|
|
|
+# define GLOGR(ret,v,fmt,...) if( gl_log_active ) fprintf(gl_log_out, __FUNCTION__ "(" fmt ") = " ret "\n", __VA_ARGS__, v)
|
|
|
|
+static FILE *gl_log_out;
|
|
|
|
+static bool gl_log_active = true;
|
|
|
|
+#else
|
|
|
|
+# define GLOG(...)
|
|
|
|
+# define GLOGR(...)
|
|
|
|
+#endif
|
|
|
|
+
|
|
#define ZIDX(val) ((val)?(val)->v.i:0)
|
|
#define ZIDX(val) ((val)?(val)->v.i:0)
|
|
|
|
|
|
|
|
+static char *hexlog( vbyte *b, int size ) {
|
|
|
|
+ static char tmp[1024];
|
|
|
|
+ static const char *HEX = "0123456789ABCDEF";
|
|
|
|
+ int pos = 0;
|
|
|
|
+ if( b == NULL )
|
|
|
|
+ return "NULL";
|
|
|
|
+ if( size >= (sizeof(tmp)>>1) ) size = (sizeof(tmp)>>1) - 1;
|
|
|
|
+ while( size-- ) {
|
|
|
|
+ unsigned char c = *b++;
|
|
|
|
+ tmp[pos++] = HEX[c>>4];
|
|
|
|
+ tmp[pos++] = HEX[c&15];
|
|
|
|
+ }
|
|
|
|
+ tmp[pos] = 0;
|
|
|
|
+ return tmp;
|
|
|
|
+}
|
|
|
|
+
|
|
// globals
|
|
// globals
|
|
HL_PRIM bool HL_NAME(gl_init)() {
|
|
HL_PRIM bool HL_NAME(gl_init)() {
|
|
|
|
+# ifdef GL_LOG
|
|
|
|
+ gl_log_out = fopen("gllog.txt","wb");
|
|
|
|
+# endif
|
|
return GLLoadAPI() == 0;
|
|
return GLLoadAPI() == 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -51,6 +80,7 @@ HL_PRIM bool HL_NAME(gl_is_context_lost)() {
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_clear)( int bits ) {
|
|
HL_PRIM void HL_NAME(gl_clear)( int bits ) {
|
|
|
|
+ GLOG("%d",bits);
|
|
glClear(bits);
|
|
glClear(bits);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -59,72 +89,92 @@ HL_PRIM int HL_NAME(gl_get_error)() {
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_scissor)( int x, int y, int width, int height ) {
|
|
HL_PRIM void HL_NAME(gl_scissor)( int x, int y, int width, int height ) {
|
|
|
|
+ GLOG("%d,%d,%d,%d",x,y,width,height);
|
|
glScissor(x, y, width, height);
|
|
glScissor(x, y, width, height);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_clear_color)( double r, double g, double b, double a ) {
|
|
HL_PRIM void HL_NAME(gl_clear_color)( double r, double g, double b, double a ) {
|
|
|
|
+ GLOG("%g,%g,%g,%g",r,g,b,a);
|
|
glClearColor((float)r, (float)g, (float)b, (float)a);
|
|
glClearColor((float)r, (float)g, (float)b, (float)a);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_clear_depth)( double value ) {
|
|
HL_PRIM void HL_NAME(gl_clear_depth)( double value ) {
|
|
|
|
+ GLOG("%g",value);
|
|
glClearDepth(value);
|
|
glClearDepth(value);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_clear_stencil)( int value ) {
|
|
HL_PRIM void HL_NAME(gl_clear_stencil)( int value ) {
|
|
|
|
+ GLOG("%d",value);
|
|
glClearStencil(value);
|
|
glClearStencil(value);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_viewport)( int x, int y, int width, int height ) {
|
|
HL_PRIM void HL_NAME(gl_viewport)( int x, int y, int width, int height ) {
|
|
|
|
+ GLOG("%d,%d,%d,%d",x,y,width,height);
|
|
glViewport(x, y, width, height);
|
|
glViewport(x, y, width, height);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_finish)() {
|
|
HL_PRIM void HL_NAME(gl_finish)() {
|
|
|
|
+ GLOG("");
|
|
|
|
+# ifdef GL_LOG
|
|
|
|
+ fflush(gl_log_out);
|
|
|
|
+# endif
|
|
glFinish();
|
|
glFinish();
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_pixel_storei)( int key, int value ) {
|
|
HL_PRIM void HL_NAME(gl_pixel_storei)( int key, int value ) {
|
|
|
|
+ GLOG("%d,%d",key,value);
|
|
glPixelStorei(key, value);
|
|
glPixelStorei(key, value);
|
|
}
|
|
}
|
|
|
|
|
|
// state changes
|
|
// state changes
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_enable)( int feature ) {
|
|
HL_PRIM void HL_NAME(gl_enable)( int feature ) {
|
|
|
|
+ GLOG("%d",feature);
|
|
glEnable(feature);
|
|
glEnable(feature);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_disable)( int feature ) {
|
|
HL_PRIM void HL_NAME(gl_disable)( int feature ) {
|
|
|
|
+ GLOG("%d",feature);
|
|
glDisable(feature);
|
|
glDisable(feature);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_cull_face)( int face ) {
|
|
HL_PRIM void HL_NAME(gl_cull_face)( int face ) {
|
|
|
|
+ GLOG("%d",face);
|
|
glCullFace(face);
|
|
glCullFace(face);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_blend_func)( int src, int dst ) {
|
|
HL_PRIM void HL_NAME(gl_blend_func)( int src, int dst ) {
|
|
|
|
+ GLOG("%d,%d",src,dst);
|
|
glBlendFunc(src, dst);
|
|
glBlendFunc(src, dst);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_blend_func_separate)( int src, int dst, int alphaSrc, int alphaDst ) {
|
|
HL_PRIM void HL_NAME(gl_blend_func_separate)( int src, int dst, int alphaSrc, int alphaDst ) {
|
|
|
|
+ GLOG("%d,%d,%d,%d",src,dst,alphaSrc,alphaDst);
|
|
glBlendFuncSeparate(src, dst, alphaSrc, alphaDst);
|
|
glBlendFuncSeparate(src, dst, alphaSrc, alphaDst);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_blend_equation)( int op ) {
|
|
HL_PRIM void HL_NAME(gl_blend_equation)( int op ) {
|
|
|
|
+ GLOG("%d",op);
|
|
glBlendEquation(op);
|
|
glBlendEquation(op);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_blend_equation_separate)( int op, int alphaOp ) {
|
|
HL_PRIM void HL_NAME(gl_blend_equation_separate)( int op, int alphaOp ) {
|
|
|
|
+ GLOG("%d,%d",op,alphaOp);
|
|
glBlendEquationSeparate(op, alphaOp);
|
|
glBlendEquationSeparate(op, alphaOp);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_depth_mask)( bool mask ) {
|
|
HL_PRIM void HL_NAME(gl_depth_mask)( bool mask ) {
|
|
|
|
+ GLOG("%d",mask);
|
|
glDepthMask(mask);
|
|
glDepthMask(mask);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_depth_func)( int f ) {
|
|
HL_PRIM void HL_NAME(gl_depth_func)( int f ) {
|
|
|
|
+ GLOG("%d",f);
|
|
glDepthFunc(f);
|
|
glDepthFunc(f);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_color_mask)( bool r, bool g, bool b, bool a ) {
|
|
HL_PRIM void HL_NAME(gl_color_mask)( bool r, bool g, bool b, bool a ) {
|
|
|
|
+ GLOG("%d,%d,%d,%d",r,g,b,a);
|
|
glColorMask(r, g, b, a);
|
|
glColorMask(r, g, b, a);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -139,15 +189,18 @@ static vdynamic *alloc_i32(int v) {
|
|
|
|
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_program)() {
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_program)() {
|
|
int v = glCreateProgram();
|
|
int v = glCreateProgram();
|
|
|
|
+ GLOGR("%d",v,"");
|
|
if( v == 0 ) return NULL;
|
|
if( v == 0 ) return NULL;
|
|
return alloc_i32(v);
|
|
return alloc_i32(v);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_attach_shader)( vdynamic *p, vdynamic *s ) {
|
|
HL_PRIM void HL_NAME(gl_attach_shader)( vdynamic *p, vdynamic *s ) {
|
|
|
|
+ GLOG("%d,%d",p->v.i,s->v.i);
|
|
glAttachShader(p->v.i, s->v.i);
|
|
glAttachShader(p->v.i, s->v.i);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_link_program)( vdynamic *p ) {
|
|
HL_PRIM void HL_NAME(gl_link_program)( vdynamic *p ) {
|
|
|
|
+ GLOG("%d",p->v.i);
|
|
glLinkProgram(p->v.i);
|
|
glLinkProgram(p->v.i);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -156,6 +209,7 @@ HL_PRIM vdynamic *HL_NAME(gl_get_program_parameter)( vdynamic *p, int param ) {
|
|
case 0x8B82 /*LINK_STATUS*/ : {
|
|
case 0x8B82 /*LINK_STATUS*/ : {
|
|
int ret = 0;
|
|
int ret = 0;
|
|
glGetProgramiv(p->v.i, param, &ret);
|
|
glGetProgramiv(p->v.i, param, &ret);
|
|
|
|
+ GLOGR("%d",ret,"%d,%d",p->v.i,param);
|
|
return alloc_i32(ret);
|
|
return alloc_i32(ret);
|
|
}
|
|
}
|
|
default:
|
|
default:
|
|
@@ -168,20 +222,27 @@ HL_PRIM vbyte *HL_NAME(gl_get_program_info_bytes)( vdynamic *p ) {
|
|
char log[4096];
|
|
char log[4096];
|
|
*log = 0;
|
|
*log = 0;
|
|
glGetProgramInfoLog(p->v.i, 4096, NULL, log);
|
|
glGetProgramInfoLog(p->v.i, 4096, NULL, log);
|
|
|
|
+ GLOGR("%s",log,"%d",p->v.i);
|
|
return hl_copy_bytes(log,(int)strlen(log) + 1);
|
|
return hl_copy_bytes(log,(int)strlen(log) + 1);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM vdynamic *HL_NAME(gl_get_uniform_location)( vdynamic *p, vstring *name ) {
|
|
HL_PRIM vdynamic *HL_NAME(gl_get_uniform_location)( vdynamic *p, vstring *name ) {
|
|
- int u = glGetUniformLocation(p->v.i, hl_to_utf8(name->bytes));
|
|
|
|
|
|
+ char *cname = hl_to_utf8(name->bytes);
|
|
|
|
+ int u = glGetUniformLocation(p->v.i, cname);
|
|
|
|
+ GLOGR("%d",u,"%d,%s",p->v.i,cname);
|
|
if( u < 0 ) return NULL;
|
|
if( u < 0 ) return NULL;
|
|
return alloc_i32(u);
|
|
return alloc_i32(u);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM int HL_NAME(gl_get_attrib_location)( vdynamic *p, vstring *name ) {
|
|
HL_PRIM int HL_NAME(gl_get_attrib_location)( vdynamic *p, vstring *name ) {
|
|
- return glGetAttribLocation(p->v.i, hl_to_utf8(name->bytes));
|
|
|
|
|
|
+ char *cname = hl_to_utf8(name->bytes);
|
|
|
|
+ int loc = glGetAttribLocation(p->v.i, cname);
|
|
|
|
+ GLOGR("%d",loc,"%d,%s",p->v.i,cname);
|
|
|
|
+ return loc;
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_use_program)( vdynamic *p ) {
|
|
HL_PRIM void HL_NAME(gl_use_program)( vdynamic *p ) {
|
|
|
|
+ GLOG("%d",ZIDX(p));
|
|
glUseProgram(ZIDX(p));
|
|
glUseProgram(ZIDX(p));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -189,16 +250,19 @@ HL_PRIM void HL_NAME(gl_use_program)( vdynamic *p ) {
|
|
|
|
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_shader)( int type ) {
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_shader)( int type ) {
|
|
int s = glCreateShader(type);
|
|
int s = glCreateShader(type);
|
|
|
|
+ GLOGR("%d",s,"%d",type);
|
|
if (s == 0) return NULL;
|
|
if (s == 0) return NULL;
|
|
return alloc_i32(s);
|
|
return alloc_i32(s);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_shader_source)( vdynamic *s, vstring *src ) {
|
|
HL_PRIM void HL_NAME(gl_shader_source)( vdynamic *s, vstring *src ) {
|
|
char *c = hl_to_utf8(src->bytes);
|
|
char *c = hl_to_utf8(src->bytes);
|
|
|
|
+ GLOG("%d,%s",s->v.i,c);
|
|
glShaderSource(s->v.i, 1, &c, NULL);
|
|
glShaderSource(s->v.i, 1, &c, NULL);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_compile_shader)( vdynamic *s ) {
|
|
HL_PRIM void HL_NAME(gl_compile_shader)( vdynamic *s ) {
|
|
|
|
+ GLOG("%d",s->v.i);
|
|
glCompileShader(s->v.i);
|
|
glCompileShader(s->v.i);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -206,6 +270,7 @@ HL_PRIM vbyte *HL_NAME(gl_get_shader_info_bytes)( vdynamic *s ) {
|
|
char log[4096];
|
|
char log[4096];
|
|
*log = 0;
|
|
*log = 0;
|
|
glGetShaderInfoLog(s->v.i, 4096, NULL, log);
|
|
glGetShaderInfoLog(s->v.i, 4096, NULL, log);
|
|
|
|
+ GLOGR("%s",log,"%d",s->v.i);
|
|
return hl_copy_bytes(log, (int)strlen(log)+1);
|
|
return hl_copy_bytes(log, (int)strlen(log)+1);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -217,6 +282,7 @@ HL_PRIM vdynamic *HL_NAME(gl_get_shader_parameter)( vdynamic *s, int param ) {
|
|
{
|
|
{
|
|
int ret = 0;
|
|
int ret = 0;
|
|
glGetShaderiv(s->v.i, param, &ret);
|
|
glGetShaderiv(s->v.i, param, &ret);
|
|
|
|
+ GLOGR("%d",ret,"%d,%d",s->v.i,param);
|
|
return alloc_i32(ret);
|
|
return alloc_i32(ret);
|
|
}
|
|
}
|
|
default:
|
|
default:
|
|
@@ -226,6 +292,7 @@ HL_PRIM vdynamic *HL_NAME(gl_get_shader_parameter)( vdynamic *s, int param ) {
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_delete_shader)( vdynamic *s ) {
|
|
HL_PRIM void HL_NAME(gl_delete_shader)( vdynamic *s ) {
|
|
|
|
+ GLOG("%d",s->v.i);
|
|
glDeleteShader(s->v.i);
|
|
glDeleteShader(s->v.i);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -234,31 +301,38 @@ HL_PRIM void HL_NAME(gl_delete_shader)( vdynamic *s ) {
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_texture)() {
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_texture)() {
|
|
unsigned int t = 0;
|
|
unsigned int t = 0;
|
|
glGenTextures(1, &t);
|
|
glGenTextures(1, &t);
|
|
|
|
+ GLOGR("%d",t,"");
|
|
return alloc_i32(t);
|
|
return alloc_i32(t);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_active_texture)( int t ) {
|
|
HL_PRIM void HL_NAME(gl_active_texture)( int t ) {
|
|
|
|
+ GLOG("%d",t);
|
|
glActiveTexture(t);
|
|
glActiveTexture(t);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_bind_texture)( int t, vdynamic *texture ) {
|
|
HL_PRIM void HL_NAME(gl_bind_texture)( int t, vdynamic *texture ) {
|
|
|
|
+ GLOG("%d,%d",t,ZIDX(texture));
|
|
glBindTexture(t, ZIDX(texture));
|
|
glBindTexture(t, ZIDX(texture));
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_tex_parameteri)( int t, int key, int value ) {
|
|
HL_PRIM void HL_NAME(gl_tex_parameteri)( int t, int key, int value ) {
|
|
|
|
+ GLOG("%d,%d,%d",t,key,value);
|
|
glTexParameteri(t, key, value);
|
|
glTexParameteri(t, key, value);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_tex_image2d)( int target, int level, int internalFormat, int width, int height, int border, int format, int type, vbyte *image ) {
|
|
HL_PRIM void HL_NAME(gl_tex_image2d)( int target, int level, int internalFormat, int width, int height, int border, int format, int type, vbyte *image ) {
|
|
|
|
+ GLOG("%d,%d,%d,%d,%d,%d,%d,%d,%s",target,level,internalFormat,width,height,border,format,type,hexlog(image,16));
|
|
glTexImage2D(target, level, internalFormat, width, height, border, format, type, image);
|
|
glTexImage2D(target, level, internalFormat, width, height, border, format, type, image);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_generate_mipmap)( int t ) {
|
|
HL_PRIM void HL_NAME(gl_generate_mipmap)( int t ) {
|
|
|
|
+ GLOG("%d",t);
|
|
glGenerateMipmap(t);
|
|
glGenerateMipmap(t);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_delete_texture)( vdynamic *t ) {
|
|
HL_PRIM void HL_NAME(gl_delete_texture)( vdynamic *t ) {
|
|
unsigned int tt = t->v.i;
|
|
unsigned int tt = t->v.i;
|
|
|
|
+ GLOG("%d",tt);
|
|
glDeleteTextures(1, &tt);
|
|
glDeleteTextures(1, &tt);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -267,19 +341,23 @@ HL_PRIM void HL_NAME(gl_delete_texture)( vdynamic *t ) {
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_framebuffer)() {
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_framebuffer)() {
|
|
unsigned int f = 0;
|
|
unsigned int f = 0;
|
|
glGenFramebuffers(1, &f);
|
|
glGenFramebuffers(1, &f);
|
|
|
|
+ GLOGR("%d",f,"");
|
|
return alloc_i32(f);
|
|
return alloc_i32(f);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_bind_framebuffer)( int target, vdynamic *f ) {
|
|
HL_PRIM void HL_NAME(gl_bind_framebuffer)( int target, vdynamic *f ) {
|
|
|
|
+ GLOG("%d,%d",target,ZIDX(f));
|
|
glBindFramebuffer(target, ZIDX(f));
|
|
glBindFramebuffer(target, ZIDX(f));
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_framebuffer_texture2d)( int target, int attach, int texTarget, vdynamic *t, int level ) {
|
|
HL_PRIM void HL_NAME(gl_framebuffer_texture2d)( int target, int attach, int texTarget, vdynamic *t, int level ) {
|
|
|
|
+ GLOG("%d,%d,%d,%d,%d",target,attach,texTarget,t->v.i,level);
|
|
glFramebufferTexture2D(target, attach, texTarget, t->v.i, level);
|
|
glFramebufferTexture2D(target, attach, texTarget, t->v.i, level);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_delete_framebuffer)( vdynamic *f ) {
|
|
HL_PRIM void HL_NAME(gl_delete_framebuffer)( vdynamic *f ) {
|
|
unsigned int ff = (unsigned)f->v.i;
|
|
unsigned int ff = (unsigned)f->v.i;
|
|
|
|
+ GLOG("%d",ff);
|
|
glDeleteFramebuffers(1, &ff);
|
|
glDeleteFramebuffers(1, &ff);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -288,23 +366,28 @@ HL_PRIM void HL_NAME(gl_delete_framebuffer)( vdynamic *f ) {
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_renderbuffer)() {
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_renderbuffer)() {
|
|
unsigned int buf = 0;
|
|
unsigned int buf = 0;
|
|
glGenRenderbuffers(1, &buf);
|
|
glGenRenderbuffers(1, &buf);
|
|
|
|
+ GLOGR("%d",buf,"");
|
|
return alloc_i32(buf);
|
|
return alloc_i32(buf);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_bind_renderbuffer)( int target, vdynamic *r ) {
|
|
HL_PRIM void HL_NAME(gl_bind_renderbuffer)( int target, vdynamic *r ) {
|
|
|
|
+ GLOG("%d,%d",target,ZIDX(r));
|
|
glBindRenderbuffer(target, ZIDX(r));
|
|
glBindRenderbuffer(target, ZIDX(r));
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_renderbuffer_storage)( int target, int format, int width, int height ) {
|
|
HL_PRIM void HL_NAME(gl_renderbuffer_storage)( int target, int format, int width, int height ) {
|
|
|
|
+ GLOG("%d,%d,%d,%d",target,format,width,height);
|
|
glRenderbufferStorage(target, format, width, height);
|
|
glRenderbufferStorage(target, format, width, height);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_framebuffer_renderbuffer)( int frameTarget, int attach, int renderTarget, vdynamic *b ) {
|
|
HL_PRIM void HL_NAME(gl_framebuffer_renderbuffer)( int frameTarget, int attach, int renderTarget, vdynamic *b ) {
|
|
|
|
+ GLOG("%d,%d,%d,%d",frameTarget,attach,renderTarget,b->v.i);
|
|
glFramebufferRenderbuffer(frameTarget, attach, renderTarget, b->v.i);
|
|
glFramebufferRenderbuffer(frameTarget, attach, renderTarget, b->v.i);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_delete_renderbuffer)( vdynamic *b ) {
|
|
HL_PRIM void HL_NAME(gl_delete_renderbuffer)( vdynamic *b ) {
|
|
unsigned int bb = (unsigned)b->v.i;
|
|
unsigned int bb = (unsigned)b->v.i;
|
|
|
|
+ GLOG("%d",bb);
|
|
glDeleteRenderbuffers(1, &bb);
|
|
glDeleteRenderbuffers(1, &bb);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -313,55 +396,81 @@ HL_PRIM void HL_NAME(gl_delete_renderbuffer)( vdynamic *b ) {
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_buffer)() {
|
|
HL_PRIM vdynamic *HL_NAME(gl_create_buffer)() {
|
|
unsigned int b = 0;
|
|
unsigned int b = 0;
|
|
glGenBuffers(1, &b);
|
|
glGenBuffers(1, &b);
|
|
|
|
+ GLOGR("%d",b,"");
|
|
return alloc_i32(b);
|
|
return alloc_i32(b);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_bind_buffer)( int target, vdynamic *b ) {
|
|
HL_PRIM void HL_NAME(gl_bind_buffer)( int target, vdynamic *b ) {
|
|
|
|
+ GLOG("%d,%d",target,ZIDX(b));
|
|
glBindBuffer(target, ZIDX(b));
|
|
glBindBuffer(target, ZIDX(b));
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_buffer_data_size)( int target, int size, int param ) {
|
|
HL_PRIM void HL_NAME(gl_buffer_data_size)( int target, int size, int param ) {
|
|
|
|
+ GLOG("%d,%d,%d",target,size,param);
|
|
glBufferData(target, size, NULL, param);
|
|
glBufferData(target, size, NULL, param);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_buffer_data)( int target, int size, vbyte *data, int param ) {
|
|
HL_PRIM void HL_NAME(gl_buffer_data)( int target, int size, vbyte *data, int param ) {
|
|
|
|
+ GLOG("%d,%d,%s,%d",target,size,hexlog(data,size),param);
|
|
glBufferData(target, size, data, param);
|
|
glBufferData(target, size, data, param);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_buffer_sub_data)( int target, int offset, vbyte *data, int srcOffset, int srcLength ) {
|
|
HL_PRIM void HL_NAME(gl_buffer_sub_data)( int target, int offset, vbyte *data, int srcOffset, int srcLength ) {
|
|
|
|
+ GLOG("%d,%d,%s,%d",target,offset,hexlog(data+srcOffset,srcLength),srcLength);
|
|
glBufferSubData(target, offset, srcLength, data + srcOffset);
|
|
glBufferSubData(target, offset, srcLength, data + srcOffset);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_enable_vertex_attrib_array)( int attrib ) {
|
|
HL_PRIM void HL_NAME(gl_enable_vertex_attrib_array)( int attrib ) {
|
|
|
|
+ GLOG("%d",attrib);
|
|
glEnableVertexAttribArray(attrib);
|
|
glEnableVertexAttribArray(attrib);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_disable_vertex_attrib_array)( int attrib ) {
|
|
HL_PRIM void HL_NAME(gl_disable_vertex_attrib_array)( int attrib ) {
|
|
|
|
+ GLOG("%d",attrib);
|
|
glDisableVertexAttribArray(attrib);
|
|
glDisableVertexAttribArray(attrib);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_vertex_attrib_pointer)( int index, int size, int type, bool normalized, int stride, int position ) {
|
|
HL_PRIM void HL_NAME(gl_vertex_attrib_pointer)( int index, int size, int type, bool normalized, int stride, int position ) {
|
|
|
|
+ GLOG("%d,%d,%d,%d,%d,%d",index,size,type,normalized,stride,position);
|
|
glVertexAttribPointer(index, size, type, normalized, stride, (void*)(int_val)position);
|
|
glVertexAttribPointer(index, size, type, normalized, stride, (void*)(int_val)position);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_delete_buffer)( vdynamic *b ) {
|
|
HL_PRIM void HL_NAME(gl_delete_buffer)( vdynamic *b ) {
|
|
unsigned int bb = (unsigned)b->v.i;
|
|
unsigned int bb = (unsigned)b->v.i;
|
|
|
|
+ GLOG("%d",bb);
|
|
glDeleteBuffers(1, &bb);
|
|
glDeleteBuffers(1, &bb);
|
|
}
|
|
}
|
|
|
|
|
|
// uniforms
|
|
// uniforms
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_uniform1i)( vdynamic *u, int i ) {
|
|
HL_PRIM void HL_NAME(gl_uniform1i)( vdynamic *u, int i ) {
|
|
|
|
+ GLOG("%d,%d",u->v.i,i);
|
|
glUniform1i(u->v.i, i);
|
|
glUniform1i(u->v.i, i);
|
|
}
|
|
}
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_uniform4fv)( vdynamic *u, vbyte *buffer, int bufPos, int count ) {
|
|
HL_PRIM void HL_NAME(gl_uniform4fv)( vdynamic *u, vbyte *buffer, int bufPos, int count ) {
|
|
|
|
+ GLOG("%d,%d",u->v.i,count);
|
|
|
|
+# ifdef GL_LOG
|
|
|
|
+ if( gl_log_active ) {
|
|
|
|
+ int i;
|
|
|
|
+ fprintf(gl_log_out,"\t");
|
|
|
|
+ for(i=0;i<count;i++) {
|
|
|
|
+ fprintf(gl_log_out,"%g",((float*)buffer)[bufPos + i]);
|
|
|
|
+ if( i < count-1 ) {
|
|
|
|
+ fprintf(gl_log_out,",");
|
|
|
|
+ if( ((i+1) & 4) == 0 ) fprintf(gl_log_out,"\n\t");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ fprintf(gl_log_out,"\n");
|
|
|
|
+ }
|
|
|
|
+# endif
|
|
glUniform4fv(u->v.i, count, (float*)buffer + bufPos);
|
|
glUniform4fv(u->v.i, count, (float*)buffer + bufPos);
|
|
}
|
|
}
|
|
|
|
|
|
// draw
|
|
// draw
|
|
|
|
|
|
HL_PRIM void HL_NAME(gl_draw_elements)( int mode, int count, int type, int start ) {
|
|
HL_PRIM void HL_NAME(gl_draw_elements)( int mode, int count, int type, int start ) {
|
|
|
|
+ GLOG("%d,%d,%d,%d",mode,count,type,start);
|
|
glDrawElements(mode, count, type, (void*)(int_val)start);
|
|
glDrawElements(mode, count, type, (void*)(int_val)start);
|
|
}
|
|
}
|
|
|
|
|