diff --git a/src/main/java/rs117/hd/HdPlugin.java b/src/main/java/rs117/hd/HdPlugin.java index cb715fd25a..dec67b35c4 100644 --- a/src/main/java/rs117/hd/HdPlugin.java +++ b/src/main/java/rs117/hd/HdPlugin.java @@ -907,6 +907,7 @@ public ShaderIncludes getShaderIncludes() { var includes = new ShaderIncludes() .addIncludePath(SHADER_PATH) .addInclude("VERSION_HEADER", OSType.getOSType() == OSType.Linux ? LINUX_VERSION_HEADER : WINDOWS_VERSION_HEADER) + .define("DEVELOPMENT", Props.DEVELOPMENT) .define("UI_SCALING_MODE", config.uiScalingMode()) .define("COLOR_BLINDNESS", config.colorBlindness()) .define("APPLY_COLOR_FILTER", configColorFilter != ColorFilter.NONE) @@ -933,6 +934,7 @@ public ShaderIncludes getShaderIncludes() { .define("CHARACTER_DISPLACEMENT", configCharacterDisplacement) .define("MAX_CHARACTER_POSITION_COUNT", max(1, UBOCompute.MAX_CHARACTER_POSITION_COUNT)) .define("WIREFRAME", config.wireframe()) + .define("HIGHLIGHT", developerTools.isHighlightModelOverridesEnabled()) .define("WINDOWS_HDR_CORRECTION", config.windowsHdrCorrection()) .define("LEGACY_RENDERER", renderer instanceof LegacyRenderer) .define("ZONE_RENDERER", renderer instanceof ZoneRenderer) diff --git a/src/main/java/rs117/hd/opengl/uniforms/UniformBuffer.java b/src/main/java/rs117/hd/opengl/uniforms/UniformBuffer.java index 0d1ca3104f..c0496de0a5 100644 --- a/src/main/java/rs117/hd/opengl/uniforms/UniformBuffer.java +++ b/src/main/java/rs117/hd/opengl/uniforms/UniformBuffer.java @@ -84,6 +84,8 @@ public final void set(int... values) { owner.markWaterLine(position, type.size); } + public final void set(boolean val) { set(val ? 1 : 0); } + public final void set(int x) { if (isUninitialized()) return; diff --git a/src/main/java/rs117/hd/renderer/zone/ModelStreamingManager.java b/src/main/java/rs117/hd/renderer/zone/ModelStreamingManager.java index a0b1b3ba06..1df9db9bbd 100644 --- a/src/main/java/rs117/hd/renderer/zone/ModelStreamingManager.java +++ b/src/main/java/rs117/hd/renderer/zone/ModelStreamingManager.java @@ -395,6 +395,7 @@ public void uploadTempModel( final DynamicModelVAO.View shadowView = ctx.beginDraw(VAO_SHADOW, culledFaces.length); sceneUploader.uploadTempModel( culledFaces, + renderable, m, modelOverride, preOrientation, @@ -421,6 +422,7 @@ public void uploadTempModel( sceneUploader.uploadTempModel( visibleFaces, + renderable, m, modelOverride, preOrientation, diff --git a/src/main/java/rs117/hd/renderer/zone/SceneUploader.java b/src/main/java/rs117/hd/renderer/zone/SceneUploader.java index 5bd076799b..30d2ba3890 100644 --- a/src/main/java/rs117/hd/renderer/zone/SceneUploader.java +++ b/src/main/java/rs117/hd/renderer/zone/SceneUploader.java @@ -2134,6 +2134,7 @@ public boolean preprocessTempModel( // temp draw public void uploadTempModel( PrimitiveCharArray faces, + Renderable renderable, Model model, ModelOverride modelOverride, int preOrientation, @@ -2184,6 +2185,7 @@ public void uploadTempModel( final byte modelTransparency = model.getTransparency(); final boolean isVanillaTextured = faceTextures != null; + final boolean isActor = renderable instanceof Actor; int orientSin = 0; int orientCos = 0; @@ -2223,7 +2225,7 @@ else if (color3 == -1) color3 = faceOverride.modifyColor(color3); } - final int materialData = material.packMaterialData(faceOverride, uvType, false); + final int materialData = material.packMaterialData(faceOverride, uvType, false, isActor); final int triangleA = indices1[face]; final int vertexOffsetA = triangleA * 3; diff --git a/src/main/java/rs117/hd/scene/materials/Material.java b/src/main/java/rs117/hd/scene/materials/Material.java index a09194b73e..02290d0992 100644 --- a/src/main/java/rs117/hd/scene/materials/Material.java +++ b/src/main/java/rs117/hd/scene/materials/Material.java @@ -176,7 +176,7 @@ public boolean replaces(String name, HDVariables vars) { return replacementCondition.test(vars); } - public final int packMaterialData(@Nonnull ModelOverride modelOverride, UvType uvType, boolean isOverlay) { + public final int packMaterialData(@Nonnull ModelOverride modelOverride, UvType uvType, boolean isOverlay, boolean isActor) { // This needs to return zero by default, since we often fall back to writing all zeroes to UVs assert isValid : String.format("Material %s used after invalidation", this); int materialIndex = uboIndex; @@ -186,7 +186,8 @@ public final int packMaterialData(@Nonnull ModelOverride modelOverride, UvType u | ((modelOverride.windDisplacementModifier + 3) & 0x7) << 12 | (modelOverride.windDisplacementMode.ordinal() & 0x7) << 9 | (modelOverride.invertDisplacementStrength ? 1 : 0) << 8 - | (modelOverride.terrainVertexSnap ? 1 : 0) << 6 + | (modelOverride.terrainVertexSnap ? 1 : 0) << 7 + | (modelOverride == ModelOverride.NONE && !isActor ? 1 : 0) << 6 | (!modelOverride.receiveShadows ? 1 : 0) << 5 | (modelOverride.upwardsNormals ? 1 : 0) << 4 | (modelOverride.flatNormals ? 1 : 0) << 3 @@ -195,6 +196,10 @@ public final int packMaterialData(@Nonnull ModelOverride modelOverride, UvType u | (isOverlay ? 1 : 0); } + public final int packMaterialData(@Nonnull ModelOverride modelOverride, UvType uvType, boolean isOverlay) { + return packMaterialData(modelOverride, uvType, isOverlay, false); + } + public void fillMaterialStruct( UBOMaterials.MaterialStruct struct, float vanillaScrollX, diff --git a/src/main/java/rs117/hd/utils/DeveloperTools.java b/src/main/java/rs117/hd/utils/DeveloperTools.java index 091d7e834f..e4fab89c2c 100644 --- a/src/main/java/rs117/hd/utils/DeveloperTools.java +++ b/src/main/java/rs117/hd/utils/DeveloperTools.java @@ -2,8 +2,10 @@ import java.awt.event.KeyEvent; import javax.inject.Inject; +import javax.inject.Singleton; import lombok.Getter; import lombok.extern.slf4j.Slf4j; +import net.runelite.api.*; import net.runelite.api.events.*; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.Keybind; @@ -22,9 +24,11 @@ import static java.awt.event.InputEvent.SHIFT_DOWN_MASK; @Slf4j +@Singleton public class DeveloperTools implements KeyListener { // This could be part of the config if we had developer mode config sections private static final Keybind KEY_TOGGLE_TILE_INFO = new Keybind(KeyEvent.VK_F3, CTRL_DOWN_MASK); + private static final Keybind KEY_TOGGLE_HIGHLIGHT = new Keybind(KeyEvent.VK_H, CTRL_DOWN_MASK | SHIFT_DOWN_MASK); private static final Keybind KEY_TOGGLE_FRAME_TIMINGS = new Keybind(KeyEvent.VK_F4, CTRL_DOWN_MASK); private static final Keybind KEY_RECORD_TIMINGS_SNAPSHOT = new Keybind(KeyEvent.VK_F4, CTRL_DOWN_MASK | SHIFT_DOWN_MASK); private static final Keybind KEY_TOGGLE_SHADOW_MAP_OVERLAY = new Keybind(KeyEvent.VK_F5, CTRL_DOWN_MASK); @@ -35,6 +39,9 @@ public class DeveloperTools implements KeyListener { private static final Keybind KEY_TOGGLE_HIDE_UI = new Keybind(KeyEvent.VK_H, CTRL_DOWN_MASK); private static final Keybind KEY_RELOAD_SCENE = new Keybind(KeyEvent.VK_R, CTRL_DOWN_MASK); + @Inject + private Client client; + @Inject private ClientThread clientThread; @@ -68,6 +75,8 @@ public class DeveloperTools implements KeyListener { private boolean keyBindingsEnabled; private boolean tileInfoOverlayEnabled; @Getter + private boolean highlightModelOverridesEnabled; + @Getter private boolean frameTimingsOverlayEnabled; private boolean shadowMapOverlayEnabled; private boolean lightGizmoOverlayEnabled; @@ -107,6 +116,17 @@ public void deactivate() { hideUiEnabled = false; } + private void toggleModelOverrideHighlighter() { + highlightModelOverridesEnabled = !highlightModelOverridesEnabled; + clientThread.invoke(() -> client.addChatMessage( + ChatMessageType.GAMEMESSAGE, + "117 HD", + "