gl: don't present a frame if no previous render
This commit is contained in:
parent
34d86500fa
commit
a7a70f9900
|
@ -480,7 +480,7 @@ void gl4_delete_shaders()
|
|||
gl4.modvol_shader.program = 0;
|
||||
}
|
||||
|
||||
static void gles_term(void)
|
||||
static void gl4_term(void)
|
||||
{
|
||||
glDeleteBuffers(1, &gl4.vbo.geometry);
|
||||
gl4.vbo.geometry = 0;
|
||||
|
@ -541,7 +541,7 @@ extern void initABuffer();
|
|||
void reshapeABuffer(int width, int height);
|
||||
extern void gl4CreateTextures(int width, int height);
|
||||
|
||||
static bool gles_init()
|
||||
static bool gl4_init()
|
||||
{
|
||||
findGLVersion();
|
||||
if (gl.gl_major < 4 || (gl.gl_major == 4 && gl.gl_minor < 3))
|
||||
|
@ -875,15 +875,20 @@ static bool RenderFrame()
|
|||
|
||||
void termABuffer();
|
||||
|
||||
struct gl4rend : Renderer
|
||||
struct OpenGL4Renderer : OpenGLRenderer
|
||||
{
|
||||
bool Init() override { return gles_init(); }
|
||||
bool Init() override
|
||||
{
|
||||
return gl4_init();
|
||||
}
|
||||
|
||||
void Resize(int w, int h) override
|
||||
{
|
||||
screen_width=w;
|
||||
screen_height=h;
|
||||
resize((int)lroundf(w * settings.rend.ScreenScaling / 100.f), (int)lroundf(h * settings.rend.ScreenScaling / 100.f));
|
||||
}
|
||||
|
||||
void Term() override
|
||||
{
|
||||
termABuffer();
|
||||
|
@ -926,29 +931,28 @@ struct gl4rend : Renderer
|
|||
|
||||
gl_free_osd_resources();
|
||||
free_output_framebuffer();
|
||||
gles_term();
|
||||
gl4_term();
|
||||
}
|
||||
|
||||
bool Process(TA_context* ctx) override { return ProcessFrame(ctx); }
|
||||
bool Render() override
|
||||
{
|
||||
RenderFrame();
|
||||
if (!pvrrc.isRTT)
|
||||
DrawOSD(false);
|
||||
if (pvrrc.isRTT)
|
||||
return false;
|
||||
|
||||
return !pvrrc.isRTT;
|
||||
}
|
||||
bool RenderLastFrame() override { return !theGLContext.IsSwapBufferPreserved() ? gl4_render_output_framebuffer() : false; }
|
||||
DrawOSD(false);
|
||||
frameRendered = true;
|
||||
|
||||
void DrawOSD(bool clear_screen) override
|
||||
{
|
||||
OSD_DRAW(clear_screen);
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual u64 GetTexture(TSP tsp, TCW tcw) override
|
||||
bool RenderLastFrame() override
|
||||
{
|
||||
return gl_GetTexture(tsp, tcw);
|
||||
return !theGLContext.IsSwapBufferPreserved() ? gl4_render_output_framebuffer() : false;
|
||||
}
|
||||
};
|
||||
|
||||
Renderer* rend_GL4() { return new gl4rend(); }
|
||||
Renderer* rend_GL4()
|
||||
{
|
||||
return new OpenGL4Renderer();
|
||||
}
|
||||
|
|
|
@ -1343,36 +1343,35 @@ bool RenderFrame()
|
|||
return !is_rtt;
|
||||
}
|
||||
|
||||
struct glesrend : Renderer
|
||||
bool OpenGLRenderer::Init()
|
||||
{
|
||||
bool Init() override { return gles_init(); }
|
||||
void Resize(int w, int h) override { screen_width=w; screen_height=h; }
|
||||
void Term() override
|
||||
{
|
||||
TexCache.Clear();
|
||||
gles_term();
|
||||
}
|
||||
return gles_init();
|
||||
}
|
||||
|
||||
bool Process(TA_context* ctx) override { return ProcessFrame(ctx); }
|
||||
bool Render() override
|
||||
{
|
||||
RenderFrame();
|
||||
if (!pvrrc.isRTT)
|
||||
DrawOSD(false);
|
||||
void OpenGLRenderer::Term()
|
||||
{
|
||||
TexCache.Clear();
|
||||
gles_term();
|
||||
}
|
||||
|
||||
return !pvrrc.isRTT;
|
||||
}
|
||||
bool RenderLastFrame() override { return !theGLContext.IsSwapBufferPreserved() ? render_output_framebuffer() : false; }
|
||||
bool OpenGLRenderer::Render()
|
||||
{
|
||||
RenderFrame();
|
||||
if (pvrrc.isRTT)
|
||||
return false;
|
||||
|
||||
void DrawOSD(bool clear_screen) override
|
||||
{
|
||||
OSD_DRAW(clear_screen);
|
||||
}
|
||||
DrawOSD(false);
|
||||
frameRendered = true;
|
||||
|
||||
virtual u64 GetTexture(TSP tsp, TCW tcw) override
|
||||
{
|
||||
return gl_GetTexture(tsp, tcw);
|
||||
}
|
||||
};
|
||||
return true;
|
||||
}
|
||||
|
||||
Renderer* rend_GLES2() { return new glesrend(); }
|
||||
bool OpenGLRenderer::RenderLastFrame()
|
||||
{
|
||||
return !theGLContext.IsSwapBufferPreserved() ? render_output_framebuffer() : false;
|
||||
}
|
||||
|
||||
Renderer* rend_GLES2()
|
||||
{
|
||||
return new OpenGLRenderer();
|
||||
}
|
||||
|
|
|
@ -233,3 +233,33 @@ extern TextureCache TexCache;
|
|||
|
||||
extern const u32 Zfunction[8];
|
||||
extern const u32 SrcBlendGL[], DstBlendGL[];
|
||||
|
||||
struct OpenGLRenderer : Renderer
|
||||
{
|
||||
bool Init() override;
|
||||
void Resize(int w, int h) override { screen_width = w; screen_height = h; }
|
||||
void Term() override;
|
||||
|
||||
bool Process(TA_context* ctx) override { return ProcessFrame(ctx); }
|
||||
|
||||
bool Render() override;
|
||||
|
||||
bool RenderLastFrame() override;
|
||||
|
||||
void DrawOSD(bool clear_screen) override { OSD_DRAW(clear_screen); }
|
||||
|
||||
virtual u64 GetTexture(TSP tsp, TCW tcw) override
|
||||
{
|
||||
return gl_GetTexture(tsp, tcw);
|
||||
}
|
||||
|
||||
virtual bool Present() override
|
||||
{
|
||||
if (!frameRendered)
|
||||
return false;
|
||||
frameRendered = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool frameRendered = false;
|
||||
};
|
||||
|
|
|
@ -260,7 +260,7 @@ void select_directory_popup(const char *prompt, float scaling, StringCallback ca
|
|||
select_current_directory = child_path;
|
||||
}
|
||||
}
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, { 1, 1, 1, 0.3});
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, { 1, 1, 1, 0.3f });
|
||||
for (auto& name : display_files)
|
||||
{
|
||||
ImGui::Text("%s", name.c_str());
|
||||
|
|
Loading…
Reference in New Issue