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