Merge remote-tracking branch 'origin/main' into android-building

This commit is contained in:
CraftyBoss
2026-04-13 01:05:16 -07:00
18 changed files with 315 additions and 135 deletions
+2 -2
View File
@@ -10,7 +10,7 @@
static const char* l_arcName = "CatDoor";
u32 const daObjCatDoor_c::M_attr = 0x001E0578;
s16 const daObjCatDoor_c::M_attr[2] = {0x001E, 0x0578};
daObjCatDoor_c::~daObjCatDoor_c() {
if (mDoor1.bgw.ChkUsed()) {
@@ -71,7 +71,7 @@ int daObjCatDoor_c::execute() {
}
const s16* daObjCatDoor_c::attr() const {
return (const s16*)&daObjCatDoor_c::M_attr;
return daObjCatDoor_c::M_attr;
}
static int createSolidHeap(fopAc_ac_c* i_this) {
+15 -2
View File
@@ -1824,11 +1824,24 @@ static u16 const l_drawlistSize[21] = {
};
static u8 const l_nonSortId[9] = {
0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x09, 0x12, 0x0D,
dDlst_list_c::DB_OPA_LIST_SKY,
dDlst_list_c::DB_XLU_LIST_SKY,
dDlst_list_c::DB_LIST_P0,
dDlst_list_c::DB_XLU_LIST_BG,
dDlst_list_c::DB_OPA_LIST_DARK_BG,
dDlst_list_c::DB_XLU_LIST_DARK_BG,
dDlst_list_c::DB_OPA_LIST_DARK,
dDlst_list_c::DB_LIST_2D_SCREEN,
dDlst_list_c::DB_OPA_LIST_ITEM3D,
};
static const u8 l_zSortId[6] = {
0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x11,
dDlst_list_c::DB_XLU_LIST,
dDlst_list_c::DB_XLU_LIST_DARK,
dDlst_list_c::DB_LIST_FILTER,
dDlst_list_c::DB_XLU_LIST_ITEM3D,
dDlst_list_c::DB_XLU_LIST_INVISIBLE,
dDlst_list_c::DB_LIST_Z_XLU,
};
void dDlst_list_c::init() {
+2 -3
View File
@@ -61,9 +61,8 @@ void read(float dt, bool context_active) {
float yaw_rate = apply_deadband(s_smooth_gy);
float pitch_rate = apply_deadband(s_smooth_gx);
const float sens = dusk::getSettings().game.gyroAimSensitivity;
s_pending_yaw_rad += yaw_rate * dt * sens;
s_pending_pitch_rad += pitch_rate * dt * sens;
s_pending_yaw_rad += yaw_rate * dt * dusk::getSettings().game.gyroAimSensitivityX;
s_pending_pitch_rad += pitch_rate * dt * dusk::getSettings().game.gyroAimSensitivityY;
}
void consumeAimDeltas(float& out_yaw_rad, float& out_pitch_rad) {
+37 -57
View File
@@ -4,67 +4,47 @@
#include "ImGuiConsole.hpp"
void DuskDebugPad() {
if (ImGui::IsKeyPressed(ImGuiKey_K)) {
mDoCPd_c::getCpadInfo(PAD_1).mPressedButtonFlags |= PAD_BUTTON_A;
auto& pad = mDoCPd_c::getCpadInfo(PAD_1);
auto KeyFlag = [&](ImGuiKey key, u32 padFlag) {
if (ImGui::IsKeyDown(key))
pad.mButtonFlags |= padFlag;
if (ImGui::IsKeyPressed(key))
pad.mPressedButtonFlags |= padFlag;
};
KeyFlag(ImGuiKey_K, PAD_BUTTON_A);
KeyFlag(ImGuiKey_J, PAD_BUTTON_B);
KeyFlag(ImGuiKey_L, PAD_BUTTON_X);
KeyFlag(ImGuiKey_I, PAD_BUTTON_Y);
KeyFlag(ImGuiKey_H, PAD_BUTTON_START);
KeyFlag(ImGuiKey_O, PAD_TRIGGER_Z);
KeyFlag(ImGuiKey_Keypad8, PAD_BUTTON_UP);
KeyFlag(ImGuiKey_Keypad2, PAD_BUTTON_DOWN);
KeyFlag(ImGuiKey_Keypad6, PAD_BUTTON_RIGHT);
KeyFlag(ImGuiKey_Keypad4, PAD_BUTTON_LEFT);
if (ImGui::IsKeyDown(ImGuiKey_W)) {
pad.mMainStickPosY = 1.0f;
pad.mMainStickValue = 1.0f;
pad.mMainStickAngle = 0x8000;
}
if (ImGui::IsKeyPressed(ImGuiKey_J)) {
mDoCPd_c::getCpadInfo(PAD_1).mPressedButtonFlags |= PAD_BUTTON_B;
if (ImGui::IsKeyDown(ImGuiKey_S)) {
pad.mMainStickPosY = -1.0f;
pad.mMainStickValue = 1.0f;
pad.mMainStickAngle = 0;
}
if (ImGui::IsKeyPressed(ImGuiKey_L)) {
mDoCPd_c::getCpadInfo(PAD_1).mPressedButtonFlags |= PAD_BUTTON_X;
if (ImGui::IsKeyDown(ImGuiKey_D)) {
pad.mMainStickPosX = 1.0f;
pad.mMainStickValue = 1.0f;
pad.mMainStickAngle = 0x4000;
}
if (ImGui::IsKeyPressed(ImGuiKey_I)) {
mDoCPd_c::getCpadInfo(PAD_1).mPressedButtonFlags |= PAD_BUTTON_Y;
if (ImGui::IsKeyDown(ImGuiKey_A)) {
pad.mMainStickPosX = -1.0f;
pad.mMainStickValue = 1.0f;
pad.mMainStickAngle = -0x4000;
}
if (ImGui::IsKeyPressed(ImGuiKey_H)) {
mDoCPd_c::getCpadInfo(PAD_1).mPressedButtonFlags |= PAD_BUTTON_START;
}
if (ImGui::IsKeyPressed(ImGuiKey_O)) {
mDoCPd_c::getCpadInfo(PAD_1).mPressedButtonFlags |= PAD_TRIGGER_Z;
}
if (ImGui::IsKeyPressed(ImGuiKey_Keypad8)) {
mDoCPd_c::getCpadInfo(PAD_1).mPressedButtonFlags |= PAD_BUTTON_UP;
}
if (ImGui::IsKeyPressed(ImGuiKey_Keypad2)) {
mDoCPd_c::getCpadInfo(PAD_1).mPressedButtonFlags |= PAD_BUTTON_DOWN;
}
if (ImGui::IsKeyPressed(ImGuiKey_Keypad6)) {
mDoCPd_c::getCpadInfo(PAD_1).mPressedButtonFlags |= PAD_BUTTON_RIGHT;
}
if (ImGui::IsKeyPressed(ImGuiKey_Keypad4)) {
mDoCPd_c::getCpadInfo(PAD_1).mPressedButtonFlags |= PAD_BUTTON_LEFT;
}
if (ImGui::IsKeyPressed(ImGuiKey_W)) {
mDoCPd_c::getCpadInfo(PAD_1).mMainStickPosY = 1.0f;
mDoCPd_c::getCpadInfo(PAD_1).mMainStickValue = 1.0f;
mDoCPd_c::getCpadInfo(PAD_1).mMainStickAngle = 0x8000;
}
if (ImGui::IsKeyPressed(ImGuiKey_S)) {
mDoCPd_c::getCpadInfo(PAD_1).mMainStickPosY = -1.0f;
mDoCPd_c::getCpadInfo(PAD_1).mMainStickValue = 1.0f;
mDoCPd_c::getCpadInfo(PAD_1).mMainStickAngle = 0;
}
if (ImGui::IsKeyPressed(ImGuiKey_D)) {
mDoCPd_c::getCpadInfo(PAD_1).mMainStickPosX = 1.0f;
mDoCPd_c::getCpadInfo(PAD_1).mMainStickValue = 1.0f;
mDoCPd_c::getCpadInfo(PAD_1).mMainStickAngle = 0x4000;
}
if (ImGui::IsKeyPressed(ImGuiKey_A)) {
mDoCPd_c::getCpadInfo(PAD_1).mMainStickPosX = -1.0f;
mDoCPd_c::getCpadInfo(PAD_1).mMainStickValue = 1.0f;
mDoCPd_c::getCpadInfo(PAD_1).mMainStickAngle = -0x4000;
}
}
}
+2 -1
View File
@@ -119,7 +119,8 @@ namespace dusk {
"Slingshot, Gale Boomerang, Hero's Bow, Clawshot(s), Ball and Chain, and Dominion Rod.");
}
config::ImGuiSliderFloat("Gyro Sensitivity", getSettings().game.gyroAimSensitivity, 0.25f, 4.0f, "%.2f");
config::ImGuiSliderFloat("Gyro Pitch Sensitivity", getSettings().game.gyroAimSensitivityY, 0.25f, 4.0f, "%.2f");
config::ImGuiSliderFloat("Gyro Yaw Sensitivity", getSettings().game.gyroAimSensitivityX, 0.25f, 4.0f, "%.2f");
config::ImGuiCheckbox("Invert Gyro Pitch", getSettings().game.gyroAimInvertPitch);
config::ImGuiCheckbox("Invert Gyro Yaw", getSettings().game.gyroAimInvertYaw);
+4 -2
View File
@@ -52,7 +52,8 @@ UserSettings g_userSettings = {
// Input
.enableGyroAim {"game.enableGyroAim", false},
.gyroAimSensitivity {"game.gyroAimSensitivity", 1.0f},
.gyroAimSensitivityX {"game.gyroAimSensitivityX", 1.0f},
.gyroAimSensitivityY {"game.gyroAimSensitivityY", 1.0f},
.gyroAimInvertPitch {"game.gyroAimInvertPitch", false},
.gyroAimInvertYaw {"game.gyroAimInvertYaw", false},
@@ -126,7 +127,8 @@ void registerSettings() {
Register(g_userSettings.game.fastSpinner);
Register(g_userSettings.game.enableFrameInterpolation);
Register(g_userSettings.game.enableGyroAim);
Register(g_userSettings.game.gyroAimSensitivity);
Register(g_userSettings.game.gyroAimSensitivityX);
Register(g_userSettings.game.gyroAimSensitivityY);
Register(g_userSettings.game.gyroAimInvertPitch);
Register(g_userSettings.game.gyroAimInvertYaw);
+197 -18
View File
@@ -1232,12 +1232,12 @@ void mDoGph_drawFilterQuad(s8 param_0, s8 param_1) {
void mDoGph_gInf_c::bloom_c::create() {
if (m_buffer == NULL) {
#ifdef TARGET_PC
u32 size = 0x20; // No need to allocate memory for texture
m_buffer = (void*)1;
#else
u32 size = GXGetTexBufferSize(FB_WIDTH / 2, FB_HEIGHT / 2, GX_TF_RGBA8, GX_FALSE, 0);
#endif
m_buffer = mDoExt_getArchiveHeap()->alloc(size, -32);
JUT_ASSERT(1621, m_buffer != NULL);
#endif
mEnable = false;
mMode = 0;
@@ -1249,20 +1249,202 @@ void mDoGph_gInf_c::bloom_c::create() {
}
void mDoGph_gInf_c::bloom_c::remove() {
#if !TARGET_PC
if (m_buffer != NULL) {
mDoExt_getArchiveHeap()->free(m_buffer);
m_buffer = NULL;
}
#endif
mMonoColor.a = 0;
}
void mDoGph_gInf_c::bloom_c::draw() {
#if TARGET_PC
static void CopyToTexObj(GXTexObj* pDst, uintptr_t texID, int dstWidth, int dstHeight, GXTexFmt dstFmt = GX_TF_RGBA8) {
GXSetTexCopyDst(dstWidth, dstHeight, dstFmt, FALSE);
GXCopyTex((void*)texID, false);
GXInitTexObj(pDst, (void*)texID, dstWidth, dstHeight, dstFmt, GX_CLAMP, GX_CLAMP, GX_FALSE);
GXInitTexObjLOD(pDst, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
}
void mDoGph_gInf_c::bloom_c::draw() {
ZoneScoped;
if (!dusk::getSettings().game.enableBloom) {
return;
}
#endif
bool enabled = mEnable;
if (mMonoColor.a == 0 && !enabled)
return;
f32 width = mDoGph_gInf_c::getWidth();
f32 height = mDoGph_gInf_c::getHeight();
GXSetViewport(0.0f, 0.0f, width, height, 0.0f, 1.0f);
GXSetScissor(0, 0, width, height);
GXLoadTexObj(getFrameBufferTexObj(), GX_TEXMAP0);
GXSetNumChans(0);
GXSetNumTexGens(1);
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c);
GXSetTevSwapModeTable(GX_TEV_SWAP1, GX_CH_RED, GX_CH_RED, GX_CH_RED, GX_CH_GREEN);
GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_BLUE, GX_CH_BLUE, GX_CH_BLUE, GX_CH_ALPHA);
GXSetZCompLoc(1);
GXSetZMode(0, GX_ALWAYS, 0);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);
GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor);
GXSetFogRangeAdj(0, 0, 0);
GXSetCullMode(GX_CULL_NONE);
GXSetDither(1);
Mtx44 ortho;
C_MTXOrtho(ortho, 0.0f, height, 0.0f, width, 0.0f, 10.0f);
GXLoadPosMtxImm(cMtx_getIdentity(), 0);
GXSetProjection(ortho, GX_ORTHOGRAPHIC);
GXSetCurrentMtx(0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S8, 0);
auto filterQuad = [&](int div) {
f32 x = width / div, y = height / div;
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3f32(0, 0, -5);
GXTexCoord2s8(0, 0);
GXPosition3f32(x, 0, -5);
GXTexCoord2s8(1, 0);
GXPosition3f32(x, y, -5);
GXTexCoord2s8(1, 1);
GXPosition3f32(0, y, -5);
GXTexCoord2s8(0, 1);
GXEnd();
};
if (mMonoColor.a != 0) {
GXSetNumTevStages(1);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_C2, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A2);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP1, GX_TEV_SWAP1);
GXSetTevColor(GX_TEVREG2, mMonoColor);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_OR);
filterQuad(1);
}
if (enabled) {
enum PassID { Pass0, Pass1, Pass2 };
GXCreateFrameBuffer(width, height);
GXSetNumTevStages(3);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXC, GX_CC_TEXA, GX_CC_HALF, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP1, GX_TEV_SWAP1);
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_TEXC, GX_CC_CPREV, GX_CC_HALF, GX_CC_C0);
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevSwapMode(GX_TEVSTAGE1, GX_TEV_SWAP3, GX_TEV_SWAP3);
GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_ZERO, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetBlendMode(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_OR);
GXColorS10 tevColor0 = {(s16)-mPoint, (s16)-mPoint, (s16)-mPoint, 0x40};
GXSetTevColorS10(GX_TEVREG0, tevColor0);
GXColor tevColor1 = {mBlureRatio, mBlureRatio, mBlureRatio, mBlureRatio};
GXSetTevColor(GX_TEVREG1, tevColor1);
GXPixModeSync();
filterQuad(2);
GXSetTevSwapModeTable(GX_TEV_SWAP1, GX_CH_RED, GX_CH_RED, GX_CH_RED, GX_CH_ALPHA);
GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP0);
GXSetTevSwapMode(GX_TEVSTAGE1, GX_TEV_SWAP0, GX_TEV_SWAP0);
// Downsample and filter from 1/2 EFB into 1/4.
TGXTexObj tmpTex[3];
GXSetTexCopySrc(0, 0, width / 2, height / 2);
CopyToTexObj(&tmpTex[0], Pass0, width / 4, height / 4);
GXLoadTexObj(&tmpTex[0], GX_TEXMAP0);
GXSetNumTexGens(8);
u32 texMtxID = GX_TEXMTX0;
int angle = 0;
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
for (int texCoord = (int)GX_TEXCOORD1; texCoord < (int)GX_MAX_TEXCOORD; texCoord++) {
GXSetTexCoordGen((GXTexCoordID)texCoord, GX_TG_MTX2x4, GX_TG_TEX0, texMtxID);
f32 dVar15 = mBlureSize * ((448.0f / getHeight()) / 6400.0f);
mDoMtx_stack_c::transS((dVar15 * cM_scos(angle)) * getInvScale(),
dVar15 * cM_ssin(angle), 0.0f);
GXLoadTexMtxImm(mDoMtx_stack_c::get(), texMtxID, GX_MTX2x4);
texMtxID += 3;
angle += 0x2492;
}
GXSetNumTevStages(8);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A1, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
for (int tevStage = (int)GX_TEVSTAGE1; tevStage < 8; tevStage++) {
GXSetTevOrder((GXTevStageID)tevStage, (GXTexCoordID)tevStage, GX_TEXMAP0,
GX_COLOR_NULL);
GXSetTevColorIn((GXTevStageID)tevStage, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A1, GX_CC_CPREV);
GXSetTevColorOp((GXTevStageID)tevStage, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
GX_TEVPREV);
GXSetTevAlphaIn((GXTevStageID)tevStage, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp((GXTevStageID)tevStage, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
GX_TEVPREV);
}
GXPixModeSync();
// Blur filter from tmp_tex1 1/4 to EFB 1/4.
filterQuad(4);
GXSetTexCopySrc(0, 0, width / 4, height / 4);
CopyToTexObj(&tmpTex[1], Pass1, width / 8, height / 8);
GXLoadTexObj(&tmpTex[1], GX_TEXMAP0);
// Upsample 1/8 buffer back up to 1/4 buffer.
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_OR);
GXPixModeSync();
GXInvalidateTexAll();
filterQuad(4);
// Now that we've upsampled and filtered our final bloom, copy 1/4 buffer.
GXSetTexCopySrc(0, 0, width / 4, height / 4);
CopyToTexObj(&tmpTex[2], Pass2, width / 4, height / 4);
GXLoadTexObj(&tmpTex[2], GX_TEXMAP0);
GXRestoreFrameBuffer();
// Now blend our bloom into the real FB.
GXSetTevColor(GX_TEVREG0, mBlendColor);
GXSetNumTevStages(1);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_C0, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetBlendMode(GX_BM_BLEND, mMode == 1 ? GX_BL_INVDSTCLR : GX_BL_ONE, GX_BL_SRCALPHA, GX_LO_OR);
GXPixModeSync();
GXInvalidateTexAll();
filterQuad(1);
}
}
#else
void mDoGph_gInf_c::bloom_c::draw() {
bool enabled = mEnable && m_buffer != NULL;
if (mMonoColor.a != 0 || enabled) {
#if TARGET_PC
@@ -1376,24 +1558,20 @@ void mDoGph_gInf_c::bloom_c::draw() {
GXLoadTexObj(&tmp_tex1, GX_TEXMAP0);
GXSetNumTexGens(8);
u32 iVar11 = 0x1e;
int sVar10 = 0;
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c);
u32 texMtxID = GX_TEXMTX0;
int angle = 0;
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
for (int texCoord = (int)GX_TEXCOORD1; texCoord < (int)GX_MAX_TEXCOORD; texCoord++) {
GXSetTexCoordGen((GXTexCoordID)texCoord, GX_TG_MTX2x4, GX_TG_TEX0, iVar11);
GXSetTexCoordGen((GXTexCoordID)texCoord, GX_TG_MTX2x4, GX_TG_TEX0, texMtxID);
#if TARGET_PC
f32 dVar15 = mBlureSize * ((448.0f / getHeight()) / 6400.0f);
#else
f32 dVar15 = mBlureSize * (1.0f / 6400.0f);
#endif
mDoMtx_stack_c::transS((dVar15 * cM_scos(sVar10)) * getInvScale(),
dVar15 * cM_ssin(sVar10), 0.0f);
GXLoadTexMtxImm(mDoMtx_stack_c::get(), iVar11, GX_MTX2x4);
mDoMtx_stack_c::transS((dVar15 * cM_scos(angle)) * getInvScale(),
dVar15 * cM_ssin(angle), 0.0f);
GXLoadTexMtxImm(mDoMtx_stack_c::get(), texMtxID, GX_MTX2x4);
iVar11 += 3;
sVar10 += 0x2492;
texMtxID += 3;
angle += 0x2492;
}
GXSetNumTevStages(8);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
@@ -1495,6 +1673,7 @@ void mDoGph_gInf_c::bloom_c::draw() {
}
}
}
#endif
static void retry_captue_frame(view_class* param_0, view_port_class* param_1, int param_2) {
UNUSED(param_0);
@@ -1858,7 +2037,7 @@ int mDoGph_Painter() {
JPADrawInfo draw_info(camera_p->view.viewMtx, camera_p->view.fovy, camera_p->view.aspect);
#endif
#if WIDESCREEN_SUPPORT
#if 0 && WIDESCREEN_SUPPORT
if (mDoGph_gInf_c::isWideZoom()) {
Mtx44 sp140;
draw_info.getPrjMtx(sp140);