mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-10 05:41:51 +09:00
Former-commit-id: 1647fa32ef6894bd7db44f741f07c2f4dcdf9054 Former-commit-id: 0e5810dcfbe1fd59b13e7cabe9f1e93c5542da2d
112 lines
3.2 KiB
Java
112 lines
3.2 KiB
Java
package org.newdawn.slick.svg;
|
|
|
|
import org.newdawn.slick.Color;
|
|
import org.newdawn.slick.Graphics;
|
|
import org.newdawn.slick.geom.Shape;
|
|
import org.newdawn.slick.geom.ShapeRenderer;
|
|
import org.newdawn.slick.geom.TexCoordGenerator;
|
|
import org.newdawn.slick.opengl.TextureImpl;
|
|
import org.newdawn.slick.opengl.renderer.Renderer;
|
|
import org.newdawn.slick.opengl.renderer.SGL;
|
|
|
|
/**
|
|
* A very primtive implementation for rendering a diagram. This simply
|
|
* sticks the shapes on the screen in the right fill and stroke colours
|
|
*
|
|
* @author kevin
|
|
*/
|
|
public class SimpleDiagramRenderer {
|
|
/** The renderer to use for all GL operations */
|
|
protected static SGL GL = Renderer.get();
|
|
|
|
/** The diagram to be rendered */
|
|
public Diagram diagram;
|
|
/** The display list representing the diagram */
|
|
public int list = -1;
|
|
|
|
/**
|
|
* Create a new simple renderer
|
|
*
|
|
* @param diagram The diagram to be rendered
|
|
*/
|
|
public SimpleDiagramRenderer(Diagram diagram) {
|
|
this.diagram = diagram;
|
|
}
|
|
|
|
/**
|
|
* Render the diagram to the given graphics context
|
|
*
|
|
* @param g The graphics context to which we should render the diagram
|
|
*/
|
|
public void render(Graphics g) {
|
|
// last list generation
|
|
if (list == -1) {
|
|
list = GL.glGenLists(1);
|
|
GL.glNewList(list, SGL.GL_COMPILE);
|
|
render(g, diagram);
|
|
GL.glEndList();
|
|
}
|
|
|
|
GL.glCallList(list);
|
|
|
|
TextureImpl.bindNone();
|
|
}
|
|
|
|
/**
|
|
* Utility method to render a diagram in immediate mode
|
|
*
|
|
* @param g The graphics context to render to
|
|
* @param diagram The diagram to render
|
|
*/
|
|
public static void render(Graphics g, Diagram diagram) {
|
|
for (int i=0;i<diagram.getFigureCount();i++) {
|
|
Figure figure = diagram.getFigure(i);
|
|
|
|
if (figure.getData().isFilled()) {
|
|
if (figure.getData().isColor(NonGeometricData.FILL)) {
|
|
g.setColor(figure.getData().getAsColor(NonGeometricData.FILL));
|
|
g.fill(diagram.getFigure(i).getShape());
|
|
g.setAntiAlias(true);
|
|
g.draw(diagram.getFigure(i).getShape());
|
|
g.setAntiAlias(false);
|
|
}
|
|
|
|
String fill = figure.getData().getAsReference(NonGeometricData.FILL);
|
|
if (diagram.getPatternDef(fill) != null){
|
|
System.out.println("PATTERN");
|
|
}
|
|
if (diagram.getGradient(fill) != null) {
|
|
Gradient gradient = diagram.getGradient(fill);
|
|
Shape shape = diagram.getFigure(i).getShape();
|
|
TexCoordGenerator fg = null;
|
|
if (gradient.isRadial()) {
|
|
fg = new RadialGradientFill(shape, diagram.getFigure(i).getTransform(), gradient);
|
|
} else {
|
|
fg = new LinearGradientFill(shape, diagram.getFigure(i).getTransform(), gradient);
|
|
}
|
|
|
|
Color.white.bind();
|
|
ShapeRenderer.texture(shape, gradient.getImage(), fg);
|
|
}
|
|
}
|
|
|
|
if (figure.getData().isStroked()) {
|
|
if (figure.getData().isColor(NonGeometricData.STROKE)) {
|
|
g.setColor(figure.getData().getAsColor(NonGeometricData.STROKE));
|
|
g.setLineWidth(figure.getData().getAsFloat(NonGeometricData.STROKE_WIDTH));
|
|
g.setAntiAlias(true);
|
|
g.draw(diagram.getFigure(i).getShape());
|
|
g.setAntiAlias(false);
|
|
g.resetLineWidth();
|
|
}
|
|
}
|
|
|
|
// DEBUG VERSION
|
|
// g.setColor(Color.black);
|
|
// g.draw(diagram.getFigure(i).getShape());
|
|
// g.setColor(Color.red);
|
|
// g.fill(diagram.getFigure(i).getShape());
|
|
}
|
|
}
|
|
}
|