mirror of
https://github.com/libretro/RetroArch
synced 2025-02-22 21:40:40 +00:00
Some additions, but still broken.
This commit is contained in:
parent
5dc573ed38
commit
62ead00f0f
@ -98,7 +98,7 @@ static bool wii_key_pressed(void *data, int key)
|
|||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
case SSNES_QUIT_KEY:
|
case SSNES_QUIT_KEY:
|
||||||
return g_quit;
|
return g_quit || pad_state[0][SNES_DEVICE_ID_JOYPAD_START];
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
30
wii/video.c
30
wii/video.c
@ -78,6 +78,7 @@ static void init_vtx(GXRModeObj *mode)
|
|||||||
GX_SetDispCopyDst(mode->fbWidth, mode->xfbHeight);
|
GX_SetDispCopyDst(mode->fbWidth, mode->xfbHeight);
|
||||||
GX_SetCopyFilter(mode->aa, mode->sample_pattern, (mode->xfbMode == VI_XFBMODE_SF) ? GX_FALSE : GX_TRUE,
|
GX_SetCopyFilter(mode->aa, mode->sample_pattern, (mode->xfbMode == VI_XFBMODE_SF) ? GX_FALSE : GX_TRUE,
|
||||||
mode->vfilter);
|
mode->vfilter);
|
||||||
|
GX_SetCopyClear((GXColor) { 0, 0, 0, 0xff }, GX_MAX_Z24);
|
||||||
GX_SetFieldMode(mode->field_rendering, (mode->viHeight == 2 * mode->xfbHeight) ? GX_ENABLE : GX_DISABLE);
|
GX_SetFieldMode(mode->field_rendering, (mode->viHeight == 2 * mode->xfbHeight) ? GX_ENABLE : GX_DISABLE);
|
||||||
|
|
||||||
GX_SetPixelFmt(GX_PF_RGB8_Z24, GX_ZC_LINEAR);
|
GX_SetPixelFmt(GX_PF_RGB8_Z24, GX_ZC_LINEAR);
|
||||||
@ -107,10 +108,10 @@ static void init_vtx(GXRModeObj *mode)
|
|||||||
GX_Flush();
|
GX_Flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_texture(void)
|
static void init_texture(unsigned width, unsigned height)
|
||||||
{
|
{
|
||||||
GX_InitTexObj(&g_tex.obj, g_tex.data, 512, 512, GX_TF_RGB565, GX_MIRROR, GX_MIRROR, GX_FALSE);
|
GX_InitTexObj(&g_tex.obj, g_tex.data, width, height, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE);
|
||||||
GX_InitTexObjLOD(&g_tex.obj, GX_LINEAR, GX_LINEAR, 0, 10, 0, GX_TRUE, GX_FALSE, GX_ANISO_1);
|
GX_InitTexObjLOD(&g_tex.obj, GX_NEAR, GX_NEAR, 0, 0, 0, GX_TRUE, GX_FALSE, GX_ANISO_1);
|
||||||
GX_LoadTexObj(&g_tex.obj, GX_TEXMAP0);
|
GX_LoadTexObj(&g_tex.obj, GX_TEXMAP0);
|
||||||
GX_InvalidateTexAll();
|
GX_InvalidateTexAll();
|
||||||
}
|
}
|
||||||
@ -142,7 +143,6 @@ static void *wii_init(const video_info_t *video,
|
|||||||
GX_SetClipMode(GX_CLIP_DISABLE);
|
GX_SetClipMode(GX_CLIP_DISABLE);
|
||||||
|
|
||||||
init_vtx(mode);
|
init_vtx(mode);
|
||||||
init_texture();
|
|
||||||
build_disp_list();
|
build_disp_list();
|
||||||
|
|
||||||
*input = NULL;
|
*input = NULL;
|
||||||
@ -153,23 +153,14 @@ static void *wii_init(const video_info_t *video,
|
|||||||
static void update_texture(const uint16_t *src,
|
static void update_texture(const uint16_t *src,
|
||||||
unsigned width, unsigned height, unsigned pitch)
|
unsigned width, unsigned height, unsigned pitch)
|
||||||
{
|
{
|
||||||
width <<= 1;
|
|
||||||
pitch >>= 1;
|
pitch >>= 1;
|
||||||
float tex_w = (float)width / 512;
|
|
||||||
float tex_h = (float)height / 512;
|
|
||||||
|
|
||||||
tex_coords[4] = tex_w;
|
|
||||||
tex_coords[6] = tex_w;
|
|
||||||
tex_coords[3] = tex_h;
|
|
||||||
tex_coords[5] = tex_h;
|
|
||||||
|
|
||||||
|
// Pitch is totally broken. No idea why.
|
||||||
uint16_t *dst = g_tex.data;
|
uint16_t *dst = g_tex.data;
|
||||||
for (unsigned i = 0; i < height; i++, dst += 512, src += pitch)
|
for (unsigned i = 0; i < height; i++, dst += width, src += pitch)
|
||||||
memcpy(dst, src, width);
|
memcpy(dst, src, width << 1);
|
||||||
|
|
||||||
DCFlushRange(tex_coords, sizeof(tex_coords));
|
init_texture(width, height);
|
||||||
GX_InvVtxCache();
|
|
||||||
|
|
||||||
DCFlushRange(g_tex.data, sizeof(g_tex.data));
|
DCFlushRange(g_tex.data, sizeof(g_tex.data));
|
||||||
GX_InvalidateTexAll();
|
GX_InvalidateTexAll();
|
||||||
}
|
}
|
||||||
@ -181,15 +172,14 @@ static bool wii_frame(void *data, const void *frame,
|
|||||||
(void)data;
|
(void)data;
|
||||||
(void)msg;
|
(void)msg;
|
||||||
|
|
||||||
GX_SetCopyClear((GXColor) { 0, 0, 0, 0xff }, GX_MAX_Z24);
|
|
||||||
|
|
||||||
update_texture(frame, width, height, pitch);
|
update_texture(frame, width, height, pitch);
|
||||||
GX_CallDispList(display_list, display_list_size);
|
GX_CallDispList(display_list, display_list_size);
|
||||||
GX_DrawDone();
|
GX_DrawDone();
|
||||||
GX_Flush();
|
|
||||||
|
|
||||||
g_framebuf_index ^= 1;
|
g_framebuf_index ^= 1;
|
||||||
GX_CopyDisp(g_framebuf[g_framebuf_index], GX_TRUE);
|
GX_CopyDisp(g_framebuf[g_framebuf_index], GX_TRUE);
|
||||||
|
GX_Flush();
|
||||||
|
|
||||||
VIDEO_SetNextFramebuffer(g_framebuf[g_framebuf_index]);
|
VIDEO_SetNextFramebuffer(g_framebuf[g_framebuf_index]);
|
||||||
VIDEO_Flush();
|
VIDEO_Flush();
|
||||||
//VIDEO_WaitVSync();
|
//VIDEO_WaitVSync();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user