From 570fe4617e888a7ee7536c6a4bfdeee40a70e273 Mon Sep 17 00:00:00 2001 From: Mouse Date: Fri, 8 Dec 2023 14:43:41 +0800 Subject: [PATCH] feat: change COLOR_RGB and COLOR_RGBA type from FLOAT to UNSIGNED_BYTE --- .../model/voxel/block/BlockModel.java | 2 +- .../model/voxel/item/ItemGenerateModel.java | 2 +- .../main/java/engine/graphics/sky/SkyBox.java | 6 +-- .../graphics/vertex/VertexDataBuffer.java | 37 ++++++++++++------- .../engine/graphics/vertex/VertexElement.java | 4 +- .../internal/impl/graphics/GraphicsImpl.java | 8 ++-- 6 files changed, 34 insertions(+), 25 deletions(-) diff --git a/client/src/main/java/engine/graphics/model/voxel/block/BlockModel.java b/client/src/main/java/engine/graphics/model/voxel/block/BlockModel.java index b910d5c5d..b8efa52a5 100644 --- a/client/src/main/java/engine/graphics/model/voxel/block/BlockModel.java +++ b/client/src/main/java/engine/graphics/model/voxel/block/BlockModel.java @@ -123,7 +123,7 @@ public void putVertexes(VertexDataBuffer buffer, int coveredFace) { } for (var vertex : vertexes.getValue()) { - buffer.pos(vertex, 0).rgba(1, 1, 1, 1).tex(vertex, 3).normal(vertex, 5).endVertex(); + buffer.pos(vertex, 0).rgba(0xFFFFFFFF).tex(vertex, 3).normal(vertex, 5).endVertex(); } } } diff --git a/client/src/main/java/engine/graphics/model/voxel/item/ItemGenerateModel.java b/client/src/main/java/engine/graphics/model/voxel/item/ItemGenerateModel.java index d746f0fd9..6ea467063 100644 --- a/client/src/main/java/engine/graphics/model/voxel/item/ItemGenerateModel.java +++ b/client/src/main/java/engine/graphics/model/voxel/item/ItemGenerateModel.java @@ -162,7 +162,7 @@ private BakedModel(List vertexes, Transform[] transforms) { @Override public void putVertexes(VertexDataBuffer buffer, int coveredFace) { for (var vertex : this.vertexes) { - buffer.pos(vertex, 0).rgba(1, 1, 1, 1).tex(vertex, 3).normal(vertex, 5).endVertex(); + buffer.pos(vertex, 0).rgba(0xFFFFFFFF).tex(vertex, 3).normal(vertex, 5).endVertex(); } } diff --git a/client/src/main/java/engine/graphics/sky/SkyBox.java b/client/src/main/java/engine/graphics/sky/SkyBox.java index da816b1f1..d08d01f8e 100644 --- a/client/src/main/java/engine/graphics/sky/SkyBox.java +++ b/client/src/main/java/engine/graphics/sky/SkyBox.java @@ -47,9 +47,9 @@ public SkyBox() { -256, -256, -256, -256, -256, 256 //Down }); - float[] floats = new float[24 * 4 * 4]; // 24 vertexes, 4 components, 4 bytes per component(float) - Arrays.fill(floats, 1f); // fill color white(1f, 1f, 1f, 1f) - ByteBuffer colors = BufferUtils.wrapAsByteBuffer(floats); + int[] ints = new int[24]; + Arrays.fill(ints, 0xFFFFFFFF); // fill color white + ByteBuffer colors = BufferUtils.wrapAsByteBuffer(ints); ByteBuffer texCoords = BufferUtils.wrapAsByteBuffer(0.6666667f, 0.0f, 1.0f, 0.0f, 0.6666667f, 0.5f, diff --git a/graphics/src/main/java/engine/graphics/vertex/VertexDataBuffer.java b/graphics/src/main/java/engine/graphics/vertex/VertexDataBuffer.java index df7cae4b2..25a045901 100644 --- a/graphics/src/main/java/engine/graphics/vertex/VertexDataBuffer.java +++ b/graphics/src/main/java/engine/graphics/vertex/VertexDataBuffer.java @@ -261,41 +261,50 @@ public VertexDataBuffer color(Color color) { return rgba(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()); } - public VertexDataBuffer color(int argb) { + public VertexDataBuffer rgba(int rgba) { if (vertexFormat.isUsingColor()) { - float a = ((argb >> 24) & 255) / 255f; - float r = ((argb >> 16) & 255) / 255f; - float g = ((argb >> 8) & 255) / 255f; - float b = (argb & 255) / 255f; - if (!vertexFormat.isUsingAlpha()) { - return rgb(r, g, b); + if (vertexFormat.isUsingAlpha()) { + byteBuffer.putInt(rgba); } else { - return rgba(r, g, b, a); + byte r = (byte) ((rgba >> 24) & 0xFF); + byte g = (byte) ((rgba >> 16) & 0xFF); + byte b = (byte) ((rgba >> 8) & 0xFF); + byteBuffer.put(r).put(g).put(b); } } return this; } - public VertexDataBuffer rgb(float r, float g, float b) { + public VertexDataBuffer rgb(int r, int g, int b) { if (vertexFormat.isUsingColor()) { - byteBuffer.putFloat(r).putFloat(g).putFloat(b); if (vertexFormat.isUsingAlpha()) { - byteBuffer.putFloat(1f); + byteBuffer.put((byte) r).put((byte) g).put((byte) b).put((byte) 0xFF); + } else { + byteBuffer.put((byte) r).put((byte) g).put((byte) b); } } return this; } - public VertexDataBuffer rgba(float r, float g, float b, float a) { + public VertexDataBuffer rgba(int r, int g, int b, int a) { if (vertexFormat.isUsingColor()) { - byteBuffer.putFloat(r).putFloat(g).putFloat(b); if (vertexFormat.isUsingAlpha()) { - byteBuffer.putFloat(a); + byteBuffer.put((byte) r).put((byte) g).put((byte) b).put((byte) a); + } else { + byteBuffer.put((byte) r).put((byte) g).put((byte) b); } } return this; } + public VertexDataBuffer rgb(float r, float g, float b) { + return rgb((int) (r * 255), (int) (g * 255), (int) (b * 255)); + } + + public VertexDataBuffer rgba(float r, float g, float b, float a) { + return rgba((int) (r * 255), (int) (g * 255), (int) (b * 255), (int) (a * 255)); + } + public VertexDataBuffer rgb(float[] array, int start) { return rgb(array[start], array[start + 1], array[start + 2]); } diff --git a/graphics/src/main/java/engine/graphics/vertex/VertexElement.java b/graphics/src/main/java/engine/graphics/vertex/VertexElement.java index 7c91f742d..2253b2bf6 100644 --- a/graphics/src/main/java/engine/graphics/vertex/VertexElement.java +++ b/graphics/src/main/java/engine/graphics/vertex/VertexElement.java @@ -19,8 +19,8 @@ public final class VertexElement { public static final String NAME_UNKNOWN = "Unknown"; public static final VertexElement POSITION = new VertexElement(DataType.FLOAT, NAME_POSITION, 3); - public static final VertexElement COLOR_RGB = new VertexElement(DataType.FLOAT, NAME_COLOR, 3); - public static final VertexElement COLOR_RGBA = new VertexElement(DataType.FLOAT, NAME_COLOR, 4); + public static final VertexElement COLOR_RGB = new VertexElement(DataType.UNSIGNED_BYTE, NAME_COLOR, 3, true); + public static final VertexElement COLOR_RGBA = new VertexElement(DataType.UNSIGNED_BYTE, NAME_COLOR, 4, true); public static final VertexElement TEX_COORD = new VertexElement(DataType.FLOAT, NAME_TEX_COORD, 2); public static final VertexElement NORMAL = new VertexElement(DataType.FLOAT, NAME_NORMAL, 3, true); public static final VertexElement TANGENT = new VertexElement(DataType.FLOAT, NAME_TANGENT, 3, true); diff --git a/gui/src/main/java/engine/gui/internal/impl/graphics/GraphicsImpl.java b/gui/src/main/java/engine/gui/internal/impl/graphics/GraphicsImpl.java index d6ce550c5..0474df252 100644 --- a/gui/src/main/java/engine/gui/internal/impl/graphics/GraphicsImpl.java +++ b/gui/src/main/java/engine/gui/internal/impl/graphics/GraphicsImpl.java @@ -309,10 +309,10 @@ public void drawTexture(Texture2D texture, float x, float y, float width, float public void drawTexture(Texture2D texture, float x, float y, float width, float height, float minU, float minV, float maxU, float maxV) { buffer.begin(VertexFormat.POSITION_COLOR_ALPHA_TEX_COORD); float x2 = x + width, y2 = y + height; - buffer.pos(x, y, 0).rgba(1, 1, 1, 1).tex(minU, minV).endVertex(); - buffer.pos(x, y2, 0).rgba(1, 1, 1, 1).tex(minU, maxV).endVertex(); - buffer.pos(x2, y, 0).rgba(1, 1, 1, 1).tex(maxU, minV).endVertex(); - buffer.pos(x2, y2, 0).rgba(1, 1, 1, 1).tex(maxU, maxV).endVertex(); + buffer.pos(x, y, 0).rgba(0xFFFFFFFF).tex(minU, minV).endVertex(); + buffer.pos(x, y2, 0).rgba(0xFFFFFFFF).tex(minU, maxV).endVertex(); + buffer.pos(x2, y, 0).rgba(0xFFFFFFFF).tex(maxU, minV).endVertex(); + buffer.pos(x2, y2, 0).rgba(0xFFFFFFFF).tex(maxU, maxV).endVertex(); uniformTexture.setTexture(texture); buffer.finish(); renderer.drawStreamed(DrawMode.TRIANGLE_STRIP, buffer);