diff --git a/core/rend/gl4/gl4.h b/core/rend/gl4/gl4.h index 66e042daa..46a80d2b1 100755 --- a/core/rend/gl4/gl4.h +++ b/core/rend/gl4/gl4.h @@ -2,8 +2,6 @@ #include "rend/gles/gles.h" #include -extern float gl4_scale_x, gl4_scale_y; - void gl4DrawStrips(GLuint output_fbo); struct gl4PipelineShader diff --git a/core/rend/gl4/gldraw.cpp b/core/rend/gl4/gldraw.cpp index 15f8dc876..a166f4199 100644 --- a/core/rend/gl4/gldraw.cpp +++ b/core/rend/gl4/gldraw.cpp @@ -114,10 +114,10 @@ static s32 SetTileClip(u32 val, bool set) { if (!pvrrc.isRTT) { - csx /= gl4_scale_x; - csy /= gl4_scale_y; - cex /= gl4_scale_x; - cey /= gl4_scale_y; + csx /= scale_x; + csy /= scale_y; + cex /= scale_x; + cey /= scale_y; float t = cey; cey = 480 - csy; csy = 480 - t; diff --git a/core/rend/gl4/gles.cpp b/core/rend/gl4/gles.cpp index 0a05ac5aa..357ada393 100644 --- a/core/rend/gl4/gles.cpp +++ b/core/rend/gl4/gles.cpp @@ -8,8 +8,6 @@ #include "rend/rend.h" #include "hw/pvr/Renderer_if.h" -float gl4_scale_x, gl4_scale_y; - //Fragment and vertex shaders code static const char* VertexShaderSource = @@ -827,15 +825,15 @@ static bool RenderFrame() dc_height = pvrrc.fb_Y_CLIP.max - pvrrc.fb_Y_CLIP.min + 1; } - gl4_scale_x = 1; - gl4_scale_y = 1; + scale_x = 1; + scale_y = 1; float scissoring_scale_x = 1; if (!is_rtt && !pvrrc.isRenderFramebuffer) { - gl4_scale_x=fb_scale_x; - gl4_scale_y=fb_scale_y; + scale_x=fb_scale_x; + scale_y=fb_scale_y; //work out scaling parameters ! //Pixel doubling is on VO, so it does not affect any pixel operations @@ -843,18 +841,18 @@ static bool RenderFrame() if (VO_CONTROL.pixel_double) { scissoring_scale_x = 0.5f; - gl4_scale_x *= 0.5f; + scale_x *= 0.5f; } if (SCALER_CTL.hscale) { scissoring_scale_x /= 2; - gl4_scale_x*=2; + scale_x*=2; } } - dc_width *= gl4_scale_x; - dc_height *= gl4_scale_y; + dc_width *= scale_x; + dc_height *= scale_y; /* Handle Dc to screen scaling @@ -863,7 +861,7 @@ static bool RenderFrame() float ds2s_offs_x = is_rtt ? 0 : ((screen_width - dc2s_scale_h * 640.0) / 2); //-1 -> too much to left - gl4ShaderUniforms.scale_coefs[0]=2.0f/(screen_width/dc2s_scale_h*gl4_scale_x); + gl4ShaderUniforms.scale_coefs[0]=2.0f/(screen_width/dc2s_scale_h*scale_x); gl4ShaderUniforms.scale_coefs[1]=(is_rtt ? 2 : -2) / dc_height; // FIXME CT2 needs 480 here instead of dc_height=512 gl4ShaderUniforms.scale_coefs[2]=1-2*ds2s_offs_x/(screen_width); gl4ShaderUniforms.scale_coefs[3]=(is_rtt?1:-1); @@ -976,9 +974,9 @@ static bool RenderFrame() bool wide_screen_on = !is_rtt && settings.rend.WideScreen && pvrrc.fb_X_CLIP.min == 0 - && (pvrrc.fb_X_CLIP.max + 1) / gl4_scale_x == 640 + && (pvrrc.fb_X_CLIP.max + 1) / scale_x == 640 && pvrrc.fb_Y_CLIP.min == 0 - && (pvrrc.fb_Y_CLIP.max + 1) / gl4_scale_y == 480; + && (pvrrc.fb_Y_CLIP.max + 1) / scale_y == 480; //Color is cleared by the background plane @@ -1012,21 +1010,21 @@ static bool RenderFrame() //this needs to be scaled //not all scaling affects pixel operations, scale to adjust for that - gl4_scale_x *= scissoring_scale_x; + scale_x *= scissoring_scale_x; #if 0 //handy to debug really stupid render-not-working issues ... printf("SS: %dx%d\n", screen_width, screen_height); printf("SCI: %d, %f\n", pvrrc.fb_X_CLIP.max, dc2s_scale_h); - printf("SCI: %f, %f, %f, %f\n", offs_x+pvrrc.fb_X_CLIP.min/gl4_scale_x,(pvrrc.fb_Y_CLIP.min/gl4_scale_y)*dc2s_scale_h,(pvrrc.fb_X_CLIP.max-pvrrc.fb_X_CLIP.min+1)/gl4_scale_x*dc2s_scale_h,(pvrrc.fb_Y_CLIP.max-pvrrc.fb_Y_CLIP.min+1)/gl4_scale_y*dc2s_scale_h); + printf("SCI: %f, %f, %f, %f\n", offs_x+pvrrc.fb_X_CLIP.min/scale_x,(pvrrc.fb_Y_CLIP.min/scale_y)*dc2s_scale_h,(pvrrc.fb_X_CLIP.max-pvrrc.fb_X_CLIP.min+1)/scale_x*dc2s_scale_h,(pvrrc.fb_Y_CLIP.max-pvrrc.fb_Y_CLIP.min+1)/scale_y*dc2s_scale_h); #endif if (!wide_screen_on) { - float width = (pvrrc.fb_X_CLIP.max - pvrrc.fb_X_CLIP.min + 1) / gl4_scale_x; - float height = (pvrrc.fb_Y_CLIP.max - pvrrc.fb_Y_CLIP.min + 1) / gl4_scale_y; - float min_x = pvrrc.fb_X_CLIP.min / gl4_scale_x; - float min_y = pvrrc.fb_Y_CLIP.min / gl4_scale_y; + float width = (pvrrc.fb_X_CLIP.max - pvrrc.fb_X_CLIP.min + 1) / scale_x; + float height = (pvrrc.fb_Y_CLIP.max - pvrrc.fb_Y_CLIP.min + 1) / scale_y; + float min_x = pvrrc.fb_X_CLIP.min / scale_x; + float min_y = pvrrc.fb_Y_CLIP.min / scale_y; if (!is_rtt) { // Add x offset for aspect ratio > 4/3 @@ -1059,7 +1057,7 @@ static bool RenderFrame() } //restore scale_x - gl4_scale_x /= scissoring_scale_x; + scale_x /= scissoring_scale_x; gl4DrawStrips(output_fbo); } else diff --git a/core/rend/gles/gles.cpp b/core/rend/gles/gles.cpp index f6feec0b8..86a326b81 100644 --- a/core/rend/gles/gles.cpp +++ b/core/rend/gles/gles.cpp @@ -1317,7 +1317,7 @@ static void DrawRightedText(float yy, float scale, int transparency, const char* float w = float(strlen(text) * 14) * scale * scale_x; - float x = (ShaderUniforms.scale_coefs[2] + 1) / ShaderUniforms.scale_coefs[0] - w; + float x = scale_x / 2 * (640 + screen_width * 480 / screen_height) - w; float y = yy * scale_y; float h = 16.0f * scale * scale_y; w = 14.0f * scale * scale_x;