Use getArgumentExpressions in HighDpiTransformer

Signed-off-by: Graham <gpe@openrs2.org>
Graham 1 year ago
parent b0f37cd959
commit bd36b77e44
  1. 31
      patcher/src/main/kotlin/org/openrs2/patcher/transform/HighDpiTransformer.kt

@ -3,7 +3,6 @@ package org.openrs2.patcher.transform
import com.github.michaelbull.logging.InlineLogger import com.github.michaelbull.logging.InlineLogger
import jakarta.inject.Singleton import jakarta.inject.Singleton
import org.objectweb.asm.Opcodes import org.objectweb.asm.Opcodes
import org.objectweb.asm.tree.AbstractInsnNode
import org.objectweb.asm.tree.ClassNode import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.FieldInsnNode import org.objectweb.asm.tree.FieldInsnNode
import org.objectweb.asm.tree.FieldNode import org.objectweb.asm.tree.FieldNode
@ -20,7 +19,7 @@ import org.objectweb.asm.tree.VarInsnNode
import org.openrs2.asm.InsnMatcher import org.openrs2.asm.InsnMatcher
import org.openrs2.asm.classpath.ClassPath import org.openrs2.asm.classpath.ClassPath
import org.openrs2.asm.classpath.Library import org.openrs2.asm.classpath.Library
import org.openrs2.asm.getExpression import org.openrs2.asm.getArgumentExpressions
import org.openrs2.asm.previousReal import org.openrs2.asm.previousReal
import org.openrs2.asm.transform.Transformer import org.openrs2.asm.transform.Transformer
import kotlin.math.max import kotlin.math.max
@ -267,27 +266,17 @@ public class HighDpiTransformer : Transformer() {
} }
private fun transformBounds(method: MethodNode, invoke: MethodInsnNode): Boolean { private fun transformBounds(method: MethodNode, invoke: MethodInsnNode): Boolean {
val exprs = mutableListOf<List<AbstractInsnNode>>() val exprs = getArgumentExpressions(invoke) ?: return false
var head = invoke.previousReal ?: return false
if (invoke.name == "glViewport" && exprs.flatten().any { it.opcode == Opcodes.IALOAD }) {
while (exprs.size < 4) { /*
val expr = getExpression(head) ?: return false * The glViewport() call that uses IALOAD restores viewport
* bounds previously saved with glGetIntegerv(), so there's no
if (invoke.name == "glViewport" && expr.any { it.opcode == Opcodes.IALOAD }) { * need for us to scale it again.
/* */
* The glViewport() call that uses IALOAD restores viewport return false
* bounds previously saved with glGetIntegerv(), so there's no
* need for us to scale it again.
*/
return false
}
exprs += expr
head = expr.first().previousReal ?: return false
} }
exprs.reverse()
for (expr in exprs) { for (expr in exprs) {
val single = expr.singleOrNull() val single = expr.singleOrNull()
if (single != null && single.opcode == Opcodes.ICONST_0) { if (single != null && single.opcode == Opcodes.ICONST_0) {

Loading…
Cancel
Save