package org.geogebra.desktop.geogebra3D.euclidian3D.opengl;
import javax.media.opengl.GL2;
import org.geogebra.common.geogebra3D.euclidian3D.EuclidianView3D;
import org.geogebra.common.geogebra3D.euclidian3D.openGL.Renderer;
import org.geogebra.common.util.debug.Log;
/**
*
* Manager using GL lists
*
* @author ggb3D
*
*/
public class ManagerGLList extends ManagerD {
// GL
protected Renderer renderer;
private JoglAndGluProvider joglAndGluProvider;
/**
* common constructor
*
* @param renderer
* @param view3D
* 3D view
*/
public ManagerGLList(Renderer renderer,
JoglAndGluProvider joglAndGluProvider, EuclidianView3D view3D) {
super();
Log.debug("ManagerGLList");
this.joglAndGluProvider = joglAndGluProvider;
init(renderer, view3D);
}
@Override
protected void setRenderer(Renderer renderer) {
this.renderer = renderer;
}
@Override
protected Renderer getRenderer() {
return renderer;
}
public RendererJogl getJogl() {
return joglAndGluProvider.getJogl();
}
// ///////////////////////////////////////////
// LISTS METHODS
// ///////////////////////////////////////////
private int genLists(int nb) {
return getJogl().getGL2().glGenLists(nb);
}
// ///////////////////////////////////////////
// GEOMETRY METHODS
// ///////////////////////////////////////////
@Override
public int startNewList(int old) {
// generates a new list
int ret = genLists(1);
getJogl().getGL2().glNewList(ret, GL2.GL_COMPILE);
return ret;
}
private void newList(int index) {
getJogl().getGL2().glNewList(index, GL2.GL_COMPILE);
}
@Override
public void endList() {
getJogl().getGL2().glEndList();
}
@Override
public void startGeometry(Type type) {
getJogl().getGL2().glBegin(getGLType(type));
}
@Override
public void endGeometry() {
getJogl().getGL2().glEnd();
}
// ///////////////////////////////////////////
// POLYGONS METHODS
// ///////////////////////////////////////////
@Override
public int startPolygons(int old) {
// generates a new list
int ret = genLists(1);
// Application.debug("ret = "+ret);
// if ret == 0, there's no list
if (ret == 0) {
return 0;
}
newList(ret);
return ret;
}
@Override
public void endPolygons() {
getJogl().getGL2().glEndList();
}
/**
* remove the polygon from gl memory
*
* @param index
*/
@Override
public void remove(int index) {
getJogl().getGL2().glDeleteLists(index, 1);
}
// ///////////////////////////////////////////
// DRAWING METHODS
// ///////////////////////////////////////////
@Override
public void draw(int index) {
getJogl().getGL2().glCallList(index);
}
@Override
public void drawLabel(int index) {
draw(index);
}
@Override
protected void texture(double x, double y) {
getJogl().getGL2().glTexCoord2d(x, y);
}
@Override
protected void setDummyTexture() {
texture(0, 0);
}
@Override
protected void normal(double x, double y, double z) {
getJogl().getGL2().glNormal3d(x, y, z);
}
@Override
protected void vertex(double x, double y, double z) {
getJogl().getGL2().glVertex3d(x, y, z);
}
@Override
protected void vertexInt(double x, double y, double z) {
// getJogl().getGL2().glVertex3i(x, y, z);
vertex(x, y, z);
}
@Override
protected void vertices(double[] vertices) {
getJogl().getGL2().glVertex3dv(vertices, 0);
}
@Override
protected void color(double r, double g, double b) {
getJogl().getGL2().glColor3d(r, g, b);
}
@Override
protected void color(double r, double g, double b, double a) {
getJogl().getGL2().glColor4d(r, g, b, a);
}
@Override
protected void pointSize(double size) {
getJogl().getGL2().glPointSize((float) size);
}
@Override
public void rectangleGeometry(double x, double y, double z, double width,
double height) {
getText().rectangle(x, y, z, width, height);
}
/*
* @Override public void rectangleBounds(int x, int y, int z, int width, int
* height){ getText().rectangleBounds(x, y, z, width, height); }
*/
}