From b81ce8e67c9bff04aa3a2719f59f48355e942f4a Mon Sep 17 00:00:00 2001
From: screret <68943070+screret@users.noreply.github.com>
Date: Wed, 2 Oct 2024 16:28:42 +0300
Subject: [PATCH 001/269] builtin bloom (complete hack, doesn't work, likely
won't work with any rendering mods, TODO fix)
---
dependencies.gradle | 2 +-
.../resources/assets/gtceu/lang/en_ud.json | 15 +
.../resources/assets/gtceu/lang/en_us.json | 15 +
.../block/cupronickel_coil_block_active.json | 1 +
.../models/block/hssg_coil_block_active.json | 1 +
.../block/kanthal_coil_block_active.json | 1 +
.../block/naquadah_coil_block_active.json | 1 +
.../block/nichrome_coil_block_active.json | 1 +
.../block/rtm_alloy_coil_block_active.json | 1 +
.../block/trinium_coil_block_active.json | 1 +
.../block/tritanium_coil_block_active.json | 1 +
.../java/com/gregtechceu/gtceu/GTCEu.java | 5 +
.../com/gregtechceu/gtceu/api/GTValues.java | 3 +-
.../gregtechceu/gtceu/client/ClientProxy.java | 21 +-
.../client/particle/GTBloomParticle.java | 22 +
.../client/particle/GTOverheatParticle.java | 307 +++++++++
.../gtceu/client/particle/GTParticle.java | 118 ++++
.../client/particle/GTParticleManager.java | 222 ++++++
.../gtceu/client/renderer/GTRenderTypes.java | 15 +-
.../gtceu/client/renderer/IRenderSetup.java | 21 +
.../machine/FusionReactorRenderer.java | 11 +-
.../gtceu/client/shader/PingPongBuffer.java | 57 ++
.../gtceu/client/shader/PostTarget.java | 12 +
.../gtceu/client/shader/Shaders.java | 120 ++++
.../gtceu/client/shader/post/BloomEffect.java | 187 +++++
.../gtceu/client/shader/post/BloomType.java | 42 ++
.../gtceu/client/shader/post/BlurEffect.java | 64 ++
.../gtceu/client/util/BloomEffectUtil.java | 650 ++++++++++++++++++
.../gtceu/client/util/BloomUtils.java | 19 -
.../gtceu/client/util/DepthTextureUtil.java | 171 +++++
.../gtceu/client/util/DrawUtil.java | 18 +
.../client/util/EffectRenderContext.java | 88 +++
.../gtceu/client/util/IBloomEffect.java | 38 +
.../gtceu/client/util/RenderBufferHelper.java | 116 ++++
.../gtceu/client/util/RenderUtil.java | 44 ++
.../common/blockentity/CableBlockEntity.java | 29 +
.../gtceu/common/data/GTModels.java | 12 +-
.../gtceu/config/ConfigHolder.java | 177 +++++
.../gtceu/core/mixins/LevelRendererMixin.java | 17 +-
.../gtceu/core/mixins/RenderTypeAccessor.java | 12 +
.../resources/META-INF/accesstransformer.cfg | 5 +
.../assets/gtceu/shaders/core/black_hole.fsh | 215 ++++++
.../gtceu/shaders/core/bloom_combine.fsh | 31 +
.../gtceu/shaders/core/bloom_combine.json | 21 +
.../assets/gtceu/shaders/core/blur.fsh | 25 +
.../assets/gtceu/shaders/core/blur.json | 18 +
.../assets/gtceu/shaders/core/composite.fsh | 25 +
.../assets/gtceu/shaders/core/composite.json | 22 +
.../gtceu/shaders/core/down_sampling.fsh | 46 ++
.../gtceu/shaders/core/down_sampling.json | 18 +
.../assets/gtceu/shaders/core/image.fsh | 9 +
.../assets/gtceu/shaders/core/image.json | 16 +
.../assets/gtceu/shaders/core/image.vsh | 10 +
.../gtceu/shaders/core/seperable_blur.fsh | 31 +
.../gtceu/shaders/core/seperable_blur.json | 20 +
.../assets/gtceu/shaders/core/up_sampling.fsh | 36 +
.../gtceu/shaders/core/up_sampling.json | 19 +
src/main/resources/gtceu.mixins.json | 1 +
58 files changed, 3184 insertions(+), 42 deletions(-)
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/particle/GTBloomParticle.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/particle/GTOverheatParticle.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/particle/GTParticle.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/particle/GTParticleManager.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/renderer/IRenderSetup.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/shader/PingPongBuffer.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/shader/PostTarget.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/shader/Shaders.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/shader/post/BloomEffect.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/shader/post/BloomType.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/shader/post/BlurEffect.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/util/BloomEffectUtil.java
delete mode 100644 src/main/java/com/gregtechceu/gtceu/client/util/BloomUtils.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/util/DepthTextureUtil.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/util/EffectRenderContext.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/util/IBloomEffect.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/client/util/RenderUtil.java
create mode 100644 src/main/java/com/gregtechceu/gtceu/core/mixins/RenderTypeAccessor.java
create mode 100644 src/main/resources/assets/gtceu/shaders/core/black_hole.fsh
create mode 100644 src/main/resources/assets/gtceu/shaders/core/bloom_combine.fsh
create mode 100644 src/main/resources/assets/gtceu/shaders/core/bloom_combine.json
create mode 100644 src/main/resources/assets/gtceu/shaders/core/blur.fsh
create mode 100644 src/main/resources/assets/gtceu/shaders/core/blur.json
create mode 100644 src/main/resources/assets/gtceu/shaders/core/composite.fsh
create mode 100644 src/main/resources/assets/gtceu/shaders/core/composite.json
create mode 100644 src/main/resources/assets/gtceu/shaders/core/down_sampling.fsh
create mode 100644 src/main/resources/assets/gtceu/shaders/core/down_sampling.json
create mode 100644 src/main/resources/assets/gtceu/shaders/core/image.fsh
create mode 100644 src/main/resources/assets/gtceu/shaders/core/image.json
create mode 100644 src/main/resources/assets/gtceu/shaders/core/image.vsh
create mode 100644 src/main/resources/assets/gtceu/shaders/core/seperable_blur.fsh
create mode 100644 src/main/resources/assets/gtceu/shaders/core/seperable_blur.json
create mode 100644 src/main/resources/assets/gtceu/shaders/core/up_sampling.fsh
create mode 100644 src/main/resources/assets/gtceu/shaders/core/up_sampling.json
diff --git a/dependencies.gradle b/dependencies.gradle
index 449dd143029..5946f47e34c 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -58,7 +58,7 @@ dependencies {
// Shimmer
modCompileOnly(forge.shimmer.forge) { transitive = false }
- modCompileOnly("maven.modrinth:embeddium:0.3.19+mc1.20.1")
+ modCompileOnly("maven.modrinth:embeddium:0.3.31+mc1.20.1")
modCompileOnly("maven.modrinth:oculus:1.20.1-1.7.0")
// JAVD
diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json
index 2b901d21eae..722b4e9f57b 100644
--- a/src/generated/resources/assets/gtceu/lang/en_ud.json
+++ b/src/generated/resources/assets/gtceu/lang/en_ud.json
@@ -2220,8 +2220,11 @@
"config.gtceu.option.allUniqueStoneTypes": "sǝdʎ⟘ǝuoʇSǝnbıu∩ןןɐ",
"config.gtceu.option.animationTime": "ǝɯı⟘uoıʇɐɯıuɐ",
"config.gtceu.option.armorHud": "pnHɹoɯɹɐ",
+ "config.gtceu.option.assemblyLineParticles": "sǝןɔıʇɹɐԀǝuıꞀʎןqɯǝssɐ",
+ "config.gtceu.option.baseBrightness": "ssǝuʇɥbıɹᗺǝsɐq",
"config.gtceu.option.bedrockOreDistance": "ǝɔuɐʇsıᗡǝɹOʞɔoɹpǝq",
"config.gtceu.option.bedrockOreDropTagPrefix": "xıɟǝɹԀbɐ⟘doɹᗡǝɹOʞɔoɹpǝq",
+ "config.gtceu.option.bloomStyle": "ǝןʎʇSɯooןq",
"config.gtceu.option.bronzeBoilerHeatSpeed": "pǝǝdSʇɐǝHɹǝןıoᗺǝzuoɹq",
"config.gtceu.option.bronzeBoilerMaxTemperature": "ǝɹnʇɐɹǝdɯǝ⟘xɐWɹǝןıoᗺǝzuoɹq",
"config.gtceu.option.casingsPerCraft": "ʇɟɐɹƆɹǝԀsbuısɐɔ",
@@ -2240,6 +2243,7 @@
"config.gtceu.option.doesExplosionDamagesTerrain": "uıɐɹɹǝ⟘sǝbɐɯɐᗡuoısoןdxƎsǝop",
"config.gtceu.option.dumpAssets": "sʇǝssⱯdɯnp",
"config.gtceu.option.dumpRecipes": "sǝdıɔǝᴚdɯnp",
+ "config.gtceu.option.emissiveTexturesBloom": "ɯooןᗺsǝɹnʇxǝ⟘ǝʌıssıɯǝ",
"config.gtceu.option.enableCleanroom": "ɯooɹuɐǝןƆǝןqɐuǝ",
"config.gtceu.option.enableCompass": "ssɐdɯoƆǝןqɐuǝ",
"config.gtceu.option.enableMaintenance": "ǝɔuɐuǝʇuıɐWǝןqɐuǝ",
@@ -2256,6 +2260,7 @@
"config.gtceu.option.environmentalHazards": "spɹɐzɐHןɐʇuǝɯuoɹıʌuǝ",
"config.gtceu.option.euToPlatformRatio": "oıʇɐᴚɯɹoɟʇɐןԀo⟘nǝ",
"config.gtceu.option.flintAndSteelRequireSteel": "ןǝǝʇSǝɹınbǝᴚןǝǝʇSpuⱯʇuıןɟ",
+ "config.gtceu.option.fusionBloom": "ɯooןᗺuoısnɟ",
"config.gtceu.option.gameplay": "ʎɐןdǝɯɐb",
"config.gtceu.option.generateLowQualityGems": "sɯǝ⅁ʎʇıןɐnὉʍoꞀǝʇɐɹǝuǝb",
"config.gtceu.option.ghostCircuit": "ʇınɔɹıƆʇsoɥb",
@@ -2274,10 +2279,13 @@
"config.gtceu.option.harderRods": "spoᴚɹǝpɹɐɥ",
"config.gtceu.option.harmlessActiveTransformers": "sɹǝɯɹoɟsuɐɹ⟘ǝʌıʇɔⱯssǝןɯɹɐɥ",
"config.gtceu.option.hazardsEnabled": "pǝןqɐuƎspɹɐzɐɥ",
+ "config.gtceu.option.heatEffectBloom": "ɯooןᗺʇɔǝɟɟƎʇɐǝɥ",
"config.gtceu.option.hideFacadesInJEI": "IƎſuIsǝpɐɔɐℲǝpıɥ",
"config.gtceu.option.hideFilledCellsInJEI": "IƎſuIsןןǝƆpǝןןıℲǝpıɥ",
"config.gtceu.option.hideOreProcessingDiagrams": "sɯɐɹbɐıᗡbuıssǝɔoɹԀǝɹOǝpıɥ",
+ "config.gtceu.option.highBrightnessThreshold": "pןoɥsǝɹɥ⟘ssǝuʇɥbıɹᗺɥbıɥ",
"config.gtceu.option.highTierContent": "ʇuǝʇuoƆɹǝı⟘ɥbıɥ",
+ "config.gtceu.option.hookDepthTexture": "ǝɹnʇxǝ⟘ɥʇdǝᗡʞooɥ",
"config.gtceu.option.hpLiquidBoilerBaseOutput": "ʇndʇnOǝsɐᗺɹǝןıoᗺpınbıꞀdɥ",
"config.gtceu.option.hpSolarBoilerBaseOutput": "ʇndʇnOǝsɐᗺɹǝןıoᗺɹɐןoSdɥ",
"config.gtceu.option.hpSolidBoilerBaseOutput": "ʇndʇnOǝsɐᗺɹǝןıoᗺpıןoSdɥ",
@@ -2291,12 +2299,14 @@
"config.gtceu.option.ldFluidPipeMinDistance": "ǝɔuɐʇsıᗡuıWǝdıԀpınןℲpן",
"config.gtceu.option.ldItemPipeMinDistance": "ǝɔuɐʇsıᗡuıWǝdıԀɯǝʇIpן",
"config.gtceu.option.liquidBoilerBaseOutput": "ʇndʇnOǝsɐᗺɹǝןıoᗺpınbıן",
+ "config.gtceu.option.lowBrightnessThreshold": "pןoɥsǝɹɥ⟘ssǝuʇɥbıɹᗺʍoן",
"config.gtceu.option.machineOwnerBreak": "ʞɐǝɹᗺɹǝuʍOǝuıɥɔɐɯ",
"config.gtceu.option.machineOwnerGUI": "I∩⅁ɹǝuʍOǝuıɥɔɐɯ",
"config.gtceu.option.machineSounds": "spunoSǝuıɥɔɐɯ",
"config.gtceu.option.machines": "sǝuıɥɔɐɯ",
"config.gtceu.option.machinesEmissiveTextures": "sǝɹnʇxǝ⟘ǝʌıssıɯƎsǝuıɥɔɐɯ",
"config.gtceu.option.meHatchEnergyUsage": "ǝbɐs∩ʎbɹǝuƎɥɔʇɐHǝɯ",
+ "config.gtceu.option.nMips": "sdıWu",
"config.gtceu.option.nanoSaber": "ɹǝqɐSouɐu",
"config.gtceu.option.nanoSaberBaseDamage": "ǝbɐɯɐᗡǝsɐᗺɹǝqɐSouɐu",
"config.gtceu.option.nanoSaberDamageBoost": "ʇsooᗺǝbɐɯɐᗡɹǝqɐSouɐu",
@@ -2325,6 +2335,7 @@
"config.gtceu.option.rngDamageElectricTools": "sןoo⟘ɔıɹʇɔǝןƎǝbɐɯɐᗡbuɹ",
"config.gtceu.option.rubberTreeSpawnChance": "ǝɔuɐɥƆuʍɐdSǝǝɹ⟘ɹǝqqnɹ",
"config.gtceu.option.sandOresFall": "ןןɐℲsǝɹOpuɐs",
+ "config.gtceu.option.shader": "ɹǝpɐɥs",
"config.gtceu.option.showDimensionTier": "ɹǝı⟘uoısuǝɯıᗡʍoɥs",
"config.gtceu.option.smallBoilers": "sɹǝןıoᗺןןɐɯs",
"config.gtceu.option.solarBoilerBaseOutput": "ʇndʇnOǝsɐᗺɹǝןıoᗺɹɐןos",
@@ -2334,6 +2345,8 @@
"config.gtceu.option.steelBoilerHeatSpeed": "pǝǝdSʇɐǝHɹǝןıoᗺןǝǝʇs",
"config.gtceu.option.steelBoilerMaxTemperature": "ǝɹnʇɐɹǝdɯǝ⟘xɐWɹǝןıoᗺןǝǝʇs",
"config.gtceu.option.steelSteamMultiblocks": "sʞɔoןqıʇןnWɯɐǝʇSןǝǝʇs",
+ "config.gtceu.option.step": "dǝʇs",
+ "config.gtceu.option.strength": "ɥʇbuǝɹʇs",
"config.gtceu.option.titaniumBoilerHeatSpeed": "pǝǝdSʇɐǝHɹǝןıoᗺɯnıuɐʇıʇ",
"config.gtceu.option.titaniumBoilerMaxTemperature": "ǝɹnʇɐɹǝdɯǝ⟘xɐWɹǝןıoᗺɯnıuɐʇıʇ",
"config.gtceu.option.toolCraftingSounds": "spunoSbuıʇɟɐɹƆןooʇ",
@@ -2343,6 +2356,7 @@
"config.gtceu.option.tungstensteelBoilerMaxTemperature": "ǝɹnʇɐɹǝdɯǝ⟘xɐWɹǝןıoᗺןǝǝʇsuǝʇsbunʇ",
"config.gtceu.option.universalHazards": "spɹɐzɐHןɐsɹǝʌıun",
"config.gtceu.option.updateIntervals": "sןɐʌɹǝʇuIǝʇɐpdn",
+ "config.gtceu.option.useShader": "ɹǝpɐɥSǝsn",
"config.gtceu.option.useVBO": "OᗺΛǝsn",
"config.gtceu.option.voltageTierAdvImpeller": "ɹǝןןǝdɯIʌpⱯɹǝı⟘ǝbɐʇןoʌ",
"config.gtceu.option.voltageTierAdvNanoSuit": "ʇınSouɐNʌpⱯɹǝı⟘ǝbɐʇןoʌ",
@@ -5254,6 +5268,7 @@
"material.gtceu.einsteinium": "ɯnıuıǝʇsuıƎ",
"material.gtceu.electrotine": "ǝuıʇoɹʇɔǝןƎ",
"material.gtceu.electrum": "ɯnɹʇɔǝןƎ",
+ "material.gtceu.elementium": "ɯnıʇuǝɯǝןƎ",
"material.gtceu.emerald": "pןɐɹǝɯƎ",
"material.gtceu.ender_air": "ɹıⱯ ɹǝpuƎ",
"material.gtceu.ender_eye": "ǝʎƎ ɹǝpuƎ",
diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json
index 7513de071cc..a61af1d9a95 100644
--- a/src/generated/resources/assets/gtceu/lang/en_us.json
+++ b/src/generated/resources/assets/gtceu/lang/en_us.json
@@ -2220,8 +2220,11 @@
"config.gtceu.option.allUniqueStoneTypes": "allUniqueStoneTypes",
"config.gtceu.option.animationTime": "animationTime",
"config.gtceu.option.armorHud": "armorHud",
+ "config.gtceu.option.assemblyLineParticles": "assemblyLineParticles",
+ "config.gtceu.option.baseBrightness": "baseBrightness",
"config.gtceu.option.bedrockOreDistance": "bedrockOreDistance",
"config.gtceu.option.bedrockOreDropTagPrefix": "bedrockOreDropTagPrefix",
+ "config.gtceu.option.bloomStyle": "bloomStyle",
"config.gtceu.option.bronzeBoilerHeatSpeed": "bronzeBoilerHeatSpeed",
"config.gtceu.option.bronzeBoilerMaxTemperature": "bronzeBoilerMaxTemperature",
"config.gtceu.option.casingsPerCraft": "casingsPerCraft",
@@ -2240,6 +2243,7 @@
"config.gtceu.option.doesExplosionDamagesTerrain": "doesExplosionDamagesTerrain",
"config.gtceu.option.dumpAssets": "dumpAssets",
"config.gtceu.option.dumpRecipes": "dumpRecipes",
+ "config.gtceu.option.emissiveTexturesBloom": "emissiveTexturesBloom",
"config.gtceu.option.enableCleanroom": "enableCleanroom",
"config.gtceu.option.enableCompass": "enableCompass",
"config.gtceu.option.enableMaintenance": "enableMaintenance",
@@ -2256,6 +2260,7 @@
"config.gtceu.option.environmentalHazards": "environmentalHazards",
"config.gtceu.option.euToPlatformRatio": "euToPlatformRatio",
"config.gtceu.option.flintAndSteelRequireSteel": "flintAndSteelRequireSteel",
+ "config.gtceu.option.fusionBloom": "fusionBloom",
"config.gtceu.option.gameplay": "gameplay",
"config.gtceu.option.generateLowQualityGems": "generateLowQualityGems",
"config.gtceu.option.ghostCircuit": "ghostCircuit",
@@ -2274,10 +2279,13 @@
"config.gtceu.option.harderRods": "harderRods",
"config.gtceu.option.harmlessActiveTransformers": "harmlessActiveTransformers",
"config.gtceu.option.hazardsEnabled": "hazardsEnabled",
+ "config.gtceu.option.heatEffectBloom": "heatEffectBloom",
"config.gtceu.option.hideFacadesInJEI": "hideFacadesInJEI",
"config.gtceu.option.hideFilledCellsInJEI": "hideFilledCellsInJEI",
"config.gtceu.option.hideOreProcessingDiagrams": "hideOreProcessingDiagrams",
+ "config.gtceu.option.highBrightnessThreshold": "highBrightnessThreshold",
"config.gtceu.option.highTierContent": "highTierContent",
+ "config.gtceu.option.hookDepthTexture": "hookDepthTexture",
"config.gtceu.option.hpLiquidBoilerBaseOutput": "hpLiquidBoilerBaseOutput",
"config.gtceu.option.hpSolarBoilerBaseOutput": "hpSolarBoilerBaseOutput",
"config.gtceu.option.hpSolidBoilerBaseOutput": "hpSolidBoilerBaseOutput",
@@ -2291,12 +2299,14 @@
"config.gtceu.option.ldFluidPipeMinDistance": "ldFluidPipeMinDistance",
"config.gtceu.option.ldItemPipeMinDistance": "ldItemPipeMinDistance",
"config.gtceu.option.liquidBoilerBaseOutput": "liquidBoilerBaseOutput",
+ "config.gtceu.option.lowBrightnessThreshold": "lowBrightnessThreshold",
"config.gtceu.option.machineOwnerBreak": "machineOwnerBreak",
"config.gtceu.option.machineOwnerGUI": "machineOwnerGUI",
"config.gtceu.option.machineSounds": "machineSounds",
"config.gtceu.option.machines": "machines",
"config.gtceu.option.machinesEmissiveTextures": "machinesEmissiveTextures",
"config.gtceu.option.meHatchEnergyUsage": "meHatchEnergyUsage",
+ "config.gtceu.option.nMips": "nMips",
"config.gtceu.option.nanoSaber": "nanoSaber",
"config.gtceu.option.nanoSaberBaseDamage": "nanoSaberBaseDamage",
"config.gtceu.option.nanoSaberDamageBoost": "nanoSaberDamageBoost",
@@ -2325,6 +2335,7 @@
"config.gtceu.option.rngDamageElectricTools": "rngDamageElectricTools",
"config.gtceu.option.rubberTreeSpawnChance": "rubberTreeSpawnChance",
"config.gtceu.option.sandOresFall": "sandOresFall",
+ "config.gtceu.option.shader": "shader",
"config.gtceu.option.showDimensionTier": "showDimensionTier",
"config.gtceu.option.smallBoilers": "smallBoilers",
"config.gtceu.option.solarBoilerBaseOutput": "solarBoilerBaseOutput",
@@ -2334,6 +2345,8 @@
"config.gtceu.option.steelBoilerHeatSpeed": "steelBoilerHeatSpeed",
"config.gtceu.option.steelBoilerMaxTemperature": "steelBoilerMaxTemperature",
"config.gtceu.option.steelSteamMultiblocks": "steelSteamMultiblocks",
+ "config.gtceu.option.step": "step",
+ "config.gtceu.option.strength": "strength",
"config.gtceu.option.titaniumBoilerHeatSpeed": "titaniumBoilerHeatSpeed",
"config.gtceu.option.titaniumBoilerMaxTemperature": "titaniumBoilerMaxTemperature",
"config.gtceu.option.toolCraftingSounds": "toolCraftingSounds",
@@ -2343,6 +2356,7 @@
"config.gtceu.option.tungstensteelBoilerMaxTemperature": "tungstensteelBoilerMaxTemperature",
"config.gtceu.option.universalHazards": "universalHazards",
"config.gtceu.option.updateIntervals": "updateIntervals",
+ "config.gtceu.option.useShader": "useShader",
"config.gtceu.option.useVBO": "useVBO",
"config.gtceu.option.voltageTierAdvImpeller": "voltageTierAdvImpeller",
"config.gtceu.option.voltageTierAdvNanoSuit": "voltageTierAdvNanoSuit",
@@ -5254,6 +5268,7 @@
"material.gtceu.einsteinium": "Einsteinium",
"material.gtceu.electrotine": "Electrotine",
"material.gtceu.electrum": "Electrum",
+ "material.gtceu.elementium": "Elementium",
"material.gtceu.emerald": "Emerald",
"material.gtceu.ender_air": "Ender Air",
"material.gtceu.ender_eye": "Ender Eye",
diff --git a/src/generated/resources/assets/gtceu/models/block/cupronickel_coil_block_active.json b/src/generated/resources/assets/gtceu/models/block/cupronickel_coil_block_active.json
index 7fda089ccb8..a78e9f7909f 100644
--- a/src/generated/resources/assets/gtceu/models/block/cupronickel_coil_block_active.json
+++ b/src/generated/resources/assets/gtceu/models/block/cupronickel_coil_block_active.json
@@ -1,5 +1,6 @@
{
"parent": "gtceu:block/cube_2_layer/all",
+ "render_type": "gtceu:bloom",
"textures": {
"bot_all": "gtceu:block/casings/coils/machine_coil_cupronickel",
"top_all": "gtceu:block/casings/coils/machine_coil_cupronickel_bloom"
diff --git a/src/generated/resources/assets/gtceu/models/block/hssg_coil_block_active.json b/src/generated/resources/assets/gtceu/models/block/hssg_coil_block_active.json
index 41edb518870..6a221f09243 100644
--- a/src/generated/resources/assets/gtceu/models/block/hssg_coil_block_active.json
+++ b/src/generated/resources/assets/gtceu/models/block/hssg_coil_block_active.json
@@ -1,5 +1,6 @@
{
"parent": "gtceu:block/cube_2_layer/all",
+ "render_type": "gtceu:bloom",
"textures": {
"bot_all": "gtceu:block/casings/coils/machine_coil_hssg",
"top_all": "gtceu:block/casings/coils/machine_coil_hssg_bloom"
diff --git a/src/generated/resources/assets/gtceu/models/block/kanthal_coil_block_active.json b/src/generated/resources/assets/gtceu/models/block/kanthal_coil_block_active.json
index e52f55e6460..4de0b658fcd 100644
--- a/src/generated/resources/assets/gtceu/models/block/kanthal_coil_block_active.json
+++ b/src/generated/resources/assets/gtceu/models/block/kanthal_coil_block_active.json
@@ -1,5 +1,6 @@
{
"parent": "gtceu:block/cube_2_layer/all",
+ "render_type": "gtceu:bloom",
"textures": {
"bot_all": "gtceu:block/casings/coils/machine_coil_kanthal",
"top_all": "gtceu:block/casings/coils/machine_coil_kanthal_bloom"
diff --git a/src/generated/resources/assets/gtceu/models/block/naquadah_coil_block_active.json b/src/generated/resources/assets/gtceu/models/block/naquadah_coil_block_active.json
index 953c619e1ab..2cda617d69d 100644
--- a/src/generated/resources/assets/gtceu/models/block/naquadah_coil_block_active.json
+++ b/src/generated/resources/assets/gtceu/models/block/naquadah_coil_block_active.json
@@ -1,5 +1,6 @@
{
"parent": "gtceu:block/cube_2_layer/all",
+ "render_type": "gtceu:bloom",
"textures": {
"bot_all": "gtceu:block/casings/coils/machine_coil_naquadah",
"top_all": "gtceu:block/casings/coils/machine_coil_naquadah_bloom"
diff --git a/src/generated/resources/assets/gtceu/models/block/nichrome_coil_block_active.json b/src/generated/resources/assets/gtceu/models/block/nichrome_coil_block_active.json
index 792d1d73024..6f676e9d050 100644
--- a/src/generated/resources/assets/gtceu/models/block/nichrome_coil_block_active.json
+++ b/src/generated/resources/assets/gtceu/models/block/nichrome_coil_block_active.json
@@ -1,5 +1,6 @@
{
"parent": "gtceu:block/cube_2_layer/all",
+ "render_type": "gtceu:bloom",
"textures": {
"bot_all": "gtceu:block/casings/coils/machine_coil_nichrome",
"top_all": "gtceu:block/casings/coils/machine_coil_nichrome_bloom"
diff --git a/src/generated/resources/assets/gtceu/models/block/rtm_alloy_coil_block_active.json b/src/generated/resources/assets/gtceu/models/block/rtm_alloy_coil_block_active.json
index 23c85ffe103..75e25d1bf20 100644
--- a/src/generated/resources/assets/gtceu/models/block/rtm_alloy_coil_block_active.json
+++ b/src/generated/resources/assets/gtceu/models/block/rtm_alloy_coil_block_active.json
@@ -1,5 +1,6 @@
{
"parent": "gtceu:block/cube_2_layer/all",
+ "render_type": "gtceu:bloom",
"textures": {
"bot_all": "gtceu:block/casings/coils/machine_coil_rtm_alloy",
"top_all": "gtceu:block/casings/coils/machine_coil_rtm_alloy_bloom"
diff --git a/src/generated/resources/assets/gtceu/models/block/trinium_coil_block_active.json b/src/generated/resources/assets/gtceu/models/block/trinium_coil_block_active.json
index 3d730a8dc4b..018e0f519f7 100644
--- a/src/generated/resources/assets/gtceu/models/block/trinium_coil_block_active.json
+++ b/src/generated/resources/assets/gtceu/models/block/trinium_coil_block_active.json
@@ -1,5 +1,6 @@
{
"parent": "gtceu:block/cube_2_layer/all",
+ "render_type": "gtceu:bloom",
"textures": {
"bot_all": "gtceu:block/casings/coils/machine_coil_trinium",
"top_all": "gtceu:block/casings/coils/machine_coil_trinium_bloom"
diff --git a/src/generated/resources/assets/gtceu/models/block/tritanium_coil_block_active.json b/src/generated/resources/assets/gtceu/models/block/tritanium_coil_block_active.json
index c4c5f476247..9bc69bc77c8 100644
--- a/src/generated/resources/assets/gtceu/models/block/tritanium_coil_block_active.json
+++ b/src/generated/resources/assets/gtceu/models/block/tritanium_coil_block_active.json
@@ -1,5 +1,6 @@
{
"parent": "gtceu:block/cube_2_layer/all",
+ "render_type": "gtceu:bloom",
"textures": {
"bot_all": "gtceu:block/casings/coils/machine_coil_tritanium",
"top_all": "gtceu:block/casings/coils/machine_coil_tritanium_bloom"
diff --git a/src/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java
index 8f3f8a66ac7..25c6ccfe15b 100644
--- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java
+++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java
@@ -11,6 +11,7 @@
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.fml.DistExecutor;
+import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.common.Mod;
import org.slf4j.Logger;
@@ -94,6 +95,10 @@ public static boolean isArgonautsLoaded() {
return LDLib.isModLoaded(GTValues.MODID_ARGONAUTS);
}
+ public static boolean isOptifineLoaded() {
+ return ModList.get().isLoaded(GTValues.MODID_OPTIFINE);
+ }
+
@Deprecated(forRemoval = true, since = "1.0.21")
public static boolean isHighTier() {
return GTCEuAPI.isHighTier();
diff --git a/src/main/java/com/gregtechceu/gtceu/api/GTValues.java b/src/main/java/com/gregtechceu/gtceu/api/GTValues.java
index 646b2129218..78a2657f373 100644
--- a/src/main/java/com/gregtechceu/gtceu/api/GTValues.java
+++ b/src/main/java/com/gregtechceu/gtceu/api/GTValues.java
@@ -127,7 +127,8 @@ public static int[] tiersBetween(int minInclusive, int maxInclusive) {
MODID_SHIMMER = "shimmer",
MODID_JAVD = "javd",
MODID_FTBTEAMS = "ftbteams",
- MODID_ARGONAUTS = "argonauts";
+ MODID_ARGONAUTS = "argonauts",
+ MODID_OPTIFINE = "optifine";
/**
* Spray painting compat modids
diff --git a/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java b/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java
index 336acbcfc7a..1ce47d712ee 100644
--- a/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java
+++ b/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java
@@ -10,6 +10,7 @@
import com.gregtechceu.gtceu.client.particle.HazardParticle;
import com.gregtechceu.gtceu.client.renderer.entity.GTBoatRenderer;
import com.gregtechceu.gtceu.client.renderer.entity.GTExplosiveRenderer;
+import com.gregtechceu.gtceu.client.util.BloomEffectUtil;
import com.gregtechceu.gtceu.common.CommonProxy;
import com.gregtechceu.gtceu.common.data.GTBlockEntities;
import com.gregtechceu.gtceu.common.data.GTEntityTypes;
@@ -22,6 +23,8 @@
import net.minecraft.client.model.BoatModel;
import net.minecraft.client.model.ChestBoatModel;
+import net.minecraft.client.renderer.RenderType;
+import net.minecraft.client.renderer.Sheets;
import net.minecraft.client.renderer.blockentity.HangingSignRenderer;
import net.minecraft.client.renderer.blockentity.SignRenderer;
import net.minecraft.client.renderer.entity.ThrownItemRenderer;
@@ -29,10 +32,7 @@
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.ForgeHooksClient;
-import net.minecraftforge.client.event.EntityRenderersEvent;
-import net.minecraftforge.client.event.RegisterGuiOverlaysEvent;
-import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
-import net.minecraftforge.client.event.RegisterParticleProvidersEvent;
+import net.minecraftforge.client.event.*;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import com.google.common.collect.BiMap;
@@ -59,6 +59,7 @@ public static void init() {
RecipeComponent.registerRecipeViewCreator(new GTRecipeViewCreator());
CompassManager.INSTANCE.registerUIConfig(GTCEu.MOD_ID, new GTCompassUIConfig());
CompassManager.INSTANCE.registerAction("multiblock", MultiblockAction::new);
+ BloomEffectUtil.init();
}
@SubscribeEvent
@@ -72,10 +73,13 @@ public void onRegisterEntityRenderers(EntityRenderersEvent.RegisterRenderers eve
event.registerEntityRenderer(GTEntityTypes.BOAT.get(), c -> new GTBoatRenderer(c, false));
event.registerEntityRenderer(GTEntityTypes.CHEST_BOAT.get(), c -> new GTBoatRenderer(c, true));
+ }
+ @SubscribeEvent
+ public void onRegisterEntityLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) {
for (var type : GTBoat.BoatType.values()) {
- ForgeHooksClient.registerLayerDefinition(GTBoatRenderer.getBoatModelName(type), BoatModel::createBodyModel);
- ForgeHooksClient.registerLayerDefinition(GTBoatRenderer.getChestBoatModelName(type),
+ event.registerLayerDefinition(GTBoatRenderer.getBoatModelName(type), BoatModel::createBodyModel);
+ event.registerLayerDefinition(GTBoatRenderer.getChestBoatModelName(type),
ChestBoatModel::createBodyModel);
}
}
@@ -94,4 +98,9 @@ public void onRegisterGuiOverlays(RegisterGuiOverlaysEvent event) {
public void onRegisterParticleProviders(RegisterParticleProvidersEvent event) {
event.registerSpriteSet(GTParticleTypes.HAZARD_PARTICLE.get(), HazardParticle.Provider::new);
}
+
+ @SubscribeEvent
+ public void onRegisterNamedRenderTypes(RegisterNamedRenderTypesEvent event) {
+ event.register("bloom", BloomEffectUtil.getBloomLayer(), Sheets.cutoutBlockSheet());
+ }
}
diff --git a/src/main/java/com/gregtechceu/gtceu/client/particle/GTBloomParticle.java b/src/main/java/com/gregtechceu/gtceu/client/particle/GTBloomParticle.java
new file mode 100644
index 00000000000..4e04931b080
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/client/particle/GTBloomParticle.java
@@ -0,0 +1,22 @@
+package com.gregtechceu.gtceu.client.particle;
+
+import com.gregtechceu.gtceu.client.renderer.IRenderSetup;
+import com.gregtechceu.gtceu.client.shader.post.BloomType;
+import com.gregtechceu.gtceu.client.util.BloomEffectUtil;
+import com.gregtechceu.gtceu.client.util.IBloomEffect;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public abstract class GTBloomParticle extends GTParticle implements IBloomEffect {
+
+ public GTBloomParticle(double posX, double posY, double posZ) {
+ super(posX, posY, posZ);
+ BloomEffectUtil.registerBloomRender(getBloomRenderSetup(), getBloomType(), this, this);
+ }
+
+ @Nullable
+ protected abstract IRenderSetup getBloomRenderSetup();
+
+ @NotNull
+ protected abstract BloomType getBloomType();
+}
diff --git a/src/main/java/com/gregtechceu/gtceu/client/particle/GTOverheatParticle.java b/src/main/java/com/gregtechceu/gtceu/client/particle/GTOverheatParticle.java
new file mode 100644
index 00000000000..9882547ff76
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/client/particle/GTOverheatParticle.java
@@ -0,0 +1,307 @@
+package com.gregtechceu.gtceu.client.particle;
+
+import com.gregtechceu.gtceu.GTCEu;
+import com.gregtechceu.gtceu.api.GTValues;
+import com.gregtechceu.gtceu.client.renderer.GTRenderTypes;
+import com.gregtechceu.gtceu.client.renderer.IRenderSetup;
+import com.gregtechceu.gtceu.client.shader.post.BloomType;
+import com.gregtechceu.gtceu.client.util.DrawUtil;
+import com.gregtechceu.gtceu.client.util.EffectRenderContext;
+import com.gregtechceu.gtceu.client.util.RenderBufferHelper;
+
+import com.gregtechceu.gtceu.common.blockentity.CableBlockEntity;
+import com.gregtechceu.gtceu.config.ConfigHolder;
+import com.lowdragmc.shimmer.client.shader.RenderUtils;
+
+import net.minecraft.core.BlockPos;
+import net.minecraft.core.particles.ParticleTypes;
+import net.minecraft.world.phys.AABB;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraftforge.api.distmarker.Dist;
+import net.minecraftforge.api.distmarker.OnlyIn;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+import com.mojang.blaze3d.vertex.*;
+import lombok.Setter;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * @author brachy84
+ */
+public class GTOverheatParticle extends GTBloomParticle {
+
+ public static final int TEMPERATURE_CUTOFF = 400;
+
+ /**
+ * Source
+ */
+ private static final int[] blackBodyColors = {
+ 0xFF3300, // 1000 K
+ 0xFF5300, // 1200 K
+ 0xFF6500, // 1400 K
+ 0xFF7300, // 1600 K
+ 0xFF7E00, // 1800 K
+ 0xFF8912, // 2000 K
+ 0xFF932C, // 2200 K
+ 0xFF9D3F, // 2400 K
+ 0xffa54f, // 2600 K
+ 0xffad5e, // 2800 K
+ 0xffb46b, // 3000 K
+ 0xffbb78, // 3200 K
+ 0xffc184, // 3400 K
+ 0xffc78f, // 3600 K
+ 0xffcc99, // 3800 K
+ 0xffd1a3, // 4000 K
+ 0xffd5ad, // 4200 K
+ 0xffd9b6, // 4400 K
+ 0xffddbe, // 4600 K
+ 0xffe1c6, // 4800 K
+ 0xffe4ce, // 5000 K
+ 0xffe8d5, // 5200 K
+ 0xffebdc, // 5400 K
+ 0xffeee3, // 5600 K
+ 0xfff0e9, // 5800 K
+ 0xfff3ef, // 6000 K
+ 0xfff5f5, // 6200 K
+ 0xfff8fb, // 6400 K
+ 0xfef9ff, // 6600 K
+ 0xf9f6ff, // 6800 K
+ 0xf5f3ff, // 7000 K
+ 0xf0f1ff, // 7200 K
+ 0xedefff, // 7400 K
+ 0xe9edff, // 7600 K
+ 0xe6ebff, // 7800 K
+ 0xe3e9ff, // 8000 K
+ 0xe0e7ff, // 8200 K
+ 0xdde6ff, // 8400 K
+ 0xdae4ff, // 8600 K
+ 0xd8e3ff, // 8800 K
+ 0xd6e1ff, // 9000 K
+ 0xd3e0ff, // 9200 K
+ 0xd1dfff, // 9400 K
+ 0xcfddff, // 9600 K
+ 0xcedcff, // 9800 K
+ 0xccdbff, // 10000 K
+ 0xcadaff, // 10200 K
+ 0xc9d9ff, // 10400 K
+ 0xc7d8ff, // 10600 K
+ 0xc6d8ff, // 10800 K
+ 0xc4d7ff, // 11000 K
+ 0xc3d6ff, // 11200 K
+ 0xc2d5ff, // 11400 K
+ 0xc1d4ff, // 11600 K
+ 0xc0d4ff, // 11800 K
+ 0xbfd3ff, // 12000 K
+ 0xbed2ff, // 12200 K
+ 0xbdd2ff, // 12400 K
+ 0xbcd1ff, // 12600 K
+ 0xbbd1ff, // 12800 K
+ 0xbad0ff, // 13000 K
+ 0xb9d0ff, // 13200 K
+ 0xb8cfff, // 13400 K
+ 0xb7cfff, // 13600 K
+ 0xb7ceff, // 13800 K
+ 0xb6ceff, // 14000 K
+ 0xb5cdff, // 14200 K
+ 0xb5cdff, // 14400 K
+ 0xb4ccff, // 14600 K
+ 0xb3ccff, // 14800 K
+ 0xb3ccff, // 15000 K
+ 0xb2cbff, // 15200 K
+ 0xb2cbff, // 15400 K
+ 0xb1caff, // 15600 K
+ 0xb1caff, // 15800 K
+ 0xb0caff, // 16000 K
+ 0xafc9ff, // 16200 K
+ 0xafc9ff, // 16400 K
+ 0xafc9ff, // 16600 K
+ 0xaec9ff, // 16800 K
+ 0xaec8ff, // 17000 K
+ 0xadc8ff, // 17200 K
+ 0xadc8ff, // 17400 K
+ 0xacc7ff, // 17600 K
+ 0xacc7ff, // 17800 K
+ 0xacc7ff, // 18000 K
+ 0xabc7ff, // 18200 K
+ 0xabc6ff, // 18400 K
+ 0xaac6ff, // 18600 K
+ 0xaac6ff, // 18800 K
+ 0xaac6ff, // 19000 K
+ 0xa9c6ff, // 19200 K
+ 0xa9c5ff, // 19400 K
+ 0xa9c5ff, // 19600 K
+ 0xa9c5ff, // 19800 K
+ 0xa8c5ff, // 20000 K
+ // color doesn't really change onwards
+ };
+
+ public static int getBlackBodyColor(int temperature) {
+ if (temperature < 1000)
+ return blackBodyColors[0];
+ int index = (temperature - 1000) / 200;
+ if (index >= blackBodyColors.length - 1)
+ return blackBodyColors[blackBodyColors.length - 1];
+ int color = blackBodyColors[index];
+ return DrawUtil.interpolateColor(color, blackBodyColors[index + 1], temperature % 200 / 200f);
+ }
+
+ private final CableBlockEntity tileEntity;
+
+ protected final int meltTemp;
+ protected int temperature = 293;
+ protected VoxelShape pipeBoxes;
+ protected boolean insulated;
+
+ protected float alpha = 0;
+ protected int color = blackBodyColors[0];
+
+ public GTOverheatParticle(@NotNull CableBlockEntity tileEntity, int meltTemp,
+ @NotNull VoxelShape pipeBoxes, boolean insulated) {
+ super(tileEntity.getBlockPos().getX(), tileEntity.getBlockPos().getY(), tileEntity.getBlockPos().getZ());
+ this.tileEntity = tileEntity;
+ this.meltTemp = meltTemp;
+ this.pipeBoxes = pipeBoxes;
+ updatePipeBoxes(pipeBoxes);
+ this.insulated = insulated;
+ }
+
+ public void setTemperature(int temperature) {
+ this.temperature = temperature;
+ if (temperature <= 293 || temperature > meltTemp) {
+ setExpired();
+ return;
+ }
+ if (temperature < 500) {
+ alpha = 0f;
+ } else if (temperature < 1000) {
+ alpha = (temperature - 500f) / 500f;
+ alpha *= 0.8f;
+ } else {
+ alpha = 0.8f;
+ }
+ color = getBlackBodyColor(temperature);
+ }
+
+ public void updatePipeBoxes(@NotNull VoxelShape pipeBoxes) {
+ List
+ * Register a custom bloom render callback for subsequent world render. The render call persists until the
+ * {@code blockEntity} is invalidated, or the world associated with {@code blockEntity} or the ticket is
+ * manually freed by calling {@link BloomRenderTicket#invalidate()}.
+ *
+ * This method does not register bloom render ticket when Optifine is present, and an invalid ticket will be
+ * returned instead.
+ *
+ * Register a custom bloom render callback for subsequent world render. The render call persists until the
+ * {@code particle} is invalidated, or the ticket is manually freed by calling
+ * {@link BloomRenderTicket#invalidate()}.
+ *
+ * This method does not register bloom render ticket when Optifine is present, and an invalid ticket will be
+ * returned instead.
+ *
+ * Register a custom bloom render callback for subsequent world render. The render call persists until it is
+ * manually freed by calling {@link BloomRenderTicket#invalidate()}, or invalidated by validity checker.
+ *
+ * This method does not register bloom render ticket when Optifine is present, and an invalid ticket will be
+ * returned instead.
+ *
+ * Register a custom bloom render callback for subsequent world render. The render call persists until it is
+ * manually freed by calling {@link BloomRenderTicket#invalidate()}, or invalidated by validity checker.
+ *
+ * This method does not register bloom render ticket when Optifine is present, and an invalid ticket will be
+ * returned instead.
+ *
+ * 1 - Unity Bloom
+ *
+ * 2 - Unreal Bloom
+ *
- * This method does not register bloom render ticket when Optifine is present, and an invalid ticket will be + * This method does not register bloom render ticket when Iris/Oculus is present, and an invalid ticket will be * returned instead. *
* @@ -179,7 +182,7 @@ public boolean shouldRenderBloomEffect(@NotNull EffectRenderContext context) { * {@link BloomRenderTicket#invalidate()}. * *- * This method does not register bloom render ticket when Optifine is present, and an invalid ticket will be + * This method does not register bloom render ticket when Iris/Oculus is present, and an invalid ticket will be * returned instead. *
* @@ -205,7 +208,7 @@ public static BloomRenderTicket registerBloomRender(@Nullable IRenderSetup setup * manually freed by calling {@link BloomRenderTicket#invalidate()}, or invalidated by validity checker. * *- * This method does not register bloom render ticket when Optifine is present, and an invalid ticket will be + * This method does not register bloom render ticket when Iris/Oculus is present, and an invalid ticket will be * returned instead. *
* @@ -234,7 +237,7 @@ public static BloomRenderTicket registerBloomRender(@Nullable IRenderSetup setup * manually freed by calling {@link BloomRenderTicket#invalidate()}, or invalidated by validity checker. * *- * This method does not register bloom render ticket when Optifine is present, and an invalid ticket will be + * This method does not register bloom render ticket when Iris/Oculus is present, and an invalid ticket will be * returned instead. *
* @@ -257,7 +260,7 @@ public static BloomRenderTicket registerBloomRender(@Nullable IRenderSetup setup @NotNull IBloomEffect render, @Nullable Predicate- * 1 - Unity Bloom - *
- *- * 2 - Unreal Bloom - *
- */ - int customBloomStyle(); - } } diff --git a/src/main/java/com/gregtechceu/gtceu/client/util/DepthTextureUtil.java b/src/main/java/com/gregtechceu/gtceu/client/util/DepthTextureUtil.java deleted file mode 100644 index 767f73209fc..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/client/util/DepthTextureUtil.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.gregtechceu.gtceu.client.util; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.config.ConfigHolder; -import com.mojang.blaze3d.pipeline.RenderTarget; -import com.mojang.blaze3d.platform.GlStateManager; -import com.mojang.blaze3d.platform.TextureUtil; -import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.world.entity.Entity; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.event.RenderLevelStageEvent; -import net.minecraftforge.event.TickEvent; -import org.lwjgl.opengl.*; - -/** - * Created with IntelliJ IDEA. - * - * @author KilaBash - * @date 2021/09/11 - * @implNote You'll need it when you need to get deep textures to do more cool things. - * The default FBO is used, unfortunately, sometimes we have to abandon native way to create a new fbo. - * But generally not. - */ -@OnlyIn(Dist.CLIENT) -public class DepthTextureUtil { - - public static int framebufferObject; - public static int framebufferDepthTexture; - private static boolean useDefaultFBO = true; - private static boolean lastBind; - private static int lastWidth, lastHeight; - - private static boolean shouldRenderDepthTexture() { - return lastBind && !GTCEu.isOptifineLoaded() && ConfigHolder.INSTANCE.client.hookDepthTexture; - } - - public static void onPreWorldRender(TickEvent.RenderTickEvent event) { - Minecraft mc = Minecraft.getInstance(); - if (event.phase == TickEvent.Phase.START && mc.level != null) { - if (shouldRenderDepthTexture()) { - if (useDefaultFBO && GL11.glGetError() != 0) { // if we can't use the vanilla fbo.... okay, why not - // create our own fbo? - useDefaultFBO = false; - if (framebufferDepthTexture != 0) { - disposeDepthTexture(); - createDepthTexture(); - } - } - if (framebufferDepthTexture == 0) { - createDepthTexture(); - } else if (lastWidth != mc.getMainRenderTarget().width || - lastHeight != mc.getMainRenderTarget().height) { - disposeDepthTexture(); - createDepthTexture(); - } - } else { - disposeDepthTexture(); - } - lastBind = false; - } - } - - public static void renderWorld(RenderLevelStageEvent event) { // re-render world in our own fbo. - if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_BLOCK_ENTITIES) { - return; - } - Minecraft mc = Minecraft.getInstance(); - Entity viewer = mc.getCameraEntity(); - if (DepthTextureUtil.framebufferDepthTexture != 0 && mc.level != null && viewer != null && - !DepthTextureUtil.useDefaultFBO) { - int lastFBO = GlStateManager.getBoundFramebuffer(); - GlStateManager._glBindFramebuffer(GL30.GL_FRAMEBUFFER, framebufferObject); - RenderSystem.clear(GL11.GL_DEPTH_BUFFER_BIT, Minecraft.ON_OSX); - var projectionMatrix = RenderSystem.getProjectionMatrix(); - mc.levelRenderer.renderChunkLayer(RenderType.solid(), event.getPoseStack(), - viewer.getX(), viewer.getY(), viewer.getZ(), projectionMatrix); - mc.levelRenderer.renderChunkLayer(RenderType.solid(), event.getPoseStack(), - viewer.getX(), viewer.getY(), viewer.getZ(), projectionMatrix); - GlStateManager._glBindFramebuffer(GL30.GL_FRAMEBUFFER, lastFBO); - } - } - - public static void createDepthTexture() { - int lastFBO = GlStateManager._getInteger(GL30.GL_FRAMEBUFFER_BINDING); - RenderTarget framebuffer = Minecraft.getInstance().getMainRenderTarget(); - boolean stencil = framebuffer.isStencilEnabled() && useDefaultFBO; - - if (useDefaultFBO) { - framebufferObject = framebuffer.frameBufferId; - } else { - framebufferObject = GlStateManager.glGenFramebuffers(); - } - - framebufferDepthTexture = TextureUtil.generateTextureId(); // gen texture - RenderSystem.bindTexture(framebufferDepthTexture); - RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT); - RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT); - RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); - RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); - RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL14.GL_DEPTH_TEXTURE_MODE, GL11.GL_LUMINANCE); - RenderSystem.texParameter(GL11.GL_TEXTURE_2D, GL14.GL_TEXTURE_COMPARE_FUNC, GL11.GL_LEQUAL); - GlStateManager._texImage2D(GL11.GL_TEXTURE_2D, 0, - stencil ? GL30.GL_DEPTH24_STENCIL8 : GL14.GL_DEPTH_COMPONENT24, - framebuffer.viewWidth, - framebuffer.viewHeight, 0, - stencil ? GL30.GL_DEPTH_STENCIL : GL11.GL_DEPTH_COMPONENT, - stencil ? GL30.GL_UNSIGNED_INT_24_8 : GL11.GL_UNSIGNED_INT, null); - RenderSystem.bindTexture(0); - - lastWidth = framebuffer.viewWidth; - lastHeight = framebuffer.viewHeight; - - GlStateManager._glBindFramebuffer(GL30.GL_FRAMEBUFFER, framebufferObject); // bind buffer then bind depth texture - GlStateManager._glFramebufferTexture2D(GL30.GL_FRAMEBUFFER, - stencil ? GL30.GL_DEPTH_STENCIL_ATTACHMENT : GL30.GL_DEPTH_ATTACHMENT, - GL11.GL_TEXTURE_2D, - framebufferDepthTexture, 0); - - if (BloomEffectUtil.getBloomFBO() != null && useDefaultFBO) { - RenderUtil.hookDepthTexture(BloomEffectUtil.getBloomFBO(), framebufferDepthTexture); - } - - GlStateManager._glBindFramebuffer(GL30.GL_FRAMEBUFFER, lastFBO); - } - - public static void disposeDepthTexture() { - if (framebufferDepthTexture != 0 || framebufferObject != 0) { - if (useDefaultFBO) { - RenderTarget framebuffer = Minecraft.getInstance().getMainRenderTarget(); - RenderTarget bloomFBO = BloomEffectUtil.getBloomFBO(); - if (bloomFBO != null) { - RenderUtil.hookDepthBuffer(bloomFBO, framebuffer.getDepthTextureId()); - } - RenderUtil.hookDepthBuffer(framebuffer, framebuffer.getDepthTextureId()); - } else { - RenderSystem.glDeleteBuffers(framebufferObject); - } - RenderSystem.deleteTexture(framebufferDepthTexture); - framebufferObject = 0; - framebufferDepthTexture = 0; - } - } - - public static void bindDepthTexture() { - lastBind = true; - if (useDefaultFBO && framebufferDepthTexture != 0) { - RenderTarget mainTarget = Minecraft.getInstance().getMainRenderTarget(); - RenderUtil.hookDepthBuffer(mainTarget, mainTarget.getDepthTextureId()); - } - RenderSystem.bindTexture(framebufferDepthTexture); - } - - public static void unBindDepthTexture() { - RenderSystem.bindTexture(0); - if (useDefaultFBO) { - RenderTarget framebuffer = Minecraft.getInstance().getMainRenderTarget(); - RenderUtil.hookDepthTexture(framebuffer, framebufferDepthTexture); - } - } - - public static boolean isUseDefaultFBO() { - return useDefaultFBO; - } - - public static boolean isLastBind() { - return framebufferObject != 0; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/client/util/RenderUtil.java b/src/main/java/com/gregtechceu/gtceu/client/util/RenderUtil.java index d6a4e59a0db..617416705a6 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/util/RenderUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/client/util/RenderUtil.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.client.util; -import com.gregtechceu.gtceu.client.shader.PostTarget; import com.mojang.blaze3d.pipeline.RenderTarget; import com.mojang.blaze3d.platform.GlStateManager; import net.minecraft.client.Minecraft; @@ -11,7 +10,7 @@ @OnlyIn(Dist.CLIENT) public class RenderUtil { - public static boolean updateFBOSize(PostTarget fbo, int width, int height) { + public static boolean updateFBOSize(RenderTarget fbo, int width, int height) { if (fbo.width != width || fbo.height != height) { fbo.createBuffers(width, height, Minecraft.ON_OSX); return true; diff --git a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java index d2fa24339e4..b780d97378c 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -672,7 +672,7 @@ public static class ShaderOptions { public boolean emissiveTexturesBloom = true; @Configurable - @Configurable.Comment({ "Bloom Algorithm", "0 - Simple Gaussian Blur Bloom (Fast)", "1 - Unity Bloom", + @Configurable.Comment({ "Bloom Algorithm", "0 - Simple Gaussian Blur Bloom (Fast) NYI: WILL ERROR", "1 - Unity Bloom", "2 - Unreal Bloom", "Default: 2" }) @Configurable.Range(min = 0, max = 2) public int bloomStyle = 2; @@ -719,7 +719,7 @@ public static class ShaderOptions { @Configurable @Configurable.Comment({ "Blur Step (bloom range)", "Default: 1" }) @Configurable.DecimalRange(min = 0) - public float step = 1; + public float step = 1.0f; public static class FusionBloom { diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/LevelRendererMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/LevelRendererMixin.java index 9c94b09bb7d..1ecd9fc9354 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/LevelRendererMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/LevelRendererMixin.java @@ -103,26 +103,20 @@ public abstract class LevelRendererMixin { } } - @WrapOperation(method = "renderLevel", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/renderer/LevelRenderer;renderChunkLayer(Lnet/minecraft/client/renderer/RenderType;Lcom/mojang/blaze3d/vertex/PoseStack;DDDLorg/joml/Matrix4f;)V") - ) - private void gtceu$renderBloomLayer(LevelRenderer instance, RenderType renderType, PoseStack poseStack, double camX, double camY, double camZ, Matrix4f projectionMatrix, Operation
* Register a custom bloom render callback for subsequent world render. The render call persists until the
@@ -287,38 +206,7 @@ public static void invalidateLevelTickets(@NotNull LevelAccessor level) {
}
}
- public static Supplier