]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/renderers/RenderHelper.java
6cb77eb6f85a6cc49d1452941074bf77ab52dc2e
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / renderers / RenderHelper.java
1 package com.irtimaled.bbor.client.renderers;
2
3 import com.irtimaled.bbor.client.Camera;
4 import com.irtimaled.bbor.client.config.ConfigManager;
5 import com.mojang.blaze3d.platform.GlStateManager;
6 import com.mojang.blaze3d.systems.RenderSystem;
7 import net.minecraft.client.gl.VertexBuffer;
8 import net.minecraft.client.render.BufferBuilder;
9 import net.minecraft.client.render.Tessellator;
10 import net.minecraft.client.render.VertexFormat;
11 import net.minecraft.client.render.VertexFormats;
12 import net.minecraft.client.util.math.MatrixStack;
13 import net.minecraft.util.math.Box;
14 import net.minecraft.util.math.Quaternion;
15 import org.lwjgl.opengl.GL11;
16
17 public class RenderHelper {
18
19     public static void beforeRender() {
20         enableBlend();
21         GlStateManager._blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
22         GL11.glEnable(GL11.GL_LINE_SMOOTH);
23         RenderSystem.disableCull();
24         enableDepthTest();
25         RenderSystem.depthMask(true);
26         RenderSystem.depthFunc(GL11.GL_LEQUAL);
27
28         if (ConfigManager.alwaysVisible.get()) {
29             RenderSystem.disableDepthTest();
30         }
31     }
32
33     public static void afterRender() {
34         enableDepthTest();
35         RenderSystem.enableCull();
36         GL11.glDisable(GL11.GL_LINE_SMOOTH);
37         RenderSystem.setShaderColor(1, 1, 1, 1);
38     }
39
40     public static void beforeRenderFont(MatrixStack matrixStack, OffsetPoint offsetPoint) {
41         RenderSystem.assertThread(RenderSystem::isOnRenderThread);
42         matrixStack.push();
43         polygonModeFill();
44         matrixStack.translate(offsetPoint.getX(), offsetPoint.getY() + 0.002D, offsetPoint.getZ());
45         // GL11.glNormal3f(0.0F, 1.0F, 0.0F);
46         matrixStack.multiply(new Quaternion(0.0F, 0.0F, 0.0F, 1.0F));
47         matrixStack.multiply(new Quaternion(0.0F, 90.0F, 1.0F, 0.0F));
48         matrixStack.scale(-0.0175F, -0.0175F, 0.0175F);
49         enableTexture();
50         enableBlend();
51         GlStateManager._blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO);
52
53         depthMaskTrue();
54     }
55
56     public static void afterRenderFont(MatrixStack matrixStack) {
57         disableTexture();
58         disableBlend();
59         RenderSystem.assertThread(RenderSystem::isOnRenderThread);
60         matrixStack.pop();
61         enableDepthTest();
62     }
63
64 //    public static void disableLighting() {
65 //        RenderSystem.assertThread(RenderSystem::isOnRenderThread);
66 //        GL11.glDisable(GL11.GL_LIGHTING);
67 //    }
68
69     public static void disableDepthTest() {
70         GlStateManager._disableDepthTest();
71     }
72
73     public static void enableDepthTest() {
74         GlStateManager._enableDepthTest();
75     }
76
77 //    public static void disableFog() {
78 //        RenderSystem.assertThread(RenderSystem::isOnRenderThread);
79 //        GL11.glDisable(GL11.GL_FOG);
80 //    }
81
82     public static void disableBlend() {
83         GlStateManager._disableBlend();
84     }
85
86     public static void enableBlend() {
87         GlStateManager._enableBlend();
88     }
89
90 //    public static void disableAlphaTest() {
91 //        RenderSystem.assertThread(RenderSystem::isOnRenderThread);
92 //        GL11.glDisable(GL32.GL_ALPHA_TEST);
93 //    }
94 //
95 //    public static void enableAlphaTest() {
96 //        RenderSystem.assertThread(RenderSystem::isOnRenderThread);
97 //        GL11.glEnable(GL11.GL_ALPHA_TEST);
98 //    }
99
100     public static void disableTexture() {
101         GlStateManager._disableTexture();
102     }
103
104     public static void enableTexture() {
105         GlStateManager._enableTexture();
106     }
107
108 //    public static void shadeModelSmooth() {
109 //        RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
110 //        GL11.glShadeModel(GL11.GL_SMOOTH);
111 //    }
112 //
113 //    public static void shadeModelFlat() {
114 //        RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
115 //        GL11.glShadeModel(GL11.GL_FLAT);
116 //    }
117
118 //    public static void enablePointSmooth() {
119 //        GL11.glEnable(GL11.GL_POINT_SMOOTH);
120 //    }
121
122     public static void lineWidth2() {
123         RenderSystem.assertThread(RenderSystem::isOnRenderThread);
124         RenderSystem.lineWidth(2f);
125     }
126
127     public static void polygonModeLine() {
128         GlStateManager._polygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
129     }
130
131     public static void polygonModeFill() {
132         GlStateManager._polygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL);
133     }
134
135     public static void polygonOffsetMinusOne() {
136         GlStateManager._polygonOffset(-1.f, -1.f);
137     }
138
139     public static void enablePolygonOffsetLine() {
140         RenderSystem.assertThread(RenderSystem::isOnRenderThread);
141         GL11.glEnable(GL11.GL_POLYGON_OFFSET_LINE);
142     }
143
144     public static void depthMaskTrue() {
145         GlStateManager._depthMask(true);
146     }
147
148     public static void blendFuncGui() {
149         GlStateManager._blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ZERO, GL11.GL_ONE);
150     }
151
152     public static void depthFuncAlways() {
153         GlStateManager._depthFunc(GL11.GL_ALWAYS);
154     }
155
156     public static void depthFuncLessEqual() {
157         GlStateManager._depthFunc(GL11.GL_LEQUAL);
158     }
159
160     public static void drawSolidBox(Box box, VertexBuffer vertexBuffer) {
161         BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
162         bufferBuilder.begin(VertexFormat.DrawMode.QUADS,
163                 VertexFormats.POSITION);
164
165         bufferBuilder.vertex(box.minX, box.minY, box.minZ).next();
166         bufferBuilder.vertex(box.maxX, box.minY, box.minZ).next();
167         bufferBuilder.vertex(box.maxX, box.minY, box.maxZ).next();
168         bufferBuilder.vertex(box.minX, box.minY, box.maxZ).next();
169
170         bufferBuilder.vertex(box.minX, box.maxY, box.minZ).next();
171         bufferBuilder.vertex(box.minX, box.maxY, box.maxZ).next();
172         bufferBuilder.vertex(box.maxX, box.maxY, box.maxZ).next();
173         bufferBuilder.vertex(box.maxX, box.maxY, box.minZ).next();
174
175         bufferBuilder.vertex(box.minX, box.minY, box.minZ).next();
176         bufferBuilder.vertex(box.minX, box.maxY, box.minZ).next();
177         bufferBuilder.vertex(box.maxX, box.maxY, box.minZ).next();
178         bufferBuilder.vertex(box.maxX, box.minY, box.minZ).next();
179
180         bufferBuilder.vertex(box.maxX, box.minY, box.minZ).next();
181         bufferBuilder.vertex(box.maxX, box.maxY, box.minZ).next();
182         bufferBuilder.vertex(box.maxX, box.maxY, box.maxZ).next();
183         bufferBuilder.vertex(box.maxX, box.minY, box.maxZ).next();
184
185         bufferBuilder.vertex(box.minX, box.minY, box.maxZ).next();
186         bufferBuilder.vertex(box.maxX, box.minY, box.maxZ).next();
187         bufferBuilder.vertex(box.maxX, box.maxY, box.maxZ).next();
188         bufferBuilder.vertex(box.minX, box.maxY, box.maxZ).next();
189
190         bufferBuilder.vertex(box.minX, box.minY, box.minZ).next();
191         bufferBuilder.vertex(box.minX, box.minY, box.maxZ).next();
192         bufferBuilder.vertex(box.minX, box.maxY, box.maxZ).next();
193         bufferBuilder.vertex(box.minX, box.maxY, box.minZ).next();
194
195         bufferBuilder.end();
196         vertexBuffer.upload(bufferBuilder);
197     }
198
199     public static void drawOutlinedBox(Box bb, VertexBuffer vertexBuffer) {
200         BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
201         bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES,
202                 VertexFormats.POSITION);
203
204         bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next();
205         bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next();
206
207         bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next();
208         bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next();
209
210         bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next();
211         bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next();
212
213         bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next();
214         bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next();
215
216         bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next();
217         bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next();
218
219         bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next();
220         bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next();
221
222         bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next();
223         bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next();
224
225         bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next();
226         bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next();
227
228         bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next();
229         bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next();
230
231         bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next();
232         bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next();
233
234         bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next();
235         bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next();
236
237         bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next();
238         bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next();
239
240         bufferBuilder.end();
241         vertexBuffer.upload(bufferBuilder);
242     }
243
244     public static void applyRegionalRenderOffset(MatrixStack matrixStack)
245     {
246
247         int regionX = (((int) Camera.getX()) >> 9) << 9;
248         int regionZ = (((int) Camera.getZ()) >> 9) << 9;
249
250         matrixStack.translate(regionX - Camera.getX(), -Camera.getY(),
251                 regionZ - Camera.getZ());
252     }
253 }