Package org.mt4j.util.opengl

Source Code of org.mt4j.util.opengl.CustomPGraphicsOpenGL

/***********************************************************************
* mt4j Copyright (c) 2008 - 2010 Christopher Ruff, Fraunhofer-Gesellschaft All rights reserved.
*   This program is free software: you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation, either version 3 of the License, or
*   (at your option) any later version.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU General Public License for more details.
*
*   You should have received a copy of the GNU General Public License
*   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
***********************************************************************/
package org.mt4j.util.opengl;

import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLDrawableFactory;

import org.mt4j.util.MT4jSettings;

import processing.opengl.PGraphicsOpenGL;

/**
* The Class CustomPGraphicsOpenGL. An extension to processing's opengl renderer.
*
* @author Christopher Ruff
*/
public class CustomPGraphicsOpenGL extends PGraphicsOpenGL {
  //Overridden to allow stencil buffer use and custom multisampling
  /* (non-Javadoc)
   * @see processing.opengl.PGraphicsOpenGL#allocate()
   */
  @Override
  protected void allocate() {
    if (context == null) {
//        System.out.println("PGraphicsOpenGL.allocate() for " + width + " " + height);
//        new Exception().printStackTrace(System.out);
        // If OpenGL 2X or 4X smoothing is enabled, setup caps object for them
        GLCapabilities capabilities = new GLCapabilities();
        // Starting in release 0158, OpenGL smoothing is always enabled
        /*//     
        if (!hints[DISABLE_OPENGL_2X_SMOOTH]) {
          capabilities.setSampleBuffers(true);
          capabilities.setNumSamples(2);
        } else if (hints[ENABLE_OPENGL_4X_SMOOTH]) {
          capabilities.setSampleBuffers(true);
          capabilities.setNumSamples(4);
        }
        */
       
        //FIXME ADDED
        if (MT4jSettings.getInstance().isMultiSampling()){
          capabilities.setSampleBuffers(true);
          capabilities.setNumSamples(MT4jSettings.getInstance().getNumSamples());
//        capabilities.setNumSamples(4);
        }

        //We need a stencil buffer!
        capabilities.setStencilBits(8);
       
//        capabilities.setDepthBits(4);
//        capabilities.setDepthBits(32);

        // get a rendering surface and a context for this canvas
        GLDrawableFactory factory = GLDrawableFactory.getFactory();

        /*
        if (PApplet.platform == PConstants.LINUX) {
          GraphicsConfiguration pconfig = parent.getGraphicsConfiguration();
          System.out.println("parent config is " + pconfig);

          //      GraphicsDevice device = config.getDevice();
          //AbstractGraphicsDevice agd = new AbstractGraphicsDevice(device);
          //AbstractGraphicsConfiguration agc = factory.chooseGraphicsConfiguration(capabilities, null, null);

          AWTGraphicsConfiguration agc = (AWTGraphicsConfiguration)
          factory.chooseGraphicsConfiguration(capabilities, null, null);
          GraphicsConfiguration config = agc.getGraphicsConfiguration();
          System.out.println("agc config is " + config);
        }
        */

        drawable = factory.getGLDrawable(parent, capabilities, null);
        context = drawable.createContext(null);

        // need to get proper opengl context since will be needed below
        gl = context.getGL();
        // Flag defaults to be reset on the next trip into beginDraw().
        settingsInited = false;

      } else {
        //FIXME REMOVE THIS? can cause a "cant destroy context if its not current" error if PApplet is embedded into a swing application which causes a resize of the PApplet
        //this code recreates the opengl context with a new size if the size of the PApplet should change
        //so if we comment this out and resize the PApplet the Opengl context gets distorted...
       
        // The following three lines are a fix for Bug #1176
        // http://dev.processing.org/bugs/show_bug.cgi?id=1176
        /*
        context.destroy();
        context = drawable.createContext(null);
        gl = context.getGL();
        reapplySettings();
        */
      }
  }
 
}
TOP

Related Classes of org.mt4j.util.opengl.CustomPGraphicsOpenGL

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.