Acme-MITHALDU-BleedingOpenGL
view release on metacpan or search on metacpan
pogl_gl_top.xs view on Meta::CPAN
glBindTexture(target,oga->tex_handle[1]);
glTexParameteri(target,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(target,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(target,GL_TEXTURE_WRAP_S,GL_CLAMP);
glTexParameteri(target,GL_TEXTURE_WRAP_T,GL_CLAMP);
glTexImage2D(target,0,pixel_type,w,h,0,
pixel_format,element_size,0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT,target,oga->tex_handle[1],0);
status = glCheckFramebufferStatusEXT(GL_RENDERBUFFER_EXT);
if (status) croak("enable_fbo status: %04X\n",status);
}
else
{
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,oga->fbo_handle);
}
/* Load data */
glBindTexture(target,oga->tex_handle[0]);
glTexImage2D(target,0,pixel_type,w,h,0,
pixel_format,element_size,oga->data);
glEnable(target);
//glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glBindTexture(target,oga->tex_handle[0]);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);
}
/* Disable an FBO bound to an OGA */
void disable_fbo(oga_struct * oga)
{
if (!oga) return;
if (oga->fbo_handle)
{
glDisable(oga->target);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);
}
}
#endif
MODULE = Acme::MITHALDU::BleedingOpenGL::GL::Top PACKAGE = Acme::MITHALDU::BleedingOpenGL
#// Test for GL
int
_have_gl()
CODE:
#ifdef HAVE_GL
RETVAL = 1;
#else
RETVAL = 0;
#endif /* defined HAVE_GL */
OUTPUT:
RETVAL
#// Test for GLU
int
_have_glu()
CODE:
#ifdef HAVE_GLU
RETVAL = 1;
#else
RETVAL = 0;
#endif /* defined HAVE_GLU */
OUTPUT:
RETVAL
#// Test for GLUT
int
_have_glut()
CODE:
#if defined(HAVE_GLUT) || defined(HAVE_FREEGLUT)
RETVAL = 1;
#else
RETVAL = 0;
#endif /* defined HAVE_GLUT or HAVE_FREEGLUT */
OUTPUT:
RETVAL
#// Test for FreeGLUT
int
_have_freeglut()
CODE:
#if defined(HAVE_FREEGLUT)
RETVAL = 1;
#else
RETVAL = 0;
#endif /* defined HAVE_FREEGLUT */
OUTPUT:
RETVAL
#// Test for GLX
int
_have_glx()
CODE:
#ifdef HAVE_GLX
RETVAL = 1;
#else
RETVAL = 0;
#endif /* defined HAVE_GLX */
OUTPUT:
RETVAL
#// Test for GLpc
int
_have_glp()
CODE:
#ifdef HAVE_GLpc
RETVAL = 1;
#else
RETVAL = 0;
#endif /* defined HAVE_GLpc */
OUTPUT:
RETVAL
# /* 13000 lines snipped */
##################### GLU #########################
############################## GLUT #########################
# /* This is assigned to GLX for now. The glp*() functions should be split out */
#ifdef IN_POGL_GLX_XS
# /* The following material is directly copied from Stan Melax's original OpenGL-0.4 */
int
__had_dbuffer_hack()
#ifdef HAVE_GLpc /* GLX */
#// $ID = glpcOpenWindow($x,$y,$w,$h,$pw,$steal,$event_mask,@attribs);
HV *
glpcOpenWindow(x,y,w,h,pw,event_mask,steal, ...)
int x
int y
int w
int h
int pw
long event_mask
int steal
CODE:
{
XEvent event;
Window pwin = (Window)pw;
unsigned int err;
int *attributes = default_attributes + 1;
int *a_buf = NULL;
RETVAL = newHV(); /* Create hash to return GL Object info */
if(items > NUM_ARG){
int i;
a_buf = (int *) malloc((items-NUM_ARG+2) * sizeof(int));
a_buf[0] = GLX_DOUBLEBUFFER; /* Preallocate */
attributes = a_buf + 1;
for (i=NUM_ARG; i<items; i++) {
attributes[i-NUM_ARG] = SvIV(ST(i));
}
attributes[items-NUM_ARG] = None;
}
if (debug) {
int i;
for (i=0; attributes[i] != None; i++) {
printf("att=%d %d\n", i, attributes[i]);
pogl_gl_top.xs view on Meta::CPAN
#endif /* defined HAVE_GLX */
if (!pwin) {
pwin = RootWindow(dpy, vi->screen);
if (debug) printf("Using root as parent window 0x%x\n", pwin);
}
if (steal) {
win = nativeWindowId(dpy, pwin); /* What about depth/visual */
} else {
win = XCreateWindow(dpy, pwin,
x, y, w, h,
0, vi->depth, InputOutput, vi->visual,
CWBorderPixel|CWColormap|CWEventMask, &swa);
/* NOTE: PDL code had CWBackPixel above */
}
if (!win) {
croak("No Window");
} else {
if (debug) printf("win = 0x%x\n", win);
}
XMapWindow(dpy, win);
#ifndef HAVE_GLX /* For OS/2 GLX emulation stuff -chm 2009.09.14 */
/* On OS/2: cannot create a context before mapping something... */
/* create a GLX context */
ctx = glXCreateContext(dpy, vi, 0, GL_TRUE);
if (!ctx)
croak("No context!\n");
LastEventMask = event_mask;
#else /* HAVE_GLX, this is the default branch */
if ( (event_mask & StructureNotifyMask) && !steal ) {
XIfEvent(dpy, &event, WaitForNotify, (char*)win);
}
#endif /* not defined HAVE_GLX */
/* connect the context to the window */
if (!glXMakeCurrent(dpy, win, ctx))
croak("Non current");
if (debug)
printf("Display=0x%x Window=0x%x Context=0x%x\n",dpy, win, ctx);
/* Create the GL object hash information */
hv_store(RETVAL, "Display", strlen("Display"), newSViv(PTR2IV(dpy)), 0);
hv_store(RETVAL, "Window", strlen("Window"), newSViv( (IV) win ), 0);
hv_store(RETVAL, "Context", strlen("Context"), newSViv(PTR2IV(ctx)), 0);
hv_store(RETVAL, "GL_Version",strlen("GL_Version"),
newSVpv((char *) glGetString(GL_VERSION),0),0);
hv_store(RETVAL, "GL_Vendor",strlen("GL_Vendor"),
newSVpv((char *) glGetString(GL_VENDOR),0),0);
hv_store(RETVAL, "GL_Renderer",strlen("GL_Renderer"),
newSVpv((char *) glGetString(GL_RENDERER),0),0);
/* clear the buffer */
glClearColor(0,0,0,1);
while ( (err = glGetError()) != GL_NO_ERROR ) {
printf("ERROR issued in GL %s\n", gluErrorString(err));
}
}
OUTPUT:
RETVAL
#// glpRasterFont(name,base,number,d)
int
glpRasterFont(name,base,number,d)
char *name
int base
int number
Display *d
CODE:
{
XFontStruct *fi;
int lb;
fi = XLoadQueryFont(d,name);
if(fi == NULL) {
die("No font %s found",name);
}
lb = glGenLists(number);
if(lb == 0) {
die("No display lists left for font %s (need %d)",name,number);
}
glXUseXFont(fi->fid, base, number, lb);
RETVAL=lb;
}
OUTPUT:
RETVAL
#// glpPrintString(base,str);
void
glpPrintString(base,str)
int base
char *str
CODE:
{
glPushAttrib(GL_LIST_BIT);
glListBase(base);
glCallLists(strlen(str),GL_UNSIGNED_BYTE,(GLubyte*)str);
glPopAttrib();
}
#// glpDisplay();
Display *
glpDisplay(name)
char *name
CODE:
/* get a connection */
if (!dpy_open) {
dpy = XOpenDisplay(name);
dpy_open = 1;
}
if (!dpy)
croak("No display!");
RETVAL = dpy;
OUTPUT:
RETVAL
#// glpMoveResizeWindow($x, $y, $width, $height[, $winID[, $display]]);
void
glpMoveResizeWindow(x, y, width, height, w=win, d=dpy)
void* d
GLXDrawable w
int x
int y
unsigned int width
unsigned int height
#// glpMoveWindow($x, $y[, $winID[, $display]]);
void
glpMoveWindow(x, y, w=win, d=dpy)
void* d
GLXDrawable w
int x
int y
#// glpResizeWindow($width, $height[, $winID[, $display]])
void
glpResizeWindow(width, height, w=win, d=dpy)
void* d
GLXDrawable w
unsigned int width
unsigned int height
# If glpOpenWindow was used then glXSwapBuffers should be called
# without parameters (i.e. use the default parameters)
#// glXSwapBuffers([$winID[, $display]])
void
glXSwapBuffers(w=win,d=dpy)
void * d
GLXDrawable w
CODE:
{
glXSwapBuffers(d,w);
}
#// XPending([$display]);
int
XPending(d=dpy)
void * d
CODE:
{
RETVAL = XPending(d);
}
OUTPUT:
RETVAL
#// glpXNextEvent([$display]);
void
glpXNextEvent(d=dpy)
void * d
PPCODE:
{
XEvent event;
char buf[10];
KeySym ks;
XNextEvent(d,&event);
switch(event.type) {
case ConfigureNotify:
EXTEND(sp,3);
PUSHs(sv_2mortal(newSViv(event.type)));
PUSHs(sv_2mortal(newSViv(event.xconfigure.width)));
PUSHs(sv_2mortal(newSViv(event.xconfigure.height)));
break;
case KeyPress:
case KeyRelease:
EXTEND(sp,2);
PUSHs(sv_2mortal(newSViv(event.type)));
XLookupString(&event.xkey,buf,sizeof(buf),&ks,0);
buf[0]=(char)ks;buf[1]='\0';
PUSHs(sv_2mortal(newSVpv(buf,1)));
break;
case ButtonPress:
case ButtonRelease:
EXTEND(sp,7);
PUSHs(sv_2mortal(newSViv(event.type)));
PUSHs(sv_2mortal(newSViv(event.xbutton.button)));
PUSHs(sv_2mortal(newSViv(event.xbutton.x)));
PUSHs(sv_2mortal(newSViv(event.xbutton.y)));
PUSHs(sv_2mortal(newSViv(event.xbutton.x_root)));
PUSHs(sv_2mortal(newSViv(event.xbutton.y_root)));
PUSHs(sv_2mortal(newSViv(event.xbutton.state)));
break;
case MotionNotify:
EXTEND(sp,4);
PUSHs(sv_2mortal(newSViv(event.type)));
PUSHs(sv_2mortal(newSViv(event.xmotion.state)));
PUSHs(sv_2mortal(newSViv(event.xmotion.x)));
PUSHs(sv_2mortal(newSViv(event.xmotion.y)));
break;
case Expose:
default:
EXTEND(sp,1);
PUSHs(sv_2mortal(newSViv(event.type)));
break;
}
}
#// glpXQueryPointer([$winID[, $display]]);
void
glpXQueryPointer(w=win,d=dpy)
void * d
GLXDrawable w
PPCODE:
{
pogl_gl_top.xs view on Meta::CPAN
{
GLsizei w,h;
int d,i;
char buf[250];
unsigned char *image;
FILE *fp;
char *ret;
fp=fopen(file,"r");
if(!fp) croak("couldn't open file %s",file);
ret = fgets(buf,250,fp); /* P3 */
if (buf[0] != 'P' || buf[1] != '3')
croak("Format is not P3 in file %s",file);
ret = fgets(buf,250,fp);
while (buf[0] == '#' && fgets(buf,250,fp)); /* Empty */
if (2 != sscanf(buf,"%d%d",&w,&h))
croak("couldn't read image size from file %s",file);
if (1 != fscanf(fp,"%d",&d))
croak("couldn't read image depth from file %s",file);
if(d != 255)
croak("image depth != 255 in file %s unsupported",file);
if(w>10000 || h>10000)
croak("suspicious size w=%d d=%d in file %s", w, d, file);
New(1431, image, w*h*3, unsigned char);
for(i=0;i<w*h*3;i++) {
int v;
if (1 != fscanf(fp,"%d",&v)) {
Safefree(image);
croak("Error reading number #%d of %d from file %s", i, w*h*3,file);
}
image[i]=(unsigned char) v;
}
fclose(fp);
glTexImage2D(GL_TEXTURE_2D, 0, 3, w,h,
0, GL_RGB, GL_UNSIGNED_BYTE,image);
}
#//# glpHasGLUT();
int
glpHasGLUT()
CODE:
{
#if defined(HAVE_GLUT) || defined(HAVE_FREEGLUT)
RETVAL = 1;
#else
RETVAL = 0;
#endif /* defined HAVE_GLUT or HAVE_FREEGLUT */
}
OUTPUT:
RETVAL
#//# glpHasGPGPU();
int
glpHasGPGPU()
CODE:
RETVAL = gpgpu_size();
OUTPUT:
RETVAL
#endif /* End IN_POGL_GLX_XS */
( run in 2.431 seconds using v1.01-cache-2.11-cpan-98e64b0badf )