Skip to content

Commit fc1ea6c

Browse files
committedSep 18, 2023
Merge branch '1.18.2' into 1.19.1
2 parents c40d668 + 5db622e commit fc1ea6c

File tree

8 files changed

+58
-26
lines changed

8 files changed

+58
-26
lines changed
 

‎src/main/java/net/coderbot/iris/pipeline/ClearPassCreator.java

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public static ImmutableList<ClearPass> createClearPasses(RenderTargets renderTar
4545
}
4646

4747
RenderTarget target = renderTargets.get(buffer);
48+
if (target == null) return;
4849
Vector4f clearColor = settings.getClearColor().orElse(defaultClearColor);
4950
clearByColor.computeIfAbsent(new Vector2i(target.getWidth(), target.getHeight()), size -> new HashMap<>()).computeIfAbsent(new ClearPassInformation(clearColor, target.getWidth(), target.getHeight()), color -> new IntArrayList()).add(buffer);
5051
}

‎src/main/java/net/coderbot/iris/pipeline/newshader/NewWorldRenderingPipeline.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -448,11 +448,6 @@ public NewWorldRenderingPipeline(ProgramSet programSet) throws IOException {
448448
BlockRenderingSettings.INSTANCE.setSeparateEntityDraws(programSet.getPackDirectives().shouldUseSeparateEntityDraws());
449449
BlockRenderingSettings.INSTANCE.setUseExtendedVertexFormat(true);
450450

451-
this.clearPassesFull = ClearPassCreator.createClearPasses(renderTargets, true,
452-
programSet.getPackDirectives().getRenderTargetDirectives());
453-
this.clearPasses = ClearPassCreator.createClearPasses(renderTargets, false,
454-
programSet.getPackDirectives().getRenderTargetDirectives());
455-
456451
if (shadowRenderTargets == null && shadowDirectives.isShadowEnabled() == OptionalBoolean.TRUE) {
457452
shadowRenderTargets = new ShadowRenderTargets(this, shadowMapResolution, shadowDirectives);
458453
}
@@ -498,6 +493,11 @@ public NewWorldRenderingPipeline(ProgramSet programSet) throws IOException {
498493
this.customUniforms.optimise();
499494
boolean hasRun = false;
500495

496+
this.clearPassesFull = ClearPassCreator.createClearPasses(renderTargets, true,
497+
programSet.getPackDirectives().getRenderTargetDirectives());
498+
this.clearPasses = ClearPassCreator.createClearPasses(renderTargets, false,
499+
programSet.getPackDirectives().getRenderTargetDirectives());
500+
501501
for (ComputeProgram program : setup) {
502502
if (program != null) {
503503
if (!hasRun) {

‎src/main/java/net/coderbot/iris/postprocess/CompositeRenderer.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ public CompositeRenderer(WorldRenderingPipeline pipeline, PackDirectives packDir
130130
// Flip the buffers that this shader wrote to, and set pass width and height
131131
ImmutableMap<Integer, Boolean> explicitFlips = directives.getExplicitFlips();
132132

133+
GlFramebuffer framebuffer = renderTargets.createColorFramebuffer(flipped, drawBuffers);
134+
133135
for (int buffer : drawBuffers) {
134136
RenderTarget target = renderTargets.get(buffer);
135137
if ((passWidth > 0 && passWidth != target.getWidth()) || (passHeight > 0 && passHeight != target.getHeight())) {
@@ -147,8 +149,6 @@ public CompositeRenderer(WorldRenderingPipeline pipeline, PackDirectives packDir
147149
flippedAtLeastOnce.add(buffer);
148150
}
149151

150-
GlFramebuffer framebuffer = renderTargets.createColorFramebuffer(flipped, drawBuffers);
151-
152152
explicitFlips.forEach((buffer, shouldFlip) -> {
153153
if (shouldFlip) {
154154
bufferFlipper.flip(buffer);
@@ -308,6 +308,8 @@ public void renderAll() {
308308
}
309309

310310
private static void setupMipmapping(net.coderbot.iris.rendertarget.RenderTarget target, boolean readFromAlt) {
311+
if (target == null) return;
312+
311313
int texture = readFromAlt ? target.getAltTexture() : target.getMainTexture();
312314

313315
// TODO: Only generate the mipmap if a valid mipmap hasn't been generated or if we've written to the buffer

‎src/main/java/net/coderbot/iris/postprocess/FinalPassRenderer.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public FinalPassRenderer(WorldRenderingPipeline pipeline, ProgramSet pack, Rende
129129
}
130130

131131
SwapPass swap = new SwapPass();
132-
RenderTarget target1 = renderTargets.get(target);
132+
RenderTarget target1 = renderTargets.getOrCreate(target);
133133
swap.target = target;
134134
swap.width = target1.getWidth();
135135
swap.height = target1.getHeight();
@@ -293,6 +293,8 @@ public void recalculateSwapPassSize() {
293293
}
294294

295295
private static void setupMipmapping(RenderTarget target, boolean readFromAlt) {
296+
if (target == null) return;
297+
296298
int texture = readFromAlt ? target.getAltTexture() : target.getMainTexture();
297299

298300
// TODO: Only generate the mipmap if a valid mipmap hasn't been generated or if we've written to the buffer
@@ -317,6 +319,7 @@ private static void setupMipmapping(RenderTarget target, boolean readFromAlt) {
317319
}
318320

319321
private static void resetRenderTarget(RenderTarget target) {
322+
if (target == null) return;
320323
// Resets the sampling mode of the given render target and then unbinds it to prevent accidental sampling of it
321324
// elsewhere.
322325
int filter = GL20C.GL_LINEAR;

‎src/main/java/net/coderbot/iris/rendertarget/RenderTargets.java

+36-11
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public class RenderTargets {
3030
private DepthCopyStrategy copyStrategy;
3131

3232
private final List<GlFramebuffer> ownedFramebuffers;
33+
private final Map<Integer, PackRenderTargetDirectives.RenderTargetSettings> targetSettingsMap;
34+
private final PackDirectives packDirectives;
3335

3436
private int cachedWidth;
3537
private int cachedHeight;
@@ -43,13 +45,8 @@ public class RenderTargets {
4345
public RenderTargets(int width, int height, int depthTexture, int depthBufferVersion, DepthBufferFormat depthFormat, Map<Integer, PackRenderTargetDirectives.RenderTargetSettings> renderTargets, PackDirectives packDirectives) {
4446
targets = new RenderTarget[renderTargets.size()];
4547

46-
renderTargets.forEach((index, settings) -> {
47-
// TODO: Handle mipmapping?
48-
Vector2i dimensions = packDirectives.getTextureScaleOverride(index, width, height);
49-
targets[index] = RenderTarget.builder().setDimensions(dimensions.x, dimensions.y)
50-
.setInternalFormat(settings.getInternalFormat())
51-
.setPixelFormat(settings.getInternalFormat().getPixelFormat()).build();
52-
});
48+
targetSettingsMap = renderTargets;
49+
this.packDirectives = packDirectives;
5350

5451
this.currentDepthTexture = depthTexture;
5552
this.currentDepthFormat = depthFormat;
@@ -88,7 +85,9 @@ public void destroy() {
8885
}
8986

9087
for (RenderTarget target : targets) {
91-
target.destroy();
88+
if (target != null) {
89+
target.destroy();
90+
}
9291
}
9392

9493
noTranslucents.destroy();
@@ -104,9 +103,33 @@ public RenderTarget get(int index) {
104103
throw new IllegalStateException("Tried to use destroyed RenderTargets");
105104
}
106105

106+
if (targets[index] == null) {
107+
return null;
108+
}
109+
107110
return targets[index];
108111
}
109112

113+
public RenderTarget getOrCreate(int index) {
114+
if (destroyed) {
115+
throw new IllegalStateException("Tried to use destroyed RenderTargets");
116+
}
117+
118+
if (targets[index] != null) return targets[index];
119+
120+
create(index);
121+
122+
return targets[index];
123+
}
124+
125+
private void create(int index) {
126+
PackRenderTargetDirectives.RenderTargetSettings settings = targetSettingsMap.get(index);
127+
Vector2i dimensions = packDirectives.getTextureScaleOverride(index, cachedWidth, cachedHeight);
128+
targets[index] = RenderTarget.builder().setDimensions(dimensions.x, dimensions.y)
129+
.setInternalFormat(settings.getInternalFormat())
130+
.setPixelFormat(settings.getInternalFormat().getPixelFormat()).build();
131+
}
132+
110133
public int getDepthTexture() {
111134
return currentDepthTexture;
112135
}
@@ -174,7 +197,9 @@ public boolean resizeIfNeeded(int newDepthBufferVersion, int newDepthTextureId,
174197
cachedHeight = newHeight;
175198

176199
for (int i = 0; i < targets.length; i++) {
177-
targets[i].resize(packDirectives.getTextureScaleOverride(i, newWidth, newHeight));
200+
if (targets[i] != null) {
201+
targets[i].resize(packDirectives.getTextureScaleOverride(i, newWidth, newHeight));
202+
}
178203
}
179204

180205
fullClearRequired = true;
@@ -253,7 +278,7 @@ private GlFramebuffer createEmptyFramebuffer() {
253278

254279
// NB: Before OpenGL 3.0, all framebuffers are required to have a color
255280
// attachment no matter what.
256-
framebuffer.addColorAttachment(0, get(0).getMainTexture());
281+
framebuffer.addColorAttachment(0, getOrCreate(0).getMainTexture());
257282
framebuffer.noDrawBuffers();
258283

259284
return framebuffer;
@@ -316,7 +341,7 @@ public GlFramebuffer createColorFramebuffer(ImmutableSet<Integer> stageWritesToM
316341
+ getRenderTargetCount() + " render targets are supported.");
317342
}
318343

319-
RenderTarget target = this.get(drawBuffers[i]);
344+
RenderTarget target = this.getOrCreate(drawBuffers[i]);
320345

321346
int textureId = stageWritesToMain.contains(drawBuffers[i]) ? target.getMainTexture() : target.getAltTexture();
322347

‎src/main/java/net/coderbot/iris/samplers/IrisImages.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@ public static void addRenderTargetImages(ImageHolder images, Supplier<ImmutableS
1919
for (int i = 0; i < renderTargets.getRenderTargetCount(); i++) {
2020
final int index = i;
2121

22+
final String name = "colorimg" + i;
23+
24+
if (!images.hasImage(name)) continue;
25+
2226
// Note: image bindings *are* impacted by buffer flips.
2327
IntSupplier textureID = () -> {
2428
ImmutableSet<Integer> flippedBuffers = flipped.get();
25-
RenderTarget target = renderTargets.get(index);
29+
RenderTarget target = renderTargets.getOrCreate(index);
2630

2731
if (flippedBuffers.contains(index)) {
2832
return target.getAltTexture();
@@ -31,8 +35,7 @@ public static void addRenderTargetImages(ImageHolder images, Supplier<ImmutableS
3135
}
3236
};
3337

34-
final InternalTextureFormat internalFormat = renderTargets.get(i).getInternalFormat();
35-
final String name = "colorimg" + i;
38+
final InternalTextureFormat internalFormat = renderTargets.getOrCreate(i).getInternalFormat();
3639

3740
images.addTextureImage(textureID, internalFormat, name);
3841
}

‎src/main/java/net/coderbot/iris/samplers/IrisSamplers.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public static void addRenderTargetSamplers(SamplerHolder samplers, Supplier<Immu
6262

6363
IntSupplier texture = () -> {
6464
ImmutableSet<Integer> flippedBuffers = flipped.get();
65-
RenderTarget target = renderTargets.get(index);
65+
RenderTarget target = renderTargets.getOrCreate(index);
6666

6767
if (flippedBuffers.contains(index)) {
6868
return target.getAltTexture();
@@ -71,8 +71,6 @@ public static void addRenderTargetSamplers(SamplerHolder samplers, Supplier<Immu
7171
}
7272
};
7373

74-
RenderTarget target = renderTargets.get(index);
75-
7674
final String name = "colortex" + i;
7775

7876
// TODO: How do custom textures interact with aliases?

‎src/main/resources/fabric.mod.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"schemaVersion": 1,
33
"id": "iris",
4-
"version": "1.6.6-development-environment",
4+
"version": "1.6.9-development-environment",
55

66
"name": "Iris",
77
"description": "A modern shaders mod for Minecraft intended to be compatible with existing OptiFine shader packs",

0 commit comments

Comments
 (0)
Please sign in to comment.