/** * this demo shows how to use a gestalt renderer, completly strip it of all * functionality and than render 'raw' opengl with just a single 'drawable'. * this is a proof of concept and not the ideal way to do it.
* another reason for writing this demo was that processing 'messes' up some * opengl states, which are restored by 'gestalt'. this way one could say * that it is a bit saver to use opengl from within 'gestalt'. */ import javax.media.opengl.GL; import javax.media.opengl.glu.GLU; import gestalt.context.GLContext; import gestalt.p5.GestaltPlugIn; import gestalt.render.bin.RenderBin; import gestalt.shape.AbstractDrawable; import processing.opengl.*; GestaltPlugIn gestalt; void setup() { /* setup p5 */ size(640, 480, OPENGL); /* create gestalt plugin */ gestalt = new GestaltPlugIn(this); /* remove all gestalt presets */ RenderBin myRenderBin = new RenderBin(); gestalt.setBinRef(myRenderBin); myRenderBin.add(new RawOpenGL()); } void draw() { background(0); } class RawOpenGL extends AbstractDrawable { void draw(final GLContext theContext) { GL gl = gestalt.getGL(); GLU glu = gestalt.getGLU(); gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL.GL_PROJECTION); gl.glLoadIdentity(); glu.gluPerspective(45.0f, (float) width / (float) height, 1.0, 20.0); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity(); gl.glTranslatef( -1.5f, 0.0f, -6.0f); gl.glBegin(GL.GL_TRIANGLES); gl.glColor3f(1.0f, 0.0f, 0.0f); gl.glVertex3f(0.0f, 1.0f, 0.0f); gl.glColor3f(0.0f, 1.0f, 0.0f); gl.glVertex3f( -1.0f, -1.0f, 0.0f); gl.glColor3f(0.0f, 0.0f, 1.0f); gl.glVertex3f(1.0f, -1.0f, 0.0f); gl.glEnd(); gl.glTranslatef(3.0f, 0.0f, 0.0f); gl.glBegin(GL.GL_QUADS); gl.glColor3f(0.5f, 0.5f, 1.0f); gl.glVertex3f( -1.0f, 1.0f, 0.0f); gl.glVertex3f(1.0f, 1.0f, 0.0f); gl.glVertex3f(1.0f, -1.0f, 0.0f); gl.glVertex3f( -1.0f, -1.0f, 0.0f); gl.glEnd(); } }