Acme-MITHALDU-BleedingOpenGL
view release on metacpan or search on metacpan
pogl_gl_top.xs view on Meta::CPAN
/********************/
/* GPGPU Utils */
/********************/
GLint FBO_MAX = -1;
/* Get max GPGPU data size */
int gpgpu_size(void)
{
#if defined(GL_ARB_texture_rectangle) && defined(GL_ARB_texture_float) && \
defined(GL_ARB_fragment_program) && defined(GL_EXT_framebuffer_object)
if (FBO_MAX == -1)
{
if (testProc(glProgramStringARB,"glProgramStringARB") &&
testProc(glGenProgramsARB,"glGenProgramsARB") &&
testProc(glBindProgramARB,"glBindProgramARB") &&
testProc(glIsProgramARB,"glIsProgramARB") &&
testProc(glProgramLocalParameter4fvARB,"glProgramLocalParameter4fvARB") &&
pogl_gl_top.xs view on Meta::CPAN
FBO_MAX = 0;
}
}
return(FBO_MAX);
#else
return(0);
#endif
}
/* Get max square array width for a given GPGPU data size */
int gpgpu_width(int len)
{
int max = gpgpu_size();
if (max && len && !(len%3))
{
int count = len / 3;
int w = (int)sqrt(count);
while ((w <= count) && (w <= max))
{
if (!(count%w)) return(w);
w++;
}
pogl_gl_top.xs view on Meta::CPAN
#endif /* defined HAVE_GLUT or HAVE_FREEGLUT */
}
OUTPUT:
RETVAL
#//# glpHasGPGPU();
int
glpHasGPGPU()
CODE:
RETVAL = gpgpu_size();
OUTPUT:
RETVAL
#endif /* End IN_POGL_GLX_XS */
pogl_rpn.xs view on Meta::CPAN
/* Grab affine matrix */
if (!mat)
{
mat = malloc(sizeof(GLfloat) * count);
for (i=0; i<count; i++)
mat[i] = (GLfloat)SvNV(ST(i+1));
}
#if 0 /* Need to figure out why this is slower than CPU calcs */
/* Use GPU if FBOs and Fragment Programs are supported */
fbo_width = gpgpu_width(len);
if (dim == 4 && fbo_width)
{
GLuint target = GL_TEXTURE_RECTANGLE_ARB;
int w = fbo_width;
int h = len / (w*3);
/* Setup and enable FBO */
enable_fbo(oga,w,h,target,GL_RGB32F_ARB,GL_RGB,GL_FLOAT);
/* Pass affine matrix to shader */
( run in 0.629 second using v1.01-cache-2.11-cpan-e1769b4cff6 )