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