X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fgpu-gles%2Fgpulib_if.c;h=1f4a23db423022b6329e34261e92fb352b9b8b40;hp=923f652e3affd80cbc0f0c3533de3ca4048bd5c6;hb=HEAD;hpb=71e413beb2288211f8864040d325de6e1676c413 diff --git a/plugins/gpu-gles/gpulib_if.c b/plugins/gpu-gles/gpulib_if.c index 923f652e..a09b3fb1 100644 --- a/plugins/gpu-gles/gpulib_if.c +++ b/plugins/gpu-gles/gpulib_if.c @@ -22,6 +22,8 @@ #include "gpuPrim.c" #include "hud.c" +static int is_opened; + static const short dispWidths[8] = {256,320,512,640,368,384,512,640}; short g_m1,g_m2,g_m3; short DrawSemiTrans; @@ -315,6 +317,9 @@ if(bUp) updateDisplay(); // yeah, real update (swap #define GPUwriteStatus_ext GPUwriteStatus_ext // for gpulib to see this void GPUwriteStatus_ext(unsigned int gdata) { + if (!is_opened) + return; + switch((gdata>>24)&0xff) { case 0x00: @@ -478,8 +483,6 @@ switch((gdata>>24)&0xff) #include "../gpulib/gpu.c" -static int is_opened; - static void set_vram(void *vram) { psxVub=vram; @@ -506,6 +509,34 @@ int renderer_init(void) return 0; } +static void clear_gl_state_for_menu(void) +{ + static const GLenum caps[] = { + GL_ALPHA_TEST, GL_BLEND, GL_COLOR_LOGIC_OP, GL_COLOR_MATERIAL, + GL_CULL_FACE, GL_DEPTH_TEST, GL_FOG, GL_LIGHTING, GL_NORMALIZE, + GL_POLYGON_OFFSET_FILL, GL_RESCALE_NORMAL, GL_SAMPLE_ALPHA_TO_COVERAGE, + GL_SAMPLE_ALPHA_TO_ONE, GL_SAMPLE_COVERAGE, GL_SCISSOR_TEST, GL_STENCIL_TEST + }; + static const GLenum cstates[] = { + GL_COLOR_ARRAY, GL_NORMAL_ARRAY, GL_POINT_SIZE_ARRAY_OES + }; + size_t i; + for (i = 0; i < sizeof(caps) / sizeof(caps[0]); i++) + glDisable(caps[i]); + for (i = 0; i < 6; i++) + glDisable(GL_CLIP_PLANE0 + i); + for (i = 0; i < 8; i++) + glDisable(GL_LIGHT0 + i); + for (i = 0; i < sizeof(cstates) / sizeof(cstates[0]); i++) + glDisableClientState(cstates[i]); + + glColor4ub(255, 255, 255, 255); + glLoadIdentity(); + glEnable(GL_TEXTURE_2D); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_VERTEX_ARRAY); +} + void renderer_finish(void) { } @@ -514,14 +545,15 @@ void renderer_notify_res_change(void) { } -void renderer_notify_scanout_x_change(int x, int w) +void renderer_notify_scanout_change(int x, int y) { } extern const unsigned char cmd_lengths[256]; // XXX: mostly dupe code from soft peops -int do_cmd_list(unsigned int *list, int list_len, int *last_cmd) +int do_cmd_list(uint32_t *list, int list_len, + int *cycles_sum_out, int *cycles_last, int *last_cmd) { unsigned int cmd, len; unsigned int *list_start = list; @@ -654,19 +686,22 @@ int vout_finish(void) return 0; } -void vout_update(void) +int vout_update(void) { if(PSXDisplay.Interlaced) // interlaced mode? { if(PSXDisplay.DisplayMode.x>0 && PSXDisplay.DisplayMode.y>0) { updateDisplay(); // -> swap buffers (new frame) + return 1; } } else if(bRenderFrontBuffer) // no interlace mode? and some stuff in front has changed? { updateFrontDisplay(); // -> update front buffer + return 1; } + return 0; } void vout_blank(void) @@ -683,6 +718,10 @@ long GPUopen(unsigned long *disp, char *cap, char *cfg) { int ret; + if (is_opened) { + fprintf(stderr, "double GPUopen\n"); + return -1; + } iResX = cbs->screen_w; iResY = cbs->screen_h; rRatioRect.left = rRatioRect.top=0; @@ -704,9 +743,12 @@ long GPUopen(unsigned long *disp, char *cap, char *cfg) long GPUclose(void) { + if (!is_opened) + return 0; is_opened = 0; KillDisplayLists(); + clear_gl_state_for_menu(); GLcleanup(); // close OGL return 0; } @@ -736,9 +778,12 @@ void renderer_set_config(const struct rearmed_cbs *cbs_) cbs->pl_set_gpu_caps(GPU_CAP_OWNS_DISPLAY); if (is_opened && cbs->gles_display != NULL && cbs->gles_surface != NULL) { - // HACK.. - GPUclose(); - GPUopen(NULL, NULL, NULL); + if (cbs->gles_display != display || cbs->gles_surface != surface) { + // HACK... + fprintf(stderr, "gles reinit hack\n"); + GPUclose(); + GPUopen(NULL, NULL, NULL); + } } set_vram(gpu.vram); @@ -774,3 +819,11 @@ static void fps_update(void) DisplayText(buf, 1); } } + +void renderer_sync(void) +{ +} + +void renderer_notify_update_lace(int updated) +{ +}