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