diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c index ebb8cee4f4..ec35da1b19 100644 --- a/gfx/drivers/ctr_gfx.c +++ b/gfx/drivers/ctr_gfx.c @@ -119,44 +119,40 @@ static INLINE void ctr_check_3D_slider(ctr_video_t* ctr) if (slider_val == 0.0) ctr->video_mode = CTR_VIDEO_MODE_NORMAL; - else if (slider_val < 0.1) + else if (slider_val < 0.2) ctr->video_mode = CTR_VIDEO_MODE_800x240; - else if (slider_val < 0.6) + else if (slider_val < 0.5) ctr->video_mode = CTR_VIDEO_MODE_400x240; else ctr->video_mode = CTR_VIDEO_MODE_3D; - if (old_mode != ctr->video_mode) + if (ctr->video_mode) { switch (ctr->video_mode) { case CTR_VIDEO_MODE_800x240: case CTR_VIDEO_MODE_400x240: - if (ctr_set_parallax_layer(false)) - ctr->video_mode = CTR_VIDEO_MODE_3D; + ctr_set_parallax_layer(false); break; case CTR_VIDEO_MODE_3D: + { + s16 offset = (slider_val - 0.6) * 10.0; + ctr->frame_coords[1] = ctr->frame_coords[0]; + ctr->frame_coords[2] = ctr->frame_coords[0]; + + ctr->frame_coords[1].x0 -= offset; + ctr->frame_coords[1].x1 -= offset; + ctr->frame_coords[2].x0 += offset; + ctr->frame_coords[2].x1 += offset; + + GSPGPU_FlushDataCache(ctr->frame_coords, 3 * sizeof(ctr_vertex_t)); ctr_set_parallax_layer(true); break; + } default: break; } } - - if (ctr->video_mode == CTR_VIDEO_MODE_3D) - { - s16 offset = (slider_val - 0.6) * 10.0; - ctr->menu.frame_coords[1] = ctr->menu.frame_coords[0]; - ctr->menu.frame_coords[2] = ctr->menu.frame_coords[0]; - - ctr->menu.frame_coords[1].x0 += offset; - ctr->menu.frame_coords[1].x1 += offset; - ctr->menu.frame_coords[2].x0 -= offset; - ctr->menu.frame_coords[2].x1 -= offset; - - GSPGPU_FlushDataCache(ctr->menu.frame_coords, 3 * sizeof(ctr_vertex_t)); - - } } static INLINE void ctr_set_scale_vector(ctr_scale_vector_t* vec, @@ -336,7 +332,7 @@ static void* ctr_init(const video_info_t* video, ctr->texture_swizzled = linearMemAlign(ctr->texture_width * ctr->texture_height * (ctr->rgb32? 4:2), 128); - ctr->frame_coords = linearAlloc(sizeof(ctr_vertex_t)); + ctr->frame_coords = linearAlloc(3 * sizeof(ctr_vertex_t)); ctr->frame_coords->x0 = 0; ctr->frame_coords->y0 = 0; ctr->frame_coords->x1 = CTR_TOP_FRAMEBUFFER_WIDTH; @@ -354,7 +350,7 @@ static void* ctr_init(const video_info_t* video, ctr->menu.texture_swizzled = linearMemAlign(ctr->menu.texture_width * ctr->menu.texture_height * sizeof(uint16_t), 128); - ctr->menu.frame_coords = linearAlloc(3 * sizeof(ctr_vertex_t)); + ctr->menu.frame_coords = linearAlloc(sizeof(ctr_vertex_t)); ctr->menu.frame_coords->x0 = 40; ctr->menu.frame_coords->y0 = 0; @@ -501,8 +497,6 @@ static bool ctr_frame(void* data, const void* frame, ctr->lcd_buttom_on = !ctr->lcd_buttom_on; } - ctr_check_3D_slider(ctr); - svcWaitSynchronization(gspEvents[GSPGPU_EVENT_P3D], 20000000); svcClearEvent(gspEvents[GSPGPU_EVENT_P3D]); svcWaitSynchronization(gspEvents[GSPGPU_EVENT_PPF], 20000000); @@ -633,8 +627,6 @@ static bool ctr_frame(void* data, const void* frame, ctr->frame_coords->u1 = width; ctr->frame_coords->v1 = height; GSPGPU_FlushDataCache(ctr->frame_coords, sizeof(ctr_vertex_t)); - - ctrGuSetAttributeBuffersAddress(VIRT_TO_PHYS(ctr->frame_coords)); ctrGuSetVertexShaderFloatUniform(0, (float*)&ctr->scale_vector, 1); } @@ -644,6 +636,8 @@ static bool ctr_frame(void* data, const void* frame, GPU_TEXTURE_WRAP_S(GPU_CLAMP_TO_EDGE) | GPU_TEXTURE_WRAP_T(GPU_CLAMP_TO_EDGE), ctr->rgb32 ? GPU_RGBA8: GPU_RGB565); + ctr_check_3D_slider(ctr); + /* ARGB --> RGBA */ if (ctr->rgb32) { @@ -675,16 +669,28 @@ static bool ctr_frame(void* data, const void* frame, 0, 0, CTR_TOP_FRAMEBUFFER_HEIGHT, ctr->video_mode == CTR_VIDEO_MODE_800x240 ? CTR_TOP_FRAMEBUFFER_WIDTH * 2 : CTR_TOP_FRAMEBUFFER_WIDTH); - GPU_DrawArray(GPU_GEOMETRY_PRIM, 0, 1); - - if(ctr->video_mode == CTR_VIDEO_MODE_3D) + if (ctr->video_mode == CTR_VIDEO_MODE_3D) { + if (ctr->menu_texture_enable) + { + ctrGuSetAttributeBuffersAddress(VIRT_TO_PHYS(&ctr->frame_coords[1])); + GPU_DrawArray(GPU_GEOMETRY_PRIM, 0, 1); + ctrGuSetAttributeBuffersAddress(VIRT_TO_PHYS(&ctr->frame_coords[2])); + } + else + { + ctrGuSetAttributeBuffersAddress(VIRT_TO_PHYS(ctr->frame_coords)); + GPU_DrawArray(GPU_GEOMETRY_PRIM, 0, 1); + } GPU_SetViewport(VIRT_TO_PHYS(CTR_GPU_DEPTHBUFFER), VIRT_TO_PHYS(CTR_TOP_FRAMEBUFFER_RIGHT), 0, 0, CTR_TOP_FRAMEBUFFER_HEIGHT, CTR_TOP_FRAMEBUFFER_WIDTH); - GPU_DrawArray(GPU_GEOMETRY_PRIM, 0, 1); } + else + ctrGuSetAttributeBuffersAddress(VIRT_TO_PHYS(ctr->frame_coords)); + + GPU_DrawArray(GPU_GEOMETRY_PRIM, 0, 1); /* restore */ if (ctr->rgb32) @@ -714,22 +720,15 @@ static bool ctr_frame(void* data, const void* frame, 0, 0, CTR_TOP_FRAMEBUFFER_HEIGHT, ctr->video_mode == CTR_VIDEO_MODE_800x240 ? CTR_TOP_FRAMEBUFFER_WIDTH * 2 : CTR_TOP_FRAMEBUFFER_WIDTH); + ctrGuSetAttributeBuffersAddress(VIRT_TO_PHYS(ctr->menu.frame_coords)); + GPU_DrawArray(GPU_GEOMETRY_PRIM, 0, 1); + if (ctr->video_mode == CTR_VIDEO_MODE_3D) { - ctrGuSetAttributeBuffersAddress(VIRT_TO_PHYS(&ctr->menu.frame_coords[1])); - GPU_DrawArray(GPU_GEOMETRY_PRIM, 0, 1); - GPU_SetViewport(VIRT_TO_PHYS(CTR_GPU_DEPTHBUFFER), VIRT_TO_PHYS(CTR_TOP_FRAMEBUFFER_RIGHT), 0, 0, CTR_TOP_FRAMEBUFFER_HEIGHT, CTR_TOP_FRAMEBUFFER_WIDTH); - ctrGuSetAttributeBuffersAddress(VIRT_TO_PHYS(&ctr->menu.frame_coords[2])); - GPU_DrawArray(GPU_GEOMETRY_PRIM, 0, 1); - } - else - { - - ctrGuSetAttributeBuffersAddress(VIRT_TO_PHYS(ctr->menu.frame_coords)); GPU_DrawArray(GPU_GEOMETRY_PRIM, 0, 1); } }