Accmulation buffer with OpenGL

New Message Reply Date view Thread view Subject view Author view

Olivier Schreiber (olivier++at++sgidev.mdc.com)
Fri, 13 Dec 1996 09:14:19 -0800


Hi,
I might have missed on the december mailings about this topic
but after checking the previous months in the archive I cannot
yet find an example of accumulation buffer with OpenGL performer.

With help from Nicolas Gauvin, I have a working callback in Iris GL
but converting it to OpenGL does not yield any result.
Any hint at what I am doing wrong?
(I am running on IR 6.2, performer 2.1
Thanks in advance.
Here is the Callback both in OpenGL and Iris GL:

#include <stdlib.h>
#include <Performer/pf.h>
#include <gl.h>
void printvis(Display*,XVisualInfo*);

#ifdef OPENGL
void DrawFunc(pfChannel *chan, void *data)
{
 static long count = 0;
 float multiplier,geom;
int attribList[]={GLX_RGBA,GLX_DOUBLEBUFFER,
GLX_ACCUM_RED_SIZE,12,
GLX_ACCUM_GREEN_SIZE,12,
GLX_ACCUM_BLUE_SIZE,12,
GLX_ACCUM_ALPHA_SIZE,12,
None};
Display *dpy;
XVisualInfo *vis;
   if (count==0) {
dpy = pfGetCurWSConnection();
printf("dpy=pfGetCurWSConnection=0x%x\n",dpy);
vis=glXChooseVisual(dpy,0,attribList );
printf("vis=0x%x\n",vis);
printvis(dpy,vis);
   glClear(GL_ACCUM_BUFFER_BIT);
   }
/* glDrawBuffer(GL_FRONT); */
/* glReadBuffer(GL_FRONT); */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
pfDraw();
/* post-draw */
   multiplier = 0.8f;
   glAccum( GL_MULT, multiplier );
   glAccum( GL_ACCUM, 1.0f );
   glAccum( GL_ACCUM, multiplier );
   geom = geom*multiplier + 1.0f;
   glAccum(GL_RETURN, 1.0f/geom);
count+=1;
}
void printvis(Display *dpy,XVisualInfo *vis){
int value ;
glXGetConfig(dpy,vis,GLX_DOUBLEBUFFER,&value );
printf("GLX_DOUBLEBUFFER=%d\n",value);
glXGetConfig(dpy,vis,GLX_RED_SIZE,&value );
printf("GLX_RED_SIZE=%d\n",value);
glXGetConfig(dpy,vis,GLX_GREEN_SIZE,&value );
printf("GLX_GREEN_SIZE=%d\n",value);
glXGetConfig(dpy,vis,GLX_BLUE_SIZE,&value );
printf("GLX_BLUE_SIZE=%d\n",value);
glXGetConfig(dpy,vis,GLX_ALPHA_SIZE,&value );
printf("GLX_ALPHA_SIZE=%d\n",value);
glXGetConfig(dpy,vis,GLX_ACCUM_RED_SIZE,&value );
printf("GLX_ACCUM_RED_SIZE=%d\n",value);
glXGetConfig(dpy,vis,GLX_ACCUM_GREEN_SIZE,&value );
printf("GLX_ACCUM_GREEN_SIZE=%d\n",value);
glXGetConfig(dpy,vis,GLX_ACCUM_BLUE_SIZE,&value );
printf("GLX_ACCUM_BLUE_SIZE=%d\n",value);
glXGetConfig(dpy,vis,GLX_ACCUM_ALPHA_SIZE,&value );
printf("GLX_ACCUM_ALPHA_SIZE=%d\n",value);
glXGetConfig(dpy,vis,GLX_DEPTH_SIZE,&value );
printf("GLX_DEPTH_SIZE=%d\n",value);
}
#else
void DrawFunc(pfChannel *chan, void *data)
{
 float multiplier,geom;
 static int first = TRUE;
   if (first) {
      acsize( 12 );
      gconfig();
      acbuf( AC_CLEAR, 0.0f );
      first = FALSE;
   }
   clear();
   pfDraw();
/* post-draw */
   multiplier = 0.8f;
   acbuf( AC_MULT, multiplier );
   acbuf( AC_ACCUMULATE, 1.0f );
   geom = geom*multiplier + 1.0f;
   acbuf(AC_RETURN, 1.0f/geom);
   acbuf(AC_RETURN, 1.0f);
}
#endif

-- 
Olivier Schreiber olivier++at++sgidev.mdc.com 310 593 9739 FAX 593 0296
Military Transport Aircraft, McDonnell Douglas Corporation
Mail Code D041/0056, 2401 E. Wardlow Road Long Beach, CA 90807-5309
=======================================================================
List Archives, FAQ, FTP:  http://www.sgi.com/Technology/Performer/
            Submissions:  info-performer++at++sgi.com
        Admin. requests:  info-performer-request++at++sgi.com

New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2.0b2 on Mon Aug 10 1998 - 17:54:09 PDT

This message has been cleansed for anti-spam protection. Replace '++at++' in any mail addresses with the '@' symbol.