first commit
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package online.bobtony.gui.render;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import net.minecraft.client.gl.ShaderProgramKeys;
|
||||
import net.minecraft.client.render.*;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.joml.Matrix4f;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
public class RoundedBoxRenderer {
|
||||
public static void drawRoundedBox(Matrix4f matrix4f, float x, float y, float width, float height, float radius, Color color) {
|
||||
int colorInt = color.getRGB();
|
||||
|
||||
RenderSystem.enableBlend();
|
||||
RenderSystem.disableDepthTest();
|
||||
GL11.glEnable(GL11.GL_LINE_SMOOTH);
|
||||
Tessellator tessellator = RenderSystem.renderThreadTesselator();
|
||||
RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR);
|
||||
|
||||
BufferBuilder bufferBuilder = tessellator.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR);
|
||||
|
||||
drawFilledArc(bufferBuilder, matrix4f, x + radius, y + radius, radius, 180.0f, 90.0f, colorInt);
|
||||
drawFilledArc(bufferBuilder, matrix4f, x + width - radius, y + radius, radius, 270.0f, 90.0f, colorInt);
|
||||
drawFilledArc(bufferBuilder, matrix4f, x + width - radius, y + height - radius, radius, 0.0f, 90.0f, colorInt);
|
||||
drawFilledArc(bufferBuilder, matrix4f, x + radius, y + height - radius, radius, 90.0f, 90.0f, colorInt);
|
||||
|
||||
drawRect(bufferBuilder, matrix4f, x + radius, y, width - 2 * radius, height, colorInt);
|
||||
drawRect(bufferBuilder, matrix4f, x, y + radius, width, height - 2 * radius, colorInt);
|
||||
|
||||
BufferRenderer.drawWithGlobalProgram(bufferBuilder.end());
|
||||
GL11.glDisable(GL11.GL_LINE_SMOOTH);
|
||||
RenderSystem.disableBlend();
|
||||
RenderSystem.enableDepthTest();
|
||||
}
|
||||
|
||||
private static void drawRect(BufferBuilder buffer, Matrix4f matrix, float x, float y, float width, float height, int color) {
|
||||
buffer.vertex(matrix, x, y, 0).color(color);
|
||||
buffer.vertex(matrix, x + width, y, 0).color(color);
|
||||
buffer.vertex(matrix, x + width, y + height, 0).color(color);
|
||||
buffer.vertex(matrix, x, y + height, 0).color(color);
|
||||
}
|
||||
|
||||
private static void drawFilledArc(BufferBuilder buffer, Matrix4f matrix, float cx, float cy, float radius, float startAngle, float arcAngle, int color) {
|
||||
int segments = 20;
|
||||
float angleStep = arcAngle / segments;
|
||||
for (int i = 0; i < segments; i++) {
|
||||
float theta1 = (float) Math.toRadians(startAngle + i * angleStep);
|
||||
float theta2 = (float) Math.toRadians(startAngle + (i + 1) * angleStep);
|
||||
|
||||
float x1 = cx + (float) Math.cos(theta1) * radius;
|
||||
float y1 = cy + (float) Math.sin(theta1) * radius;
|
||||
float x2 = cx + (float) Math.cos(theta2) * radius;
|
||||
float y2 = cy + (float) Math.sin(theta2) * radius;
|
||||
|
||||
buffer.vertex(matrix, cx, cy, 0).color(color);
|
||||
buffer.vertex(matrix, x1, y1, 0).color(color);
|
||||
buffer.vertex(matrix, x2, y2, 0).color(color);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user