Merge pull request #101 from delahee/fix_gl_uni

fixed uniform/vertexAttributeXfv
This commit is contained in:
Joshua Granick
2014-03-20 23:32:03 -07:00
2 changed files with 115 additions and 137 deletions

View File

@@ -989,9 +989,9 @@ class GL {
lime_gl_uniform1f(location, x); lime_gl_uniform1f(location, x);
} }
public static function uniform1fv(location:GLUniformLocation, x:Array<Float>):Void public static function uniform1fv(location:GLUniformLocation, x:Float32Array):Void
{ {
lime_gl_uniform1fv(location, x); lime_gl_uniform1fv(location, x.getByteBuffer());
} }
public static function uniform1i(location:GLUniformLocation, x:Int):Void public static function uniform1i(location:GLUniformLocation, x:Int):Void
@@ -1009,9 +1009,9 @@ class GL {
lime_gl_uniform2f(location, x, y); lime_gl_uniform2f(location, x, y);
} }
public static function uniform2fv(location:GLUniformLocation, v:Array<Float>):Void public static function uniform2fv(location:GLUniformLocation, v:Float32Array):Void
{ {
lime_gl_uniform2fv(location, v); lime_gl_uniform2fv(location, v.getByteBuffer());
} }
public static function uniform2i(location:GLUniformLocation, x:Int, y:Int):Void public static function uniform2i(location:GLUniformLocation, x:Int, y:Int):Void
@@ -1029,9 +1029,9 @@ class GL {
lime_gl_uniform3f(location, x, y, z); lime_gl_uniform3f(location, x, y, z);
} }
public static function uniform3fv(location:GLUniformLocation, v:Array<Float>):Void public static function uniform3fv(location:GLUniformLocation, v:Float32Array):Void
{ {
lime_gl_uniform3fv(location, v); lime_gl_uniform3fv(location, v.getByteBuffer());
} }
public static function uniform3i(location:GLUniformLocation, x:Int, y:Int, z:Int):Void public static function uniform3i(location:GLUniformLocation, x:Int, y:Int, z:Int):Void
@@ -1049,9 +1049,9 @@ class GL {
lime_gl_uniform4f(location, x, y, z, w); lime_gl_uniform4f(location, x, y, z, w);
} }
public static function uniform4fv(location:GLUniformLocation, v:Array<Float>):Void public static function uniform4fv(location:GLUniformLocation, v:Float32Array):Void
{ {
lime_gl_uniform4fv(location, v); lime_gl_uniform4fv(location, v.getByteBuffer());
} }
public static function uniform4i(location:GLUniformLocation, x:Int, y:Int, z:Int, w:Int):Void public static function uniform4i(location:GLUniformLocation, x:Int, y:Int, z:Int, w:Int):Void
@@ -1099,9 +1099,9 @@ class GL {
lime_gl_vertex_attrib1f(indx, x); lime_gl_vertex_attrib1f(indx, x);
} }
public static function vertexAttrib1fv(indx:Int, values:Array<Float>):Void public static function vertexAttrib1fv(indx:Int, values:Float32Array):Void
{ {
lime_gl_vertex_attrib1fv(indx, values); lime_gl_vertex_attrib1fv(indx, values.getByteBuffer());
} }
public static function vertexAttrib2f(indx:Int, x:Float, y:Float):Void public static function vertexAttrib2f(indx:Int, x:Float, y:Float):Void
@@ -1109,9 +1109,9 @@ class GL {
lime_gl_vertex_attrib2f(indx, x, y); lime_gl_vertex_attrib2f(indx, x, y);
} }
public static function vertexAttrib2fv(indx:Int, values:Array<Float>):Void public static function vertexAttrib2fv(indx:Int, values:Float32Array):Void
{ {
lime_gl_vertex_attrib2fv(indx, values); lime_gl_vertex_attrib2fv(indx, values.getByteBuffer());
} }
public static function vertexAttrib3f(indx:Int, x:Float, y:Float, z:Float):Void public static function vertexAttrib3f(indx:Int, x:Float, y:Float, z:Float):Void
@@ -1119,9 +1119,9 @@ class GL {
lime_gl_vertex_attrib3f(indx, x, y, z); lime_gl_vertex_attrib3f(indx, x, y, z);
} }
public static function vertexAttrib3fv(indx:Int, values:Array<Float>):Void public static function vertexAttrib3fv(indx:Int, values:Float32Array):Void
{ {
lime_gl_vertex_attrib3fv(indx, values); lime_gl_vertex_attrib3fv(indx, values.getByteBuffer());
} }
public static function vertexAttrib4f(indx:Int, x:Float, y:Float, z:Float, w:Float):Void public static function vertexAttrib4f(indx:Int, x:Float, y:Float, z:Float, w:Float):Void
@@ -1129,9 +1129,9 @@ class GL {
lime_gl_vertex_attrib4f(indx, x, y, z, w); lime_gl_vertex_attrib4f(indx, x, y, z, w);
} }
public static function vertexAttrib4fv(indx:Int, values:Array<Float>):Void public static function vertexAttrib4fv(indx:Int, values:Float32Array):Void
{ {
lime_gl_vertex_attrib4fv(indx, values); lime_gl_vertex_attrib4fv(indx, values.getByteBuffer());
} }
public static function vertexAttribPointer(indx:Int, size:Int, type:Int, normalized:Bool, stride:Int, offset:Int):Void public static function vertexAttribPointer(indx:Int, size:Int, type:Int, normalized:Bool, stride:Int, offset:Int):Void

View File

@@ -658,27 +658,29 @@ DEFINE_PRIM(lime_gl_get_active_uniform,2);
//only float arrays accepted
//passe the full arrays instead of single element
//if double should be accepted, it is highly important that whole arrays are passed
// inTranspose = true crashes on mobile and_eq should be adequately forbidden by haxe headers
value lime_gl_uniform_matrix(value inLocation, value inTranspose, value inBytes,value inCount){
int loc = val_int(inLocation);
int count = val_int(inCount);
bool trans = val_bool(inTranspose);
value lime_gl_uniform_matrix(value inLocation, value inTranspose, value inBytes,value inCount) ByteArray bytes(inBytes);
{ int size = bytes.Size();
int loc = val_int(inLocation); const float *data = (float *)bytes.Bytes();
int count = val_int(inCount); int nbElems = size / sizeof(float);
ByteArray bytes(inBytes);
int size = bytes.Size();
if (size>=count*4*4) switch(count){
{ case 2: glUniformMatrix2fv(loc,nbElems>>2 ,trans,data);
const float *data = (float *)bytes.Bytes(); case 3: glUniformMatrix3fv(loc,nbElems/9 ,trans,data);
case 4: glUniformMatrix4fv(loc,nbElems>>4 ,trans,data);
}
bool trans = val_bool(inTranspose); return alloc_null();
if (count==2)
glUniformMatrix2fv(loc,1,trans,data);
else if (count==3)
glUniformMatrix3fv(loc,1,trans,data);
else if (count==4)
glUniformMatrix4fv(loc,1,trans,data);
}
return alloc_null();
} }
DEFINE_PRIM(lime_gl_uniform_matrix,4); DEFINE_PRIM(lime_gl_uniform_matrix,4);
@@ -771,77 +773,69 @@ DEFINE_PRIM(lime_gl_uniform4iv,2);
value lime_gl_uniform1fv(value inLocation,value inArray) value lime_gl_uniform1fv(value inLocation,value inByteBuffer)
{ {
float *f = val_array_float(inArray); int loc = val_int(inLocation);
if (f)
glUniform1fv(val_int(inLocation),1,f); ByteArray bytes(inByteBuffer);
else int size = bytes.Size();
{ const float *data = (float *)bytes.Bytes();
double *d = val_array_double(inArray); int nbElems = size / sizeof(float);
if (d)
glUniform1f(val_int(inLocation),d[0]); glUniform1fv(loc,nbElems,data);
else
lime_gl_uniform1f(inLocation,val_array_i(inArray,0)); return alloc_null();
}
return alloc_null();
} }
DEFINE_PRIM(lime_gl_uniform1fv,2); DEFINE_PRIM(lime_gl_uniform1fv,2);
value lime_gl_uniform2fv(value inLocation,value inArray) value lime_gl_uniform2fv(value inLocation,value inByteBuffer)
{ {
float *f = val_array_float(inArray); int loc = val_int(inLocation);
if (f)
glUniform2fv(val_int(inLocation),1,f); ByteArray bytes(inByteBuffer);
else int size = bytes.Size();
{ const float *data = (float *)bytes.Bytes();
double *d = val_array_double(inArray); int nbElems = size / sizeof(float);
if (d)
glUniform2f(val_int(inLocation),d[0],d[1]); glUniform2fv(loc,nbElems>>1,data);
else
lime_gl_uniform2f(inLocation,val_array_i(inArray,0),val_array_i(inArray,1)); return alloc_null();
}
return alloc_null();
} }
DEFINE_PRIM(lime_gl_uniform2fv,2); DEFINE_PRIM(lime_gl_uniform2fv,2);
value lime_gl_uniform3fv(value inLocation,value inArray) value lime_gl_uniform3fv(value inLocation,value inByteBuffer)
{ {
float *f = val_array_float(inArray); int loc = val_int(inLocation);
if (f)
glUniform3fv(val_int(inLocation),1,f); ByteArray bytes(inByteBuffer);
else int size = bytes.Size();
{ const float *data = (float *)bytes.Bytes();
double *d = val_array_double(inArray); int nbElems = size / sizeof(float);
if (d)
glUniform3f(val_int(inLocation),d[0],d[1],d[2]); glUniform3fv(loc,nbElems/3,data);
else
lime_gl_uniform3f(inLocation,val_array_i(inArray,0),val_array_i(inArray,1),val_array_i(inArray,2)); return alloc_null();
}
return alloc_null();
} }
DEFINE_PRIM(lime_gl_uniform3fv,2); DEFINE_PRIM(lime_gl_uniform3fv,2);
value lime_gl_uniform4fv(value inLocation,value inArray) value lime_gl_uniform4fv(value inLocation,value inByteBuffer)
{ {
float *f = val_array_float(inArray); int loc = val_int(inLocation);
if (f)
glUniform4fv(val_int(inLocation),1,f); ByteArray bytes(inByteBuffer);
else int size = bytes.Size();
{ const float *data = (float *)bytes.Bytes();
double *d = val_array_double(inArray); int nbElems = size / sizeof(float);
if (d)
glUniform4f(val_int(inLocation),d[0],d[1],d[2],d[3]); glUniform4fv(loc,nbElems>>2,data);
else
lime_gl_uniform4f(inLocation,val_array_i(inArray,0),val_array_i(inArray,1),val_array_i(inArray,2),val_array_i(inArray,3)); return alloc_null();
}
return alloc_null();
} }
DEFINE_PRIM(lime_gl_uniform4fv,2); DEFINE_PRIM(lime_gl_uniform4fv,2);
@@ -889,41 +883,33 @@ DEFINE_PRIM(lime_gl_vertex_attrib4f,5);
value lime_gl_vertex_attrib1fv(value inLocation,value inArray) value lime_gl_vertex_attrib1fv(value inLocation,value inByteBuffer)
{ {
#ifndef EMSCRIPTEN #ifndef EMSCRIPTEN
float *f = val_array_float(inArray); int loc = val_int(inLocation);
if (f)
glVertexAttrib1fv(val_int(inLocation),f); ByteArray bytes(inByteBuffer);
else int size = bytes.Size();
{ const float *data = (float *)bytes.Bytes();
double *d = val_array_double(inArray);
if (d) glVertexAttrib1fv(loc,data);
glVertexAttrib1f(val_int(inLocation),d[0]); #endif
else return alloc_null();
lime_gl_vertex_attrib1f(inLocation,val_array_i(inArray,0));
}
#endif
return alloc_null();
} }
DEFINE_PRIM(lime_gl_vertex_attrib1fv,2); DEFINE_PRIM(lime_gl_vertex_attrib1fv,2);
value lime_gl_vertex_attrib2fv(value inLocation,value inArray) value lime_gl_vertex_attrib2fv(value inLocation,value inByteBuffer)
{ {
#ifndef EMSCRIPTEN #ifndef EMSCRIPTEN
float *f = val_array_float(inArray); int loc = val_int(inLocation);
if (f)
glVertexAttrib2fv(val_int(inLocation),f); ByteArray bytes(inByteBuffer);
else int size = bytes.Size();
{ const float *data = (float *)bytes.Bytes();
double *d = val_array_double(inArray);
if (d) glVertexAttrib2fv(loc,data);
glVertexAttrib2f(val_int(inLocation),d[0],d[1]);
else
lime_gl_vertex_attrib2f(inLocation,val_array_i(inArray,0),val_array_i(inArray,1));
}
#endif #endif
return alloc_null(); return alloc_null();
} }
@@ -931,20 +917,16 @@ DEFINE_PRIM(lime_gl_vertex_attrib2fv,2);
value lime_gl_vertex_attrib3fv(value inLocation,value inArray) value lime_gl_vertex_attrib3fv(value inLocation,value inByteBuffer)
{ {
#ifndef EMSCRIPTEN #ifndef EMSCRIPTEN
float *f = val_array_float(inArray); int loc = val_int(inLocation);
if (f)
glVertexAttrib3fv(val_int(inLocation),f); ByteArray bytes(inByteBuffer);
else int size = bytes.Size();
{ const float *data = (float *)bytes.Bytes();
double *d = val_array_double(inArray);
if (d) glVertexAttrib3fv(loc,data);
glVertexAttrib3f(val_int(inLocation),d[0],d[1],d[2]);
else
lime_gl_vertex_attrib3f(inLocation,val_array_i(inArray,0),val_array_i(inArray,1),val_array_i(inArray,2));
}
#endif #endif
return alloc_null(); return alloc_null();
} }
@@ -952,20 +934,16 @@ DEFINE_PRIM(lime_gl_vertex_attrib3fv,2);
value lime_gl_vertex_attrib4fv(value inLocation,value inArray) value lime_gl_vertex_attrib4fv(value inLocation,value inByteBuffer)
{ {
#ifndef EMSCRIPTEN #ifndef EMSCRIPTEN
float *f = val_array_float(inArray); int loc = val_int(inLocation);
if (f)
glVertexAttrib4fv(val_int(inLocation),f); ByteArray bytes(inByteBuffer);
else int size = bytes.Size();
{ const float *data = (float *)bytes.Bytes();
double *d = val_array_double(inArray);
if (d) glVertexAttrib4fv(loc,data);
glVertexAttrib4f(val_int(inLocation),d[0],d[1],d[2],d[3]);
else
lime_gl_vertex_attrib4f(inLocation,val_array_i(inArray,0),val_array_i(inArray,1),val_array_i(inArray,2),val_array_i(inArray,3));
}
#endif #endif
return alloc_null(); return alloc_null();
} }