package com.irtimaled.bbor.client.renderers;
+import com.irtimaled.bbor.client.Camera;
import com.irtimaled.bbor.client.config.ConfigManager;
+import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.client.render.GameRenderer;
-import net.minecraft.util.Identifier;
+import net.minecraft.client.gl.VertexBuffer;
+import net.minecraft.client.render.BufferBuilder;
+import net.minecraft.client.render.Tessellator;
+import net.minecraft.client.render.VertexFormat;
+import net.minecraft.client.render.VertexFormats;
+import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.util.math.Box;
+import net.minecraft.util.math.Quaternion;
import org.lwjgl.opengl.GL11;
public class RenderHelper {
- public static final int QUADS = GL11.GL_QUADS;
- public static final int LINES = GL11.GL_LINES;
- public static final int LINE_LOOP = GL11.GL_LINE_LOOP;
- public static final int POINTS = GL11.GL_POINTS;
- //public static final VertexFormat.DrawMode CUSTOM = ReflectionHelper.getPrivateInstanceBuilder(VertexFormat.DrawMode.class,)
public static void beforeRender() {
enableBlend();
- RenderSystem.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- lineWidth2();
- disableTexture();
+ GlStateManager._blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glEnable(GL11.GL_LINE_SMOOTH);
RenderSystem.disableCull();
enableDepthTest();
+ RenderSystem.depthMask(false);
+ RenderSystem.depthFunc(GL11.GL_LEQUAL);
if (ConfigManager.alwaysVisible.get()) {
- RenderSystem.clear(GL11.GL_DEPTH_BUFFER_BIT, MinecraftClient.IS_SYSTEM_MAC);
+ RenderSystem.disableDepthTest();
}
}
- public static void setTexture(Identifier texture) {
- RenderSystem.setShader(GameRenderer::getPositionTexColorShader);
- RenderSystem.setShaderTexture(0, texture);
- }
-
- public static void resetShader() {
- RenderSystem.setShader(GameRenderer::getPositionColorShader);
- }
-
public static void afterRender() {
- polygonModeFill();
RenderSystem.enableCull();
- enableTexture();
+ GL11.glDisable(GL11.GL_LINE_SMOOTH);
+ RenderSystem.setShaderColor(1, 1, 1, 1);
}
- public static void beforeRenderFont(OffsetPoint offsetPoint) {
- // RenderSystem.pushMatrix();
+ public static void beforeRenderFont(MatrixStack matrixStack, OffsetPoint offsetPoint) {
+ RenderSystem.assertThread(RenderSystem::isOnRenderThread);
+ matrixStack.push();
polygonModeFill();
- //RenderSystem.translated(offsetPoint.getX(), offsetPoint.getY() + 0.002D, offsetPoint.getZ());
- //RenderSystem.normal3f(0.0F, 1.0F, 0.0F);
- //RenderSystem.rotatef(0.0F, 0.0F, 1.0F, 0.0F);
- //RenderSystem.rotatef(90.0F, 1.0F, 0.0F, 0.0F);
- //RenderSystem.scalef(-0.0175F, -0.0175F, 0.0175F);
+ matrixStack.translate(offsetPoint.getX(), offsetPoint.getY() + 0.002D, offsetPoint.getZ());
+ // GL11.glNormal3f(0.0F, 1.0F, 0.0F);
+ matrixStack.multiply(new Quaternion(0.0F, 0.0F, 0.0F, 1.0F));
+ matrixStack.multiply(new Quaternion(0.0F, 90.0F, 1.0F, 0.0F));
+ matrixStack.scale(-0.0175F, -0.0175F, 0.0175F);
enableTexture();
enableBlend();
- RenderSystem.blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO);
+ GlStateManager._blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO);
depthMaskTrue();
}
- public static void afterRenderFont() {
+ public static void afterRenderFont(MatrixStack matrixStack) {
disableTexture();
disableBlend();
- //RenderSystem.popMatrix();
+ RenderSystem.assertThread(RenderSystem::isOnRenderThread);
+ matrixStack.pop();
enableDepthTest();
}
- public static void disableLighting() {
- //RenderSystem.disableLighting();
- }
+// public static void disableLighting() {
+// RenderSystem.assertThread(RenderSystem::isOnRenderThread);
+// GL11.glDisable(GL11.GL_LIGHTING);
+// }
public static void disableDepthTest() {
- RenderSystem.disableDepthTest();
+ GlStateManager._disableDepthTest();
}
public static void enableDepthTest() {
- RenderSystem.enableDepthTest();
+ GlStateManager._enableDepthTest();
}
+// public static void disableFog() {
+// RenderSystem.assertThread(RenderSystem::isOnRenderThread);
+// GL11.glDisable(GL11.GL_FOG);
+// }
+
public static void disableBlend() {
- RenderSystem.disableBlend();
+ GlStateManager._disableBlend();
}
public static void enableBlend() {
- RenderSystem.enableBlend();
- }
-
- public static void disableAlphaTest() {
- //RenderSystem.disableAlphaTest();
+ GlStateManager._enableBlend();
}
- public static void enableAlphaTest() {
- //RenderSystem.enableAlphaTest();
- }
+// public static void disableAlphaTest() {
+// RenderSystem.assertThread(RenderSystem::isOnRenderThread);
+// GL11.glDisable(GL32.GL_ALPHA_TEST);
+// }
+//
+// public static void enableAlphaTest() {
+// RenderSystem.assertThread(RenderSystem::isOnRenderThread);
+// GL11.glEnable(GL11.GL_ALPHA_TEST);
+// }
public static void disableTexture() {
- RenderSystem.disableTexture();
+ GlStateManager._disableTexture();
}
public static void enableTexture() {
- RenderSystem.enableTexture();
- }
-
- public static void shadeModelSmooth() {
- //RenderSystem.shadeModel(GL11.GL_SMOOTH);
+ GlStateManager._enableTexture();
}
- public static void shadeModelFlat() {
- //RenderSystem.shadeModel(GL11.GL_FLAT);
- }
+// public static void shadeModelSmooth() {
+// RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
+// GL11.glShadeModel(GL11.GL_SMOOTH);
+// }
+//
+// public static void shadeModelFlat() {
+// RenderSystem.assertThread(RenderSystem::isOnRenderThreadOrInit);
+// GL11.glShadeModel(GL11.GL_FLAT);
+// }
- public static void enablePointSmooth() {
- GL11.glEnable(GL11.GL_POINT_SMOOTH);
- }
+// public static void enablePointSmooth() {
+// GL11.glEnable(GL11.GL_POINT_SMOOTH);
+// }
public static void lineWidth2() {
+ RenderSystem.assertThread(RenderSystem::isOnRenderThread);
RenderSystem.lineWidth(2f);
}
public static void polygonModeLine() {
- RenderSystem.polygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
+ GlStateManager._polygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
}
public static void polygonModeFill() {
- RenderSystem.polygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL);
+ GlStateManager._polygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL);
}
public static void polygonOffsetMinusOne() {
- RenderSystem.polygonOffset(-1.f, -1.f);
+ GlStateManager._polygonOffset(-1.f, -1.f);
}
public static void enablePolygonOffsetLine() {
- //RenderSystem.enableLineOffset();
+ RenderSystem.assertThread(RenderSystem::isOnRenderThread);
+ GL11.glEnable(GL11.GL_POLYGON_OFFSET_LINE);
}
public static void depthMaskTrue() {
- RenderSystem.depthMask(true);
- }
-
- public static void pointSize5() {
- GL11.glPointSize(5);
+ GlStateManager._depthMask(true);
}
public static void blendFuncGui() {
- RenderSystem.blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ZERO, GL11.GL_ONE);
+ GlStateManager._blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ZERO, GL11.GL_ONE);
}
public static void depthFuncAlways() {
- RenderSystem.depthFunc(GL11.GL_ALWAYS);
+ GlStateManager._depthFunc(GL11.GL_ALWAYS);
}
public static void depthFuncLessEqual() {
- RenderSystem.depthFunc(GL11.GL_LEQUAL);
+ GlStateManager._depthFunc(GL11.GL_LEQUAL);
+ }
+
+ public static void drawSolidBox(Box box, VertexBuffer vertexBuffer) {
+ BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
+ bufferBuilder.begin(VertexFormat.DrawMode.QUADS,
+ VertexFormats.POSITION);
+
+ bufferBuilder.vertex(box.minX, box.minY, box.minZ).next();
+ bufferBuilder.vertex(box.maxX, box.minY, box.minZ).next();
+ bufferBuilder.vertex(box.maxX, box.minY, box.maxZ).next();
+ bufferBuilder.vertex(box.minX, box.minY, box.maxZ).next();
+
+ bufferBuilder.vertex(box.minX, box.maxY, box.minZ).next();
+ bufferBuilder.vertex(box.minX, box.maxY, box.maxZ).next();
+ bufferBuilder.vertex(box.maxX, box.maxY, box.maxZ).next();
+ bufferBuilder.vertex(box.maxX, box.maxY, box.minZ).next();
+
+ bufferBuilder.vertex(box.minX, box.minY, box.minZ).next();
+ bufferBuilder.vertex(box.minX, box.maxY, box.minZ).next();
+ bufferBuilder.vertex(box.maxX, box.maxY, box.minZ).next();
+ bufferBuilder.vertex(box.maxX, box.minY, box.minZ).next();
+
+ bufferBuilder.vertex(box.maxX, box.minY, box.minZ).next();
+ bufferBuilder.vertex(box.maxX, box.maxY, box.minZ).next();
+ bufferBuilder.vertex(box.maxX, box.maxY, box.maxZ).next();
+ bufferBuilder.vertex(box.maxX, box.minY, box.maxZ).next();
+
+ bufferBuilder.vertex(box.minX, box.minY, box.maxZ).next();
+ bufferBuilder.vertex(box.maxX, box.minY, box.maxZ).next();
+ bufferBuilder.vertex(box.maxX, box.maxY, box.maxZ).next();
+ bufferBuilder.vertex(box.minX, box.maxY, box.maxZ).next();
+
+ bufferBuilder.vertex(box.minX, box.minY, box.minZ).next();
+ bufferBuilder.vertex(box.minX, box.minY, box.maxZ).next();
+ bufferBuilder.vertex(box.minX, box.maxY, box.maxZ).next();
+ bufferBuilder.vertex(box.minX, box.maxY, box.minZ).next();
+
+ bufferBuilder.end();
+ vertexBuffer.upload(bufferBuilder);
+ }
+
+ public static void drawOutlinedBox(Box bb, VertexBuffer vertexBuffer) {
+ BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
+ bufferBuilder.begin(VertexFormat.DrawMode.DEBUG_LINES,
+ VertexFormats.POSITION);
+
+ bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next();
+ bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next();
+
+ bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next();
+ bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next();
+
+ bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next();
+ bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next();
+
+ bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next();
+ bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next();
+
+ bufferBuilder.vertex(bb.minX, bb.minY, bb.minZ).next();
+ bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next();
+
+ bufferBuilder.vertex(bb.maxX, bb.minY, bb.minZ).next();
+ bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next();
+
+ bufferBuilder.vertex(bb.maxX, bb.minY, bb.maxZ).next();
+ bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next();
+
+ bufferBuilder.vertex(bb.minX, bb.minY, bb.maxZ).next();
+ bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next();
+
+ bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next();
+ bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next();
+
+ bufferBuilder.vertex(bb.maxX, bb.maxY, bb.minZ).next();
+ bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next();
+
+ bufferBuilder.vertex(bb.maxX, bb.maxY, bb.maxZ).next();
+ bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next();
+
+ bufferBuilder.vertex(bb.minX, bb.maxY, bb.maxZ).next();
+ bufferBuilder.vertex(bb.minX, bb.maxY, bb.minZ).next();
+
+ bufferBuilder.end();
+ vertexBuffer.upload(bufferBuilder);
+ }
+
+ public static void applyRegionalRenderOffset(MatrixStack matrixStack)
+ {
+
+ int regionX = (((int) Camera.getX()) >> 9) << 9;
+ int regionZ = (((int) Camera.getZ()) >> 9) << 9;
+
+ matrixStack.translate(regionX - Camera.getX(), -Camera.getY(),
+ regionZ - Camera.getZ());
}
}