Skip to content

Commit

Permalink
Merge branch 'multiloader-new' into 1.21.2-new
Browse files Browse the repository at this point in the history
# Conflicts:
#	build.gradle.kts
#	common/src/main/java/net/irisshaders/iris/mixin/entity_render_context/MixinHumanoidArmorLayer.java
  • Loading branch information
IMS212 committed Oct 1, 2024
2 parents e57daa4 + 2ac2141 commit 899dcc4
Show file tree
Hide file tree
Showing 19 changed files with 332 additions and 112 deletions.
4 changes: 3 additions & 1 deletion common/src/main/java/net/irisshaders/iris/gl/GLDebug.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.lwjgl.opengl.ARBDebugOutput;
import org.lwjgl.opengl.GL;
import org.lwjgl.opengl.GL43C;
import org.lwjgl.opengl.GL46C;
import org.lwjgl.opengl.GLCapabilities;
import org.lwjgl.opengl.GLDebugMessageAMDCallback;
import org.lwjgl.opengl.GLDebugMessageARBCallback;
Expand All @@ -31,7 +32,7 @@ public final class GLDebug {
public static int setupDebugMessageCallback() {
reloadDebugState();

return setupDebugMessageCallback(APIUtil.DEBUG_STREAM);
return setupDebugMessageCallback(System.out);
}

private static void trace(Consumer<String> output) {
Expand Down Expand Up @@ -75,6 +76,7 @@ public void accept(String str) {

public static int setupDebugMessageCallback(PrintStream stream) {
GLCapabilities caps = GL.getCapabilities();
GL46C.glEnable(GL46C.GL_DEBUG_OUTPUT_SYNCHRONOUS);
if (caps.OpenGL43) {
Iris.logger.info("[GL] Using OpenGL 4.3 for error logging.");
GLDebugMessageCallback proc = GLDebugMessageCallback.create((source, type, id, severity, length, message, userParam) -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.irisshaders.iris.gl.texture;

import net.irisshaders.iris.Iris;
import net.irisshaders.iris.gl.GlVersion;
import org.lwjgl.opengl.GL11C;
import org.lwjgl.opengl.GL12C;
Expand All @@ -9,24 +10,26 @@
import java.util.Optional;

public enum PixelFormat {
RED(GL11C.GL_RED, GlVersion.GL_11, false),
RG(GL30C.GL_RG, GlVersion.GL_30, false),
RGB(GL11C.GL_RGB, GlVersion.GL_11, false),
BGR(GL12C.GL_BGR, GlVersion.GL_12, false),
RGBA(GL11C.GL_RGBA, GlVersion.GL_11, false),
BGRA(GL12C.GL_BGRA, GlVersion.GL_12, false),
RED_INTEGER(GL30C.GL_RED_INTEGER, GlVersion.GL_30, true),
RG_INTEGER(GL30C.GL_RG_INTEGER, GlVersion.GL_30, true),
RGB_INTEGER(GL30C.GL_RGB_INTEGER, GlVersion.GL_30, true),
BGR_INTEGER(GL30C.GL_BGR_INTEGER, GlVersion.GL_30, true),
RGBA_INTEGER(GL30C.GL_RGBA_INTEGER, GlVersion.GL_30, true),
BGRA_INTEGER(GL30C.GL_BGRA_INTEGER, GlVersion.GL_30, true);

RED(1, GL11C.GL_RED, GlVersion.GL_11, false),
RG(2, GL30C.GL_RG, GlVersion.GL_30, false),
RGB(3, GL11C.GL_RGB, GlVersion.GL_11, false),
BGR(3, GL12C.GL_BGR, GlVersion.GL_12, false),
RGBA(4, GL11C.GL_RGBA, GlVersion.GL_11, false),
BGRA(4, GL12C.GL_BGRA, GlVersion.GL_12, false),
RED_INTEGER(1, GL30C.GL_RED_INTEGER, GlVersion.GL_30, true),
RG_INTEGER(2, GL30C.GL_RG_INTEGER, GlVersion.GL_30, true),
RGB_INTEGER(3, GL30C.GL_RGB_INTEGER, GlVersion.GL_30, true),
BGR_INTEGER(3, GL30C.GL_BGR_INTEGER, GlVersion.GL_30, true),
RGBA_INTEGER(4, GL30C.GL_RGBA_INTEGER, GlVersion.GL_30, true),
BGRA_INTEGER(4, GL30C.GL_BGRA_INTEGER, GlVersion.GL_30, true);

private final int componentCount;
private final int glFormat;
private final GlVersion minimumGlVersion;
private final boolean isInteger;

PixelFormat(int glFormat, GlVersion minimumGlVersion, boolean isInteger) {
PixelFormat(int componentCount, int glFormat, GlVersion minimumGlVersion, boolean isInteger) {
this.componentCount = componentCount;
this.glFormat = glFormat;
this.minimumGlVersion = minimumGlVersion;
this.isInteger = isInteger;
Expand All @@ -36,10 +39,15 @@ public static Optional<PixelFormat> fromString(String name) {
try {
return Optional.of(PixelFormat.valueOf(name.toUpperCase(Locale.US)));
} catch (IllegalArgumentException e) {
Iris.logger.error("Looking for an illegal pixel format: " + name.toUpperCase(Locale.US));
return Optional.empty();
}
}

public int getComponentCount() {
return componentCount;
}

public int getGlFormat() {
return glFormat;
}
Expand Down
50 changes: 29 additions & 21 deletions common/src/main/java/net/irisshaders/iris/gl/texture/PixelType.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.irisshaders.iris.gl.texture;

import net.irisshaders.iris.Iris;
import net.irisshaders.iris.gl.GlVersion;
import org.lwjgl.opengl.GL11C;
import org.lwjgl.opengl.GL12C;
Expand All @@ -9,31 +10,33 @@
import java.util.Optional;

public enum PixelType {
BYTE(GL11C.GL_BYTE, GlVersion.GL_11),
SHORT(GL11C.GL_SHORT, GlVersion.GL_11),
INT(GL11C.GL_INT, GlVersion.GL_11),
HALF_FLOAT(GL30C.GL_HALF_FLOAT, GlVersion.GL_30),
FLOAT(GL11C.GL_FLOAT, GlVersion.GL_11),
UNSIGNED_BYTE(GL11C.GL_UNSIGNED_BYTE, GlVersion.GL_11),
UNSIGNED_BYTE_3_3_2(GL12C.GL_UNSIGNED_BYTE_3_3_2, GlVersion.GL_12),
UNSIGNED_BYTE_2_3_3_REV(GL12C.GL_UNSIGNED_BYTE_2_3_3_REV, GlVersion.GL_12),
UNSIGNED_SHORT(GL11C.GL_UNSIGNED_SHORT, GlVersion.GL_11),
UNSIGNED_SHORT_5_6_5(GL12C.GL_UNSIGNED_SHORT_5_6_5, GlVersion.GL_12),
UNSIGNED_SHORT_5_6_5_REV(GL12C.GL_UNSIGNED_SHORT_5_6_5_REV, GlVersion.GL_12),
UNSIGNED_SHORT_4_4_4_4(GL12C.GL_UNSIGNED_SHORT_4_4_4_4, GlVersion.GL_12),
UNSIGNED_SHORT_4_4_4_4_REV(GL12C.GL_UNSIGNED_SHORT_4_4_4_4_REV, GlVersion.GL_12),
UNSIGNED_SHORT_5_5_5_1(GL12C.GL_UNSIGNED_SHORT_5_5_5_1, GlVersion.GL_12),
UNSIGNED_SHORT_1_5_5_5_REV(GL12C.GL_UNSIGNED_SHORT_1_5_5_5_REV, GlVersion.GL_12),
UNSIGNED_INT(GL11C.GL_UNSIGNED_INT, GlVersion.GL_11),
UNSIGNED_INT_8_8_8_8(GL12C.GL_UNSIGNED_INT_8_8_8_8, GlVersion.GL_12),
UNSIGNED_INT_8_8_8_8_REV(GL12C.GL_UNSIGNED_INT_8_8_8_8_REV, GlVersion.GL_12),
UNSIGNED_INT_10_10_10_2(GL12C.GL_UNSIGNED_INT_10_10_10_2, GlVersion.GL_12),
UNSIGNED_INT_2_10_10_10_REV(GL12C.GL_UNSIGNED_INT_2_10_10_10_REV, GlVersion.GL_12);
BYTE(1, GL11C.GL_BYTE, GlVersion.GL_11),
SHORT(2, GL11C.GL_SHORT, GlVersion.GL_11),
INT(4, GL11C.GL_INT, GlVersion.GL_11),
HALF_FLOAT(2, GL30C.GL_HALF_FLOAT, GlVersion.GL_30),
FLOAT(4, GL11C.GL_FLOAT, GlVersion.GL_11),
UNSIGNED_BYTE(1, GL11C.GL_UNSIGNED_BYTE, GlVersion.GL_11),
UNSIGNED_BYTE_3_3_2(1, GL12C.GL_UNSIGNED_BYTE_3_3_2, GlVersion.GL_12),
UNSIGNED_BYTE_2_3_3_REV(1, GL12C.GL_UNSIGNED_BYTE_2_3_3_REV, GlVersion.GL_12),
UNSIGNED_SHORT(2, GL11C.GL_UNSIGNED_SHORT, GlVersion.GL_11),
UNSIGNED_SHORT_5_6_5(2, GL12C.GL_UNSIGNED_SHORT_5_6_5, GlVersion.GL_12),
UNSIGNED_SHORT_5_6_5_REV(2, GL12C.GL_UNSIGNED_SHORT_5_6_5_REV, GlVersion.GL_12),
UNSIGNED_SHORT_4_4_4_4(2, GL12C.GL_UNSIGNED_SHORT_4_4_4_4, GlVersion.GL_12),
UNSIGNED_SHORT_4_4_4_4_REV(2, GL12C.GL_UNSIGNED_SHORT_4_4_4_4_REV, GlVersion.GL_12),
UNSIGNED_SHORT_5_5_5_1(2, GL12C.GL_UNSIGNED_SHORT_5_5_5_1, GlVersion.GL_12),
UNSIGNED_SHORT_1_5_5_5_REV(2, GL12C.GL_UNSIGNED_SHORT_1_5_5_5_REV, GlVersion.GL_12),
UNSIGNED_INT(4, GL11C.GL_UNSIGNED_INT, GlVersion.GL_11),
UNSIGNED_INT_8_8_8_8(4, GL12C.GL_UNSIGNED_INT_8_8_8_8, GlVersion.GL_12),
UNSIGNED_INT_8_8_8_8_REV(4, GL12C.GL_UNSIGNED_INT_8_8_8_8_REV, GlVersion.GL_12),
UNSIGNED_INT_10_10_10_2(4, GL12C.GL_UNSIGNED_INT_10_10_10_2, GlVersion.GL_12),
UNSIGNED_INT_2_10_10_10_REV(4, GL12C.GL_UNSIGNED_INT_2_10_10_10_REV, GlVersion.GL_12);

private final int byteSize;
private final int glFormat;
private final GlVersion minimumGlVersion;

PixelType(int glFormat, GlVersion minimumGlVersion) {
PixelType(int byteSize, int glFormat, GlVersion minimumGlVersion) {
this.byteSize = byteSize;
this.glFormat = glFormat;
this.minimumGlVersion = minimumGlVersion;
}
Expand All @@ -42,10 +45,15 @@ public static Optional<PixelType> fromString(String name) {
try {
return Optional.of(PixelType.valueOf(name.toUpperCase(Locale.US)));
} catch (IllegalArgumentException e) {
Iris.logger.error("Failed to find pixel type " + name.toUpperCase(Locale.ROOT));
return Optional.empty();
}
}

public int getByteSize() {
return byteSize;
}

public int getGlFormat() {
return glFormat;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package net.irisshaders.iris.mixin;

import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.renderer.debug.ChunkBorderRenderer;
import org.joml.Matrix4f;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.Slice;

@Mixin(ChunkBorderRenderer.class)
public class MixinChunkBorderRenderer {
private VertexConsumer fakeConsumer = new VertexConsumer() {
@Override
public VertexConsumer addVertex(float x, float y, float z) {
return this;
}

@Override
public VertexConsumer setColor(int red, int green, int blue, int alpha) {
return this;
}

@Override
public VertexConsumer setUv(float u, float v) {
return this;
}

@Override
public VertexConsumer setUv1(int u, int v) {
return this;
}

@Override
public VertexConsumer setUv2(int u, int v) {
return this;
}

@Override
public VertexConsumer setNormal(float normalX, float normalY, float normalZ) {
return this;
}
};

@Redirect(
method = "render",
at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/VertexConsumer;addVertex(Lorg/joml/Matrix4f;FFF)Lcom/mojang/blaze3d/vertex/VertexConsumer;"),
slice = @Slice(
from = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/PoseStack$Pose;pose()Lorg/joml/Matrix4f;"),
to = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/debug/ChunkBorderRenderer;CELL_BORDER:I", ordinal = 0)
)
)
private VertexConsumer isCameraChunk(VertexConsumer instance, Matrix4f pose, float x, float y, float z, @Local(ordinal = 0) int k, @Local(ordinal = 1) int l) {
if (!((k == 0 || k == 16) && (l == 0 || l == 16))) {
return instance.addVertex(pose, x,y ,z);
} else {
return fakeConsumer;
}
}

@Redirect(
method = "render",
at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/VertexConsumer;addVertex(Lorg/joml/Matrix4f;FFF)Lcom/mojang/blaze3d/vertex/VertexConsumer;"),
slice = @Slice(
from = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientLevel;getMinBuildHeight()I", ordinal = 1),
to = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;", ordinal = 1)
)
)
private VertexConsumer isSubChunkBorder(VertexConsumer instance, Matrix4f pose, float x, float y, float z, @Local(ordinal = 0) int k) {
if (k % 16 != 0) {
return instance.addVertex(pose, x,y ,z);
} else {
return fakeConsumer;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@
import org.lwjgl.glfw.GLFW;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(value = Window.class, priority = 1010)
public class MixinWindow {
//@Inject(method = "<init>", at = @At(value = "INVOKE", target = "Lorg/lwjgl/glfw/GLFW;glfwCreateWindow(IILjava/lang/CharSequence;JJ)J"))
@Unique
@Inject(method = "<init>", at = @At(value = "INVOKE", target = "Lorg/lwjgl/glfw/GLFW;glfwCreateWindow(IILjava/lang/CharSequence;JJ)J"))
private void iris$enableDebugContext(WindowEventHandler arg, ScreenManager arg2, DisplayData arg3, String string, String string2, CallbackInfo ci) {
if (Iris.getIrisConfig().areDebugOptionsEnabled()) {
GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_DEBUG_CONTEXT, GLFW.GLFW_TRUE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ public class SodiumPrograms {
private boolean hasBlockId;
private boolean hasMidUv;
private boolean hasNormal;
private boolean hasTangent;
private boolean hasMidBlock;

public SodiumPrograms(IrisRenderingPipeline pipeline, ProgramSet programSet, ProgramFallbackResolver resolver,
Expand All @@ -68,7 +67,7 @@ public SodiumPrograms(IrisRenderingPipeline pipeline, ProgramSet programSet, Pro
shaders.put(pass, shader);
}

WorldRenderingSettings.INSTANCE.setVertexFormat(FormatAnalyzer.createFormat(hasBlockId, hasNormal, hasMidUv, hasTangent, hasMidBlock));
WorldRenderingSettings.INSTANCE.setVertexFormat(FormatAnalyzer.createFormat(hasBlockId, hasNormal, hasMidUv, hasMidBlock));
}

private AlphaTest getAlphaTest(Pass pass, ProgramSource source) {
Expand Down Expand Up @@ -173,7 +172,6 @@ private GlProgram<ChunkShaderInterface> buildProgram(GlProgram.Builder builder,
if (!hasMidBlock) hasMidBlock = GL43C.glGetAttribLocation(handle, "at_midBlock") != -1;
if (!hasBlockId) hasBlockId = GL43C.glGetAttribLocation(handle, "mc_Entity") != -1;
if (!hasMidUv) hasMidUv = GL43C.glGetAttribLocation(handle, "mc_midTexCoord") != -1;
if (!hasTangent) hasTangent = GL43C.glGetAttribLocation(handle, "at_tangent") != -1;

return new SodiumShader(pipeline, pass, shader, handle, source.getDirectives().getBlendModeOverride().orElse(null),
createBufferBlendOverrides(source), customUniforms, flipState,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,13 @@ public static void transform(
root.rename("normalMatrix", "iris_NormalMatrix");
root.rename("chunkOffset", "u_RegionOffset");
if (parameters.type == PatchShaderType.VERTEX) {
boolean needsNormal = root.identifierIndex.has("vaNormal") || root.identifierIndex.has("at_tangent");
// _draw_translation replaced with Chunks[_draw_id].offset.xyz
root.replaceReferenceExpressions(t, "vaPosition", "_vert_position + _get_draw_translation(_draw_id)");
root.replaceReferenceExpressions(t, "vaColor", "_vert_color");
root.rename("vaNormal", "iris_Normal");
root.replaceReferenceExpressions(t, "vaNormal", "irs_Normal");
root.replaceReferenceExpressions(t, "at_tangent", "irs_Tangent");

root.replaceReferenceExpressions(t, "vaUV0", "_vert_tex_diffuse_coord");
root.replaceReferenceExpressions(t, "vaUV1", "ivec2(0, 10)");
root.replaceReferenceExpressions(t, "vaUV2", "a_LightAndData.xy");
Expand All @@ -32,7 +35,7 @@ public static void transform(
SodiumTransformer.replaceMidTexCoord(t, tree, root, 1.0f / 32768.0f);
SodiumTransformer.replaceMCEntity(t, tree, root);

SodiumTransformer.injectVertInit(t, tree, root, parameters);
SodiumTransformer.injectVertInit(t, tree, root, parameters, needsNormal);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ public static void transform(
replaceMidTexCoord(t, tree, root, 1.0f / 32768.0f);
replaceMCEntity(t, tree, root);

boolean needsNormal = root.identifierIndex.has("gl_Normal") || root.identifierIndex.has("at_tangent");

root.replaceExpressionMatches(t, CommonTransformer.glTextureMatrix0, "mat4(1.0)");
root.replaceExpressionMatches(t, CommonTransformer.glTextureMatrix1, "iris_LightmapTextureMatrix");
tree.parseAndInjectNode(t, ASTInjectionPoint.BEFORE_FUNCTIONS, "uniform mat4 iris_LightmapTextureMatrix;");
Expand All @@ -52,9 +54,9 @@ public static void transform(

root.rename("gl_Color", "_vert_color");

if (parameters.type.glShaderType == ShaderType.VERTEX && root.identifierIndex.has("gl_Normal")) {
root.rename("gl_Normal", "iris_Normal");
tree.parseAndInjectNode(t, ASTInjectionPoint.BEFORE_DECLARATIONS, "in vec3 iris_Normal;");
if (parameters.type.glShaderType == ShaderType.VERTEX && needsNormal) {
root.rename("gl_Normal", "irs_Normal");
root.replaceReferenceExpressions(t, "at_tangent", "irs_Tangent");
}

// TODO: Should probably add the normal matrix as a proper uniform that's
Expand Down Expand Up @@ -94,7 +96,7 @@ public static void transform(
// inject here so that _vert_position is available to the above. (injections
// inject in reverse order if performed piece-wise but in correct order if
// performed as an array of injections)
injectVertInit(t, tree, root, parameters);
injectVertInit(t, tree, root, parameters, needsNormal);
} else {
tree.parseAndInjectNodes(t, ASTInjectionPoint.BEFORE_DECLARATIONS,
"uniform mat4 iris_ModelViewMatrix;",
Expand All @@ -111,7 +113,7 @@ public static void injectVertInit(
ASTParser t,
TranslationUnit tree,
Root root,
SodiumParameters parameters) {
SodiumParameters parameters, boolean needsNormal) {
tree.parseAndInjectNodes(t, ASTInjectionPoint.BEFORE_DECLARATIONS,
// translated from sodium's chunk_vertex.glsl
"vec3 _vert_position;",
Expand All @@ -131,8 +133,30 @@ public static void injectVertInit(
"const float TEXTURE_FUZZ_AMOUNT = 1.0 / 64.0;",
"const float TEXTURE_GROW_FACTOR = (1.0 - TEXTURE_FUZZ_AMOUNT) / TEXTURE_MAX_COORD;",
"uint _draw_id;",
"vec3 irs_Normal;",
"vec4 irs_Tangent;",
"const uint MATERIAL_USE_MIP_OFFSET = 0u;",
"""
vec3 oct_to_vec3(vec2 e) {
vec2 f = vec2(e.x * 2.0f - 1.0f, e.y * 2.0f - 1.0f);
vec3 n = vec3(f.x, f.y, 1.0f - abs(f.x) - abs(f.y));
float t = clamp(-n.z, 0.0f, 1.0f);
n.x += n.x >= 0.0f ? -t : t;
n.y += n.y >= 0.0f ? -t : t;
return normalize(n);
}
""",
"""
vec4 tangent_decode(vec2 e) {
vec2 oct_compressed = e;
oct_compressed.y = oct_compressed.y * 2 - 1;
float r_sign = oct_compressed.y >= 0.0f ? 1.0f : -1.0f;
oct_compressed.y = abs(oct_compressed.y);
vec3 res = oct_to_vec3(oct_compressed.xy);
return vec4(res, r_sign);
}
""",
"""
uvec3 _deinterleave_u20x3(uvec2 data) {
uvec3 hi = (uvec3(data.x) >> uvec3(0u, 10u, 20u)) & 0x3FFu;
uvec3 lo = (uvec3(data.y) >> uvec3(0u, 10u, 20u)) & 0x3FFu;
Expand All @@ -158,6 +182,8 @@ vec2 _get_texcoord_bias() {
"_vert_tex_diffuse_coord = _get_texcoord() + _get_texcoord_bias();" +
"_vert_tex_light_coord = vec2(a_LightAndData.xy);" +
"_vert_color = a_Color;" +
(needsNormal ? "irs_Normal = oct_to_vec3(iris_Normal.xy);" : "") +
(needsNormal ? "irs_Tangent = tangent_decode(iris_Normal.zw);" : "") +
"_draw_id = a_LightAndData[3]; }",

"uvec3 _get_relative_chunk_coord(uint pos) {\n" +
Expand All @@ -171,6 +197,7 @@ vec2 _get_texcoord_bias() {
addIfNotExists(root, t, tree, "a_TexCoord", Type.U32VEC2, StorageQualifier.StorageType.IN);
addIfNotExists(root, t, tree, "a_Color", Type.F32VEC4, StorageQualifier.StorageType.IN);
addIfNotExists(root, t, tree, "a_LightAndData", Type.U32VEC4, StorageQualifier.StorageType.IN);
if (needsNormal) addIfNotExists(root, t, tree, "iris_Normal", Type.F32VEC4, StorageQualifier.StorageType.IN);
tree.prependMainFunctionBody(t, "_vert_init();");
}

Expand Down
Loading

0 comments on commit 899dcc4

Please sign in to comment.