OpenGL
view release on metacpan or search on metacpan
lib/OpenGL/Matrix.xs view on Meta::CPAN
RETVAL = mat;
}
OUTPUT:
RETVAL
#//# $mat = OpenGL::Matrix->new_identity($size);
#//- Constructor for 2D Identity Matrix OGM
OpenGL::Matrix
new_identity(Class, size)
GLsizei size
CODE:
{
OpenGL__Matrix mat = new_matrix(size, size);
set_data_identity((GLfloat*)mat->data, size);
RETVAL = mat;
}
OUTPUT:
RETVAL
#//# $value = $mat->element($col, $row[, $new_value]);
#//- Get/Set the value of a 2D Matrix element
#//- When setting a new_value, returns the previous value
GLfloat
element(mat, col, row, ...)
OpenGL::Matrix mat
GLsizei col
GLsizei row
CODE:
{
needs_2D(mat, "element");
if (col >= mat->dimensions[0])
{
croak("OpenGL::Matrix::element col exceeds matrix width");
}
if (row >= mat->dimensions[1])
{
croak("OpenGL::Matrix::element row exceeds matrix height");
}
GLfloat * data = mat->data;
int index = get_index(mat, col, row);
RETVAL = data[index];
if (items > 3)
{
data[index] = (GLfloat)SvNV(ST(3));
}
}
OUTPUT:
RETVAL
#//# @row = $mat->row($row[, $arrayref]);
#//- Get/Set the value of a 2D Matrix row
#//- When setting new values, returns the previous row values
void
row(mat, row, ...)
OpenGL::Matrix mat
GLsizei row
PPCODE:
{
needs_2D(mat, "row");
if (row >= mat->dimensions[1])
{
croak("OpenGL::Matrix::element row exceeds matrix height");
}
GLfloat * data = mat->data;
int cols = mat->dimensions[0];
int index = row * cols;
EXTEND(sp, cols);
int i=0;
for (; i<cols; i++)
{
PUSHs(sv_2mortal(newSViv(data[index++])));
}
if (items > 2)
{
SV * sv = ST(2);
fetch_arrayref(data+index, cols, sv, "row", "arrayref");
}
}
#//# @col = $mat->column($col[, $arrayref]);
#//- Get/Set the value of a 2D Matrix column
#//- When setting new values, returns the previous column values
void
column(mat, col, ...)
OpenGL::Matrix mat
GLsizei col
PPCODE:
{
needs_2D(mat, "column");
int cols = mat->dimensions[0];
if (col >= cols)
{
croak("OpenGL::Matrix::element col exceeds matrix width");
}
GLfloat * data = mat->data;
int rows = mat->dimensions[1];
int index = col;
EXTEND(sp, rows);
int i=0;
for (; i<rows; i++)
{
PUSHs(sv_2mortal(newSViv(data[index])));
index += cols;
}
if (items > 2)
{
GLfloat array[rows];
SV * sv = ST(2);
fetch_arrayref(array, rows, sv, "column", "arrayref");
int offset = col;
for (i=0; i<rows; i++)
{
data[offset] = array[i];
offset += cols;
}
}
}
#//# $status = $mat->set_quaternion($degrees, @vec|$vec);
#//- Set 4x4 Quaternion Matrix; returns 0 if successful
GLint
set_quaternion(mat, degrees, ...)
OpenGL::Matrix mat
GLfloat degrees
CODE:
{
needs_4x4(mat, "set_quaternion");
GLfloat vec[3];
int count = items - 2;
if (count == 3)
{
int i=0;
for (; i<count; i++)
{
vec[i] = (GLfloat)SvNV(ST(i+2));
}
}
else if (count == 1)
{
SV * sv = ST(2);
( run in 0.669 second using v1.01-cache-2.11-cpan-5511b514fd6 )