summaryrefslogtreecommitdiff
path: root/libs/JSystem/J2DGraph/J2DPicture.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-01-24 04:00:46 -0800
committerGitHub <noreply@github.com>2024-01-24 14:00:46 +0200
commitba44ade90c3f04f5c163278fcadc4361c263acbb (patch)
tree3b7948dc4dcf260ff61230da15ddea595635cbc8 /libs/JSystem/J2DGraph/J2DPicture.cpp
parentb2310b84b65e62d9f1a82a5b9e52766b325b765f (diff)
more various JSystem work (#2046)
* most of J3DAnmLoader done * J3D / JKernel / JUTConsole work * remove asm * fix build * dol 50%
Diffstat (limited to 'libs/JSystem/J2DGraph/J2DPicture.cpp')
-rw-r--r--libs/JSystem/J2DGraph/J2DPicture.cpp165
1 files changed, 84 insertions, 81 deletions
diff --git a/libs/JSystem/J2DGraph/J2DPicture.cpp b/libs/JSystem/J2DGraph/J2DPicture.cpp
index 4d71f60c50..02249a0454 100644
--- a/libs/JSystem/J2DGraph/J2DPicture.cpp
+++ b/libs/JSystem/J2DGraph/J2DPicture.cpp
@@ -1392,110 +1392,113 @@ SECTION_SDATA2 static f32 lit_2933 = 0.5f;
/* 802FED84-802FF09C 2F96C4 0318+00 2/2 0/0 0/0 .text
* setTexCoord__10J2DPictureFPQ29JGeometry8TVec2<s>PC10JUTTexture10J2DBinding9J2DMirrorb */
+// matches with literals
#ifdef NONMATCHING
void J2DPicture::setTexCoord(JGeometry::TVec2<s16>* param_0, JUTTexture const* param_1,
- J2DBinding param_2, J2DMirror param_3, bool param_4) {
- u8 var_r0;
- u8 var_r4;
- u8 var_r7;
- u8 var_r9;
-
- f32 sp14;
- f32 sp10;
- f32 spC;
- f32 sp8;
-
- f32 var_f0;
- f32 var_f2;
- f32 var_f3;
- f32 var_f4;
- f32 var_f5;
-
- if (!param_4) {
- var_r0 = (param_3 & 2) ? (param_2 & 4) : (param_2 & 8);
- var_r4 = (param_3 & 2) ? (param_2 & 8) : (param_2 & 4);
- var_r7 = (param_3 & 1) ? (param_2 & 1) : (param_2 & 2);
- var_r9 = (param_3 & 1) ? (param_2 & 1) : (param_2 & 2);
+ J2DBinding binding, J2DMirror mirror, bool rotate90) {
+ bool bindLeft;
+ bool bindRight;
+ bool bindTop;
+ bool bindBottom;
+
+ if (!rotate90) {
+ if (mirror & J2DMirror_X)
+ bindLeft = binding & J2DBind_Right;
+ else
+ bindLeft = binding & J2DBind_Left;
+
+ if (mirror & J2DMirror_X)
+ bindRight = binding & J2DBind_Left;
+ else
+ bindRight = binding & J2DBind_Right;
+
+ if (mirror & J2DMirror_Y)
+ bindTop = binding & J2DBind_Bottom;
+ else
+ bindTop = binding & J2DBind_Top;
+
+ if (mirror & J2DMirror_Y)
+ bindBottom = binding & J2DBind_Top;
+ else
+ bindBottom = binding & J2DBind_Bottom;
} else {
- var_r0 = (param_3 & 2) ? (param_2 & 1) : (param_2 & 2);
- var_r4 = (param_3 & 2) ? (param_2 & 2) : (param_2 & 1);
- var_r7 = (param_3 & 1) ? (param_2 & 8) : (param_2 & 4);
- var_r9 = (param_3 & 1) ? (param_2 & 4) : (param_2 & 8);
- }
+ if (mirror & J2DMirror_X)
+ bindLeft = binding & J2DBind_Bottom;
+ else
+ bindLeft = binding & J2DBind_Top;
- if (!param_4) {
- var_f2 = getHeight();
- } else {
- var_f2 = getWidth();
- }
+ if (mirror & J2DMirror_X)
+ bindRight = binding & J2DBind_Top;
+ else
+ bindRight = binding & J2DBind_Bottom;
- if (!param_4) {
- var_f3 = getWidth();
- } else {
- var_f3 = getHeight();
+ if (mirror & J2DMirror_Y)
+ bindTop = binding & J2DBind_Left;
+ else
+ bindTop = binding & J2DBind_Right;
+
+ if (mirror & J2DMirror_Y)
+ bindBottom = binding & J2DBind_Right;
+ else
+ bindBottom = binding & J2DBind_Left;
}
+ f32 rectWidth;
+ f32 rectHeight;
+
+ rectWidth = !rotate90 ? getWidth() : getHeight();
+ rectHeight = !rotate90 ? getHeight() : getWidth();
+
+ f32 texWidth;
+ f32 texHeight;
if (param_1 == NULL) {
- var_f4 = var_f2;
- var_f5 = var_f3;
+ texWidth = rectWidth;
+ texHeight = rectHeight;
} else {
- var_f4 = param_1->getWidth();
- var_f5 = param_1->getHeight();
+ texWidth = param_1->getWidth();
+ texHeight = param_1->getHeight();
}
- if (var_r0 != 0) {
- sp14 = 0.0f;
- if (var_r4 != 0) {
- var_f0 = 1.0f;
- } else {
- var_f0 = var_f2 / var_f4;
- }
- spC = var_f0;
- } else if (var_r4 != 0) {
- sp14 = 1.0f - (var_f2 / var_f4);
- spC = 1.0f;
+ f32 s0, t0, s1, t1;
+ if (bindLeft) {
+ s0 = 0.0f;
+ s1 = bindRight ? 1.0f : (rectWidth / texWidth);
+ } else if (bindRight) {
+ s0 = 1.0f - (rectWidth / texWidth);
+ s1 = 1.0f;
} else {
- sp14 = 0.5f - ((var_f2 / var_f4) * 0.5f);
- spC = 0.5f + ((var_f2 / var_f4) * 0.5f);
+ s0 = 0.5f - (rectWidth / texWidth) / 2.0f;
+ s1 = 0.5f + (rectWidth / texWidth) / 2.0f;
}
- if (var_r7 != 0) {
- sp10 = 0.0f;
-
- f32 var_f0_2;
- if (var_r9 != 0) {
- var_f0_2 = 1.0f;
- } else {
- var_f0_2 = var_f3 / var_f5;
- }
-
- sp8 = var_f0_2;
- } else if (var_r9 != 0) {
- sp10 = 1.0f - (var_f3 / var_f5);
- sp8 = 1.0f;
+ if (bindTop) {
+ t0 = 0.0f;
+ t1 = bindBottom ? 1.0f : (rectHeight / texHeight);
+ } else if (bindBottom) {
+ t0 = 1.0f - (rectHeight / texHeight);
+ t1 = 1.0f;
} else {
- sp10 = 0.5f - ((var_f3 / var_f5) * 0.5f);
- sp8 = 0.5f + ((var_f3 / var_f5) * 0.5f);
+ t0 = 0.5f - (rectHeight / texHeight) / 2.0f;
+ t1 = 0.5f + (rectHeight / texHeight) / 2.0f;
}
- if (param_3 & 2) {
- swap(sp14, spC);
+ if (mirror & J2DMirror_X) {
+ swap(s0, s1);
}
-
- if (param_3 & 1) {
- swap(sp10, sp8);
+ if (mirror & J2DMirror_Y) {
+ swap(t0, t1);
}
- s16 temp_r27 = J2DCast_F32_to_S16(sp14, 8);
- s16 temp_r28 = J2DCast_F32_to_S16(spC, 8);
- s16 temp_r30 = J2DCast_F32_to_S16(sp10, 8);
- s16 temp_r31 = J2DCast_F32_to_S16(sp8, 8);
+ s16 temp_r27 = J2DCast_F32_to_S16(s0, 8);
+ s16 temp_r28 = J2DCast_F32_to_S16(s1, 8);
+ s16 temp_r30 = J2DCast_F32_to_S16(t0, 8);
+ s16 temp_r31 = J2DCast_F32_to_S16(t1, 8);
- if (!param_4) {
+ if (!rotate90) {
param_0[0].set(temp_r27, temp_r30);
param_0[1].set(temp_r28, temp_r30);
- param_0[2].set(temp_r28, temp_r31);
- param_0[3].set(temp_r27, temp_r31);
+ param_0[2].set(temp_r27, temp_r31);
+ param_0[3].set(temp_r28, temp_r31);
} else {
param_0[0].set(temp_r27, temp_r31);
param_0[1].set(temp_r27, temp_r30);