Skip to content

Commit d1b37b4

Browse files
committed
Assorted Fixes
Fix 4:3 Make mouse actually unstreched on 16:9 Fix SDL_DisplayMode 16:9 width (for real this time)
1 parent 5219b8f commit d1b37b4

File tree

5 files changed

+29
-11
lines changed

5 files changed

+29
-11
lines changed

.vscode/settings.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"files.associations": {
3+
"*.wog2": "json",
4+
"xutility": "c"
5+
}
6+
}

src/render/ogc/SDL_render_ogc.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,8 +427,14 @@ static int OGC_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL
427427
static int OGC_RenderSetViewPort(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
428428
{
429429
const SDL_Rect *viewport = &cmd->data.viewport.rect;
430-
OGC_set_viewport(viewport->x, viewport->y, viewport->w, viewport->h,
431-
viewport->w==640 ? (viewport->h*16.0f/9.0f)+1 : viewport->w);
430+
#ifdef __wii__
431+
if (CONF_GetAspectRatio() == CONF_ASPECT_16_9)
432+
OGC_set_viewport(viewport->x, viewport->y, viewport->w, viewport->h,
433+
viewport->w==640 ? (viewport->h*16.0f/9.0f)+1 : viewport->w);
434+
else
435+
#endif
436+
OGC_set_viewport(viewport->x, viewport->y, viewport->w, viewport->h, viewport->w);
437+
432438
return 0;
433439
}
434440

src/video/ogc/SDL_ogcgxcommon.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,11 @@ static const f32 tex_pos[] __attribute__((aligned(32))) = {
5454
* and the image ends up distorted, an example of this is VVVVVV. */
5555
void OGC_set_viewport(int x, int y, int w, int h, int widthAdjustedForWidescreen)
5656
{
57+
SDL_Log("OGC_set_viewport: %d %d %d %d %d", x, y, w, h, widthAdjustedForWidescreen);
5758
Mtx44 proj;
5859

59-
// Since the SDL
60-
GX_SetViewport(x, y, w > 640 ? 640 : w, h, 0, 1);
61-
GX_SetScissor(x, y, w > 640 ? 640 : w, h);
60+
GX_SetViewport(x, y, (w > 640) ? 640 : w, h, 0, 1);
61+
GX_SetScissor(x, y, (w > 640) ? 640 : w, h);
6262

6363
// matrix, t, b, l, r, n, f
6464
guOrtho(proj, 0, h, 0, widthAdjustedForWidescreen, 0, 1);

src/video/ogc/SDL_ogcmouse.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ void OGC_draw_cursor(_THIS)
176176
SDL_Mouse *mouse = SDL_GetMouse();
177177
OGC_CursorData *curdata;
178178
Mtx mv;
179-
int viewport_w, screen_h, screen_w;
179+
int screen_w, screen_h;
180180
float angle = 0.0f;
181181

182182
if (!mouse || !mouse->cursor_shown ||
@@ -193,15 +193,19 @@ void OGC_draw_cursor(_THIS)
193193
}
194194

195195
screen_w = _this->displays[0].current_mode.w;
196-
viewport_w = (screen_w == 854) ? 640 : _this->displays[0].current_mode.w;
197196
screen_h = _this->displays[0].current_mode.h;
198197

199198
curdata = mouse->cur_cursor->driverdata;
200199
OGC_load_texture(curdata->texels, curdata->w, curdata->h, GX_TF_RGBA8,
201200
SDL_ScaleModeNearest);
202201

203202
guMtxIdentity(mv);
204-
guMtxScaleApply(mv, mv, viewport_w / 640.0f, screen_h / 480.0f, 1.0f);
203+
#ifdef __wii__
204+
if (CONF_GetAspectRatio() == CONF_ASPECT_16_9)
205+
guMtxScaleApply(mv, mv, screen_w / 854.0f, screen_h / 480.0f, 1.0f);
206+
else
207+
#endif
208+
guMtxScaleApply(mv, mv, screen_w / 640.0f, screen_h / 480.0f, 1.0f);
205209

206210
if (angle != 0.0f) {
207211
Mtx rot;
@@ -211,7 +215,7 @@ void OGC_draw_cursor(_THIS)
211215
guMtxTransApply(mv, mv, mouse->x, mouse->y, 0);
212216
GX_LoadPosMtxImm(mv, GX_PNMTX1);
213217

214-
OGC_set_viewport(0, 0, viewport_w, screen_h, screen_w);
218+
OGC_set_viewport(0, 0, screen_w, screen_h, screen_w);
215219

216220
GX_ClearVtxDesc();
217221
GX_SetVtxDesc(GX_VA_POS, GX_DIRECT);

src/video/ogc/SDL_ogcvideo.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,11 @@ static void init_display_mode(SDL_DisplayMode *mode, const GXRModeObj *vmode)
9595
SDL_zero(*mode);
9696
mode->format = SDL_PIXELFORMAT_ARGB8888;
9797

98-
if (vmode->viWidth == 704)
99-
mode->w = ((int)(vmode->fbWidth * 16.0f / 9.0f) + 1);
98+
#ifdef __wii__
99+
if (CONF_GetAspectRatio() == CONF_ASPECT_16_9)
100+
mode->w = ((int)(vmode->fbWidth * 16.0f / 9.0f)) + 1;
100101
else
102+
#endif
101103
mode->w = vmode->fbWidth;
102104
mode->h = vmode->efbHeight;
103105
switch (format) {

0 commit comments

Comments
 (0)