gl,dx9,dx11: only render frame when Renderer::present() has been called
Issue #511
This commit is contained in:
parent
3929fe64a3
commit
8f01ef90cf
|
@ -20,6 +20,7 @@
|
|||
#include "rend/imgui_driver.h"
|
||||
#include "imgui_impl_dx11.h"
|
||||
#include "dx11context.h"
|
||||
#include "rend/gui.h"
|
||||
|
||||
class DX11Driver final : public ImGuiDriver
|
||||
{
|
||||
|
@ -30,9 +31,20 @@ public:
|
|||
|
||||
void renderDrawData(ImDrawData *drawData) override {
|
||||
theDX11Context.EndImGuiFrame();
|
||||
if (gui_is_open())
|
||||
frameRendered = true;
|
||||
}
|
||||
|
||||
void present() override {
|
||||
if (frameRendered)
|
||||
theDX11Context.Present();
|
||||
frameRendered = false;
|
||||
}
|
||||
|
||||
void setFrameRendered() override {
|
||||
frameRendered = true;
|
||||
}
|
||||
|
||||
private:
|
||||
bool frameRendered = false;
|
||||
};
|
||||
|
|
|
@ -27,6 +27,9 @@
|
|||
#include "dx11_shaders.h"
|
||||
#include "rend/sorter.h"
|
||||
#include "dx11_renderstate.h"
|
||||
#ifndef LIBRETRO
|
||||
#include "dx11_driver.h"
|
||||
#endif
|
||||
|
||||
struct DX11Renderer : public Renderer
|
||||
{
|
||||
|
@ -41,6 +44,9 @@ struct DX11Renderer : public Renderer
|
|||
if (!frameRendered)
|
||||
return false;
|
||||
frameRendered = false;
|
||||
#ifndef LIBRETRO
|
||||
imguiDriver->setFrameRendered();
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "d3d_texture.h"
|
||||
#include "d3d_shaders.h"
|
||||
#include "rend/sorter.h"
|
||||
#include "rend/imgui_driver.h"
|
||||
|
||||
class RenderStateCache
|
||||
{
|
||||
|
@ -108,6 +109,7 @@ struct D3DRenderer : public Renderer
|
|||
{
|
||||
if (!frameRendered)
|
||||
return false;
|
||||
imguiDriver->setFrameRendered();
|
||||
frameRendered = false;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -30,9 +30,20 @@ public:
|
|||
|
||||
void renderDrawData(ImDrawData *drawData) override {
|
||||
theDXContext.EndImGuiFrame();
|
||||
if (gui_is_open())
|
||||
frameRendered = true;
|
||||
}
|
||||
|
||||
void present() override {
|
||||
if (frameRendered)
|
||||
theDXContext.Present();
|
||||
frameRendered = false;
|
||||
}
|
||||
|
||||
void setFrameRendered() override {
|
||||
frameRendered = true;
|
||||
}
|
||||
|
||||
private:
|
||||
bool frameRendered = false;
|
||||
};
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
#include "hw/pvr/ta.h"
|
||||
#ifndef LIBRETRO
|
||||
#include "rend/gui.h"
|
||||
#include "opengl_driver.h"
|
||||
#else
|
||||
#include "vmu_xhair.h"
|
||||
#endif
|
||||
|
@ -1090,7 +1089,7 @@ void OSD_DRAW(bool clear_screen)
|
|||
glDrawArrays(GL_TRIANGLE_STRIP, i * 4, 4);
|
||||
|
||||
glCheck();
|
||||
((OpenGLDriver *)imguiDriver.get())->setFrameRendered();
|
||||
imguiDriver->setFrameRendered();
|
||||
#ifndef GLES2
|
||||
if (gl.gl_major >= 3)
|
||||
glBindVertexArray(0);
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
#include "glcache.h"
|
||||
#include "postprocess.h"
|
||||
#include "rend/shader_util.h"
|
||||
#ifndef LIBRETRO
|
||||
#include "rend/imgui_driver.h"
|
||||
#endif
|
||||
|
||||
#include <unordered_map>
|
||||
#include <glm/glm.hpp>
|
||||
|
@ -286,6 +289,9 @@ struct OpenGLRenderer : Renderer
|
|||
{
|
||||
if (!frameRendered)
|
||||
return false;
|
||||
#ifndef LIBRETRO
|
||||
imguiDriver->setFrameRendered();
|
||||
#endif
|
||||
frameRendered = false;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -154,12 +154,12 @@ void OpenGLDriver::newFrame()
|
|||
void OpenGLDriver::renderDrawData(ImDrawData* drawData)
|
||||
{
|
||||
ImGui_ImplOpenGL3_RenderDrawData(drawData);
|
||||
if (gui_is_open())
|
||||
frameRendered = true;
|
||||
}
|
||||
|
||||
void OpenGLDriver::present()
|
||||
{
|
||||
// FIXME we only rely on whether some imgui stuff has been rendered, which is kinda weak
|
||||
if (frameRendered)
|
||||
theGLContext.swap();
|
||||
frameRendered = false;
|
||||
|
|
|
@ -33,7 +33,7 @@ public:
|
|||
void renderDrawData(ImDrawData* drawData) override;
|
||||
void present() override;
|
||||
|
||||
void setFrameRendered() {
|
||||
void setFrameRendered() override {
|
||||
frameRendered = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ public:
|
|||
virtual void displayCrosshairs() {}
|
||||
|
||||
virtual void present() = 0;
|
||||
virtual void setFrameRendered() {}
|
||||
};
|
||||
|
||||
extern std::unique_ptr<ImGuiDriver> imguiDriver;
|
||||
|
|
Loading…
Reference in New Issue