OpenGL-GLU

 view release on metacpan or  search on metacpan

GLU.xs  view on Meta::CPAN

    GLint   tknot_count
    void *  tknot
    GLint   s_stride
    GLint   t_stride
    void *  ctrlarray
    GLint   sorder
    GLint   torder
    GLenum  type
    CODE:
    gluNurbsSurface(nurb, sknot_count, sknot, tknot_count, tknot, s_stride, t_stride, ctrlarray, sorder, torder, type);

#//# gluOrtho2D($left, $right, $bottom, $top);
void
gluOrtho2D(left, right, bottom, top)
    GLdouble        left
    GLdouble        right
    GLdouble        bottom
    GLdouble        top

#// gluPartialDisk(quad, inner, outer, slices, loops, start, sweep);
void
gluPartialDisk(quad, inner, outer, slices, loops, start, sweep)
    GLUquadricObj*  quad
    GLdouble        inner
    GLdouble        outer
    GLint   slices
    GLint   loops
    GLdouble        start
    GLdouble        sweep

#//# gluPerspective($fovy, $aspect, $zNear, $zFar);
void
gluPerspective(fovy, aspect, zNear, zFar)
    GLdouble        fovy
    GLdouble        aspect
    GLdouble        zNear
    GLdouble        zFar

#//# gluPickMatrix_p($x, $y, $delX, $delY, $m1,$m2,$m3,$m4);
void
gluPickMatrix_p(x, y, delX, delY, m1,m2,m3,m4)
    GLdouble        x
    GLdouble        y
    GLdouble        delX
    GLdouble        delY
    CODE:
{
    GLint m[4];
    int i;
    for (i=0;i<4;i++)
        m[i] = SvIV(ST(i+4));
    gluPickMatrix(x, y, delX, delY, &m[0]);
}

#//# gluProject_p($objx, $objy, $objz, @m4x4, @o4x4, $v1,$v2,$v3,$v4);
void
gluProject_p(objx, objy, objz, m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16, o1,o2,o3,o4,o5,o6,o7,o8,o9,o10,o11,o12,o13,o14,o15,o16, v1,v2,v3,v4)
    GLdouble        objx
    GLdouble        objy
    GLdouble        objz
    PPCODE:
{
    GLdouble m[16], p[16], winx, winy, winz;
    GLint v[4];
    int i;
    for (i=0;i<16;i++)
        m[i] = SvNV(ST(i+3));
    for (i=0;i<16;i++)
        p[i] = SvNV(ST(i+3+16));
    for (i=0;i<4;i++)
        v[i] = SvIV(ST(i+3+16+16));
    i = gluProject(objx, objy, objz, m, p, v, &winx, &winy, &winz);
    if (i) {
        EXTEND(sp, 3);
        PUSHs(sv_2mortal(newSVnv(winx)));
        PUSHs(sv_2mortal(newSVnv(winy)));
        PUSHs(sv_2mortal(newSVnv(winz)));
    }
}

#// gluPwlCurve_c(nurb, count, data, stride, type);
void
gluPwlCurve_c(nurb, count, data, stride, type)
    GLUnurbsObj *   nurb
    GLint   count
    void *  data
    GLint   stride
    GLenum  type
    CODE:
    gluPwlCurve(nurb, count, data, stride, type);


#// gluQuadricDrawStyle(quad, draw);
void
gluQuadricDrawStyle(quad, draw)
    GLUquadricObj * quad
    GLenum  draw

#// gluQuadricNormals(quad, normal);
void
gluQuadricNormals(quad, normal)
    GLUquadricObj * quad
    GLenum  normal

#// gluQuadricOrientation(quad, orientation);
void
gluQuadricOrientation(quad, orientation)
    GLUquadricObj * quad
    GLenum  orientation

#// gluQuadricTexture(quad, texture);
void
gluQuadricTexture(quad, texture)
    GLUquadricObj * quad
    GLboolean       texture

#//# gluScaleImage_s($format, $wIn, $hIn, $typeIn, (PACKED)dataIn, $wOut, $hOut, $typeOut, (PACKED)dataOut);
GLint
gluScaleImage_s(format, wIn, hIn, typeIn, dataIn, wOut, hOut, typeOut, dataOut)
    GLenum  format
    GLsizei wIn

GLU.xs  view on Meta::CPAN

    GLdouble        y
    GLdouble        z
    CODE:
{
    int i;
    int j = 3;
    AV * vds = tess->vertex_datas;
    int size = 3 + (tess->do_colors ? 4 : 0) + (tess->do_normals ? 3 : 0);
    GLdouble* data = malloc(sizeof(GLdouble) * size);
    if (!vds) croak("Missing vertex data storage during gluTessVertex");
    if (data == NULL) croak("Couldn't allocate vertex during gluTessVertex");
    data[0] = x;
    data[1] = y;
    data[2] = z;
    av_push(vds, newSViv(PTR2IV(data))); /* store for freeing later */
    if (tess->do_colors) {
        int J = j + 4;
        if (tess->do_normals) {
            if (items != 12 && items != 11) croak("gluTessVertex_p(tess, x,y,z, r,g,b,a, nx,ny,nz [,polygon_data])");
        } else {
            if (items != 9  && items != 8 ) croak("gluTessVertex_p(tess, x,y,z, r,g,b,a [,polygon_data])");
        }
        for ( ; j < J; j++) data[j] = (GLdouble)SvNV(ST(j+1));
    } else {
        if (tess->do_normals) {
            if (items != 8 && items != 7) croak("gluTessVertex_p(tess, x,y,z, nx,ny,nz [,polygon_data])");
        } else {
            if (items != 5 && items != 4) croak("gluTessVertex_p(tess, x,y,z [,polygon_data])");
        }
    }
    if (tess->do_normals) {
        int J = j + 3;
        for ( ; j < J; j++) data[j] = (GLdouble)SvNV(ST(j+1));
    }
    if (tess->use_vertex_data) {
        PGLUtess * opaque = malloc(sizeof(PGLUtess));
        if (!opaque) croak("Couldn't allocate storage for vertex opaque data");
        opaque->triangulator     = tess->triangulator;
        opaque->vertex_datas     = tess->vertex_datas;
        opaque->vertex_callback  = tess->vertex_callback;
        opaque->combine_callback = tess->combine_callback;
        opaque->vertex_data      = data;
        opaque->polygon_data     = (items > j+1) ? newSVsv(ST(j+1)) : 0;
        opaque->use_vertex_data  = TRUE;
        opaque->do_colors        = tess->do_colors;
        opaque->do_normals       = tess->do_normals;
        if (! tess->tess_datas) tess->tess_datas = newAV();
        av_push(tess->tess_datas, newSViv(PTR2IV(opaque)));
        gluTessVertex(tess->triangulator, data, (void*)opaque);
    } else {
        gluTessVertex(tess->triangulator, data, data);
    }
}

#//# gluUnProject_p($winx,$winy,$winz, @m4x4, @o4x4, $v1,$v2,$v3,$v4);
void
gluUnProject_p(winx,winy,winz, m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15,m16, o1,o2,o3,o4,o5,o6,o7,o8,o9,o10,o11,o12,o13,o14,o15,o16, v1,v2,v3,v4)
    GLdouble        winx
    GLdouble        winy
    GLdouble        winz
    PPCODE:
{
    GLdouble m[16], p[16], objx, objy, objz;
    GLint v[4];
    int i;

    for (i=0;i<16;i++)
        m[i] = SvNV(ST(i+3));
    for (i=0;i<16;i++)
        p[i] = SvNV(ST(i+3+16));
    for (i=0;i<4;i++)
        v[i] = SvIV(ST(i+3+16+16));

    i = gluUnProject(winx,winy,winz, m, p, v, &objx,&objy,&objz);

    if (i) {
        EXTEND(sp, 3);
        PUSHs(sv_2mortal(newSVnv(objx)));
        PUSHs(sv_2mortal(newSVnv(objy)));
        PUSHs(sv_2mortal(newSVnv(objz)));
    }
}

INCLUDE: const-xs.inc



( run in 0.882 second using v1.01-cache-2.11-cpan-5511b514fd6 )