]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/renderers/Renderer.java
Fix Z-ordering of boxes
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / renderers / Renderer.java
1 package com.irtimaled.bbor.client.renderers;
2
3 import com.irtimaled.bbor.client.Camera;
4 import net.minecraft.client.renderer.BufferBuilder;
5 import net.minecraft.client.renderer.Tessellator;
6 import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
7 import net.minecraft.client.renderer.vertex.VertexFormat;
8 import org.lwjgl.opengl.GL11;
9
10 import java.awt.*;
11
12 public class Renderer {
13     private final int glMode;
14
15     static Renderer startLines() {
16         return new Renderer(GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR);
17     }
18
19     static Renderer startCircle() {
20         return new Renderer(GL11.GL_LINE_LOOP, DefaultVertexFormats.POSITION_COLOR);
21     }
22
23     static Renderer startQuads() {
24         return new Renderer(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR);
25     }
26
27     static Renderer startPoints() {
28         return new Renderer(GL11.GL_POINTS, DefaultVertexFormats.POSITION_COLOR);
29     }
30
31     public static Renderer startTextured() {
32         return new Renderer(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
33     }
34
35     private static final Tessellator tessellator = new Tessellator(2097152);
36     private static final BufferBuilder bufferBuilder = tessellator.getBuffer();
37
38     private int red;
39     private int green;
40     private int blue;
41     private int alpha;
42
43     private Renderer(int glMode, VertexFormat vertexFormat) {
44         bufferBuilder.begin(glMode, vertexFormat);
45         this.glMode = glMode;
46     }
47
48     public Renderer setColor(Color color) {
49         return setColor(color.getRed(), color.getGreen(), color.getBlue())
50                 .setAlpha(color.getAlpha());
51     }
52
53     public Renderer setColor(int red, int green, int blue) {
54         this.red = red;
55         this.green = green;
56         this.blue = blue;
57         return this;
58     }
59
60     public Renderer setAlpha(int alpha) {
61         this.alpha = alpha;
62         return this;
63     }
64
65     Renderer addPoint(OffsetPoint point) {
66         return addPoint(point.getX(), point.getY(), point.getZ());
67     }
68
69     public Renderer addPoints(OffsetPoint[] points) {
70         Renderer renderer = this;
71         for (OffsetPoint point : points) {
72             renderer = renderer.addPoint(point);
73         }
74         return renderer;
75     }
76
77     Renderer addPoint(double x, double y, double z) {
78         pos(x, y, z);
79         color();
80         end();
81         return this;
82     }
83
84     public Renderer addPoint(double x, double y, double z, double u, double v) {
85         pos(x, y, z);
86         tex(u, v);
87         color();
88         end();
89         return this;
90     }
91
92     public void render() {
93         if (glMode == GL11.GL_QUADS) {
94             bufferBuilder.sortVertexData((float) Camera.getX(), (float) Camera.getY(), (float) Camera.getZ());
95         }
96         tessellator.draw();
97     }
98
99     private void pos(double x, double y, double z) {
100         bufferBuilder.pos(x, y, z);
101     }
102
103     private void tex(double u, double v) {
104         bufferBuilder.tex(u, v);
105     }
106
107     private void color() {
108         bufferBuilder.color(red, green, blue, alpha);
109     }
110
111     private void end() {
112         bufferBuilder.endVertex();
113     }
114 }