1 /* 2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab 3 * Copyright (C) 2009-2011 - DIGITEO - Pierre Lando 4 * 5 * Copyright (C) 2012 - 2016 - Scilab Enterprises 6 * 7 * This file is hereby licensed under the terms of the GNU GPL v2.0, 8 * pursuant to article 5.3.4 of the CeCILL v.2.1. 9 * This file was originally licensed under the terms of the CeCILL v2.1, 10 * and continues to be available under such terms. 11 * For more information, see the COPYING file which you should have received 12 * along with this program. 13 */ 14 15 package org.scilab.forge.scirenderer.implementation.jogl.renderer; 16 17 import org.scilab.forge.scirenderer.Drawer; 18 import org.scilab.forge.scirenderer.implementation.jogl.JoGLDrawingTools; 19 import org.scilab.forge.scirenderer.renderer.Renderer; 20 21 import com.jogamp.opengl.GL2; 22 23 /** 24 * @author Pierre Lando 25 */ 26 public class JoGLRenderer implements Renderer { 27 28 /** 29 * The current drawer. 30 */ 31 private Drawer drawer; 32 33 /** 34 * The OpenGl display list name. 35 */ 36 private Integer glName; 37 38 /** 39 * Store the display list up to date status. 40 */ 41 private boolean upToDate; 42 43 /** 44 * Default constructor. 45 * The constructor is package : only {@link JoGLRendererManager} can instantiate this object. 46 */ JoGLRenderer()47 JoGLRenderer() { 48 upToDate = false; 49 drawer = null; 50 glName = null; 51 } 52 53 @Override setDrawer(Drawer drawer)54 public void setDrawer(Drawer drawer) { 55 this.drawer = drawer; 56 upToDate = false; 57 } 58 59 @Override getDrawer()60 public Drawer getDrawer() { 61 return drawer; 62 } 63 64 @Override reload()65 public void reload() { 66 glName = null; 67 upToDate = false; 68 } 69 70 /** 71 * Perform a draw to the given canvas. 72 * @param drawingTools the given drawing tools. 73 */ draw(JoGLDrawingTools drawingTools)74 public void draw(JoGLDrawingTools drawingTools) { 75 if (drawingTools.getCanvas().getJoGLParameters().useDisplayList()) { 76 synchronize(drawingTools); 77 GL2 gl = drawingTools.getGl().getGL2(); 78 gl.glCallList(glName); 79 } else { 80 if (drawer != null) { 81 drawer.draw(drawingTools); 82 } 83 } 84 } 85 86 /** 87 * Synchronize the display list. 88 * @param drawingTools drawing tools. 89 */ synchronize(JoGLDrawingTools drawingTools)90 private void synchronize(JoGLDrawingTools drawingTools) { 91 GL2 gl = drawingTools.getGl().getGL2(); 92 93 // Check glName. 94 if ((glName == null) || !(gl.glIsList(glName))) { 95 glName = gl.glGenLists(1); 96 upToDate = false; 97 } 98 99 // Check up to date. 100 if (!upToDate) { 101 gl.glNewList(glName, GL2.GL_COMPILE); 102 103 if (drawer != null) { 104 drawer.draw(drawingTools); 105 } 106 107 gl.glEndList(); 108 upToDate = true; 109 } 110 } 111 112 /** 113 * Dispose resources. 114 * @param gl the current OpenGl context. 115 */ dispose(GL2 gl)116 void dispose(GL2 gl) { 117 if ((glName != null) && gl.glIsList(glName)) { 118 gl.glDeleteLists(glName, 1); 119 glName = null; 120 upToDate = false; 121 } 122 } 123 } 124