1 package com.irtimaled.bbor.client.renderers;
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;
17 public class RenderHelper {
19 public static void beforeRender() {
21 GlStateManager._blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
22 GL11.glEnable(GL11.GL_LINE_SMOOTH);
23 RenderSystem.disableCull();
25 RenderSystem.depthMask(false);
26 RenderSystem.depthFunc(GL11.GL_LEQUAL);
28 if (ConfigManager.alwaysVisible.get()) {
29 RenderSystem.disableDepthTest();
33 public static void afterRender() {
34 RenderSystem.enableCull();
35 GL11.glDisable(GL11.GL_LINE_SMOOTH);
36 RenderSystem.setShaderColor(1, 1, 1, 1);
39 public static void beforeRenderFont(MatrixStack matrixStack, OffsetPoint offsetPoint) {
40 RenderSystem.assertThread(RenderSystem::isOnRenderThread);
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);
50 GlStateManager._blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO);
55 public static void afterRenderFont(MatrixStack matrixStack) {
58 RenderSystem.assertThread(RenderSystem::isOnRenderThread);
63 // public static void disableLighting() {
64 // RenderSystem.assertThread(RenderSystem::isOnRenderThread);
65 // GL11.glDisable(GL11.GL_LIGHTING);
68 public static void disableDepthTest() {
69 GlStateManager._disableDepthTest();
72 public static void enableDepthTest() {
73 GlStateManager._enableDepthTest();
76 // public static void disableFog() {
77 // RenderSystem.assertThread(RenderSystem::isOnRenderThread);
78 // GL11.glDisable(GL11.GL_FOG);
81 public static void disableBlend() {
82 GlStateManager._disableBlend();
85 public static void enableBlend() {
86 GlStateManager._enableBlend();
89 // public static void disableAlphaTest() {
90 // RenderSystem.assertThread(RenderSystem::isOnRenderThread);
91 // GL11.glDisable(GL32.GL_ALPHA_TEST);
94 // public static void enableAlphaTest() {
95 // RenderSystem.assertThread(RenderSystem::isOnRenderThread);
96 // GL11.glEnable(GL11.GL_ALPHA_TEST);
99 public static void disableTexture() {
100 GlStateManager._disableTexture();
103 public static void enableTexture() {
104 GlStateManager._enableTexture();
107 // public static void shadeModelSmooth() {
108 // RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
109 // GL11.glShadeModel(GL11.GL_SMOOTH);
112 // public static void shadeModelFlat() {
113 // RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
114 // GL11.glShadeModel(GL11.GL_FLAT);
117 // public static void enablePointSmooth() {
118 // GL11.glEnable(GL11.GL_POINT_SMOOTH);
121 public static void lineWidth2() {
122 RenderSystem.assertThread(RenderSystem::isOnRenderThread);
123 RenderSystem.lineWidth(2f);
126 public static void polygonModeLine() {
127 GlStateManager._polygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
130 public static void polygonModeFill() {
131 GlStateManager._polygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL);
134 public static void polygonOffsetMinusOne() {
135 GlStateManager._polygonOffset(-1.f, -1.f);
138 public static void enablePolygonOffsetLine() {
139 RenderSystem.assertThread(RenderSystem::isOnRenderThread);
140 GL11.glEnable(GL11.GL_POLYGON_OFFSET_LINE);
143 public static void depthMaskTrue() {
144 GlStateManager._depthMask(true);
147 public static void blendFuncGui() {
148 GlStateManager._blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ZERO, GL11.GL_ONE);
151 public static void depthFuncAlways() {
152 GlStateManager._depthFunc(GL11.GL_ALWAYS);
155 public static void depthFuncLessEqual() {
156 GlStateManager._depthFunc(GL11.GL_LEQUAL);
159 public static void drawSolidBox(Box box, VertexBuffer vertexBuffer) {
160 BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
161 bufferBuilder.begin(VertexFormat.DrawMode.QUADS,
162 VertexFormats.POSITION);
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();
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();
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();
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();
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();
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();
195 vertexBuffer.upload(bufferBuilder);
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);
203 bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next();
204 bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next();
206 bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next();
207 bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next();
209 bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next();
210 bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next();
212 bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next();
213 bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next();
215 bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next();
216 bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next();
218 bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next();
219 bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next();
221 bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next();
222 bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next();
224 bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next();
225 bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next();
227 bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next();
228 bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next();
230 bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next();
231 bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next();
233 bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next();
234 bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next();
236 bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next();
237 bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next();
240 vertexBuffer.upload(bufferBuilder);
243 public static void applyRegionalRenderOffset(MatrixStack matrixStack)
246 int regionX = (((int) Camera.getX()) >> 9) << 9;
247 int regionZ = (((int) Camera.getZ()) >> 9) << 9;
249 matrixStack.translate(regionX - Camera.getX(), -Camera.getY(),
250 regionZ - Camera.getZ());