fix trimming viewport scissoring fixes #121

This commit is contained in:
madeline
2026-03-24 18:25:01 -07:00
parent a1f78609d8
commit 5fd5882881
2 changed files with 26 additions and 0 deletions
+7
View File
@@ -10997,7 +10997,14 @@ static int camera_draw(camera_process_class* i_this) {
#endif
int trim_height = body->TrimHeight();
#if TARGET_PC
trim_height *= viewport->height / FB_HEIGHT;
window->setScissor(0.0f, trim_height, viewport->width, viewport->height - trim_height * 2.0f);
#else
window->setScissor(0.0f, trim_height, FB_WIDTH, FB_HEIGHT - trim_height * 2.0f);
#endif
C_MTXPerspective(process->view.projMtx, process->view.fovy, process->view.aspect, process->view.near_, process->view.far_);
mDoMtx_lookAt(process->view.viewMtx, &process->view.lookat.eye, &process->view.lookat.center,
&process->view.lookat.up, process->view.bank);
+19
View File
@@ -1081,7 +1081,13 @@ static void trimming(view_class* param_0, view_port_class* param_1) {
GXSetDither(GX_TRUE);
GXSetNumIndStages(0);
Mtx44 ortho;
#if TARGET_PC
C_MTXOrtho(ortho, 0.0f, param_1->height, 0.0f, param_1->width, 0.0f, 10.0f);
#else
C_MTXOrtho(ortho, 0.0f, FB_HEIGHT, 0.0f, FB_WIDTH, 0.0f, 10.0f);
#endif
GXLoadPosMtxImm(cMtx_getIdentity(), 0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
@@ -1089,6 +1095,17 @@ static void trimming(view_class* param_0, view_port_class* param_1) {
GXSetProjection(ortho, GX_ORTHOGRAPHIC);
GXSetCurrentMtx(0);
GXBegin(GX_QUADS, GX_VTXFMT0, 8);
#if TARGET_PC
GXPosition3s16(0, 0, -5);
GXPosition3s16(param_1->width, 0, -5);
GXPosition3s16(param_1->width, sc_top, -5);
GXPosition3s16(0, sc_top, -5);
GXPosition3s16(0, sc_bottom, -5);
GXPosition3s16(param_1->width, sc_bottom, -5);
GXPosition3s16(param_1->width, param_1->height, -5);
GXPosition3s16(0, param_1->height, -5);
#else
GXPosition3s16(0, 0, -5);
GXPosition3s16(FB_WIDTH, 0, -5);
GXPosition3s16(FB_WIDTH, sc_top, -5);
@@ -1097,6 +1114,8 @@ static void trimming(view_class* param_0, view_port_class* param_1) {
GXPosition3s16(FB_WIDTH, sc_bottom, -5);
GXPosition3s16(FB_WIDTH, FB_HEIGHT, -5);
GXPosition3s16(0, FB_HEIGHT, -5);
#endif
GXEnd();
}
GXSetScissor(param_1->scissor.x_orig, param_1->scissor.y_orig, param_1->scissor.width,