summaryrefslogtreecommitdiffstats
path: root/unityplugin/UnityEmulator
diff options
context:
space:
mode:
authorassiduous <assiduous@diligentgraphics.com>2019-12-30 17:39:31 +0000
committerassiduous <assiduous@diligentgraphics.com>2019-12-30 17:39:31 +0000
commitbe487b7459dd3fd3605d0bfa4af93724b63db635 (patch)
tree125bd11310ab35dec7b798eea50d387e6f80922a /unityplugin/UnityEmulator
parentUpdated release history (diff)
downloadDiligentEngine-be487b7459dd3fd3605d0bfa4af93724b63db635.tar.gz
DiligentEngine-be487b7459dd3fd3605d0bfa4af93724b63db635.zip
Unity emulator: fixed swap chain resize in GL, and also crahs on Mac
Diffstat (limited to 'unityplugin/UnityEmulator')
-rw-r--r--unityplugin/UnityEmulator/src/DiligentGraphicsAdapterGL.cpp53
1 files changed, 32 insertions, 21 deletions
diff --git a/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterGL.cpp b/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterGL.cpp
index 364a9d1..f899b5e 100644
--- a/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterGL.cpp
+++ b/unityplugin/UnityEmulator/src/DiligentGraphicsAdapterGL.cpp
@@ -30,26 +30,9 @@ public:
TBase(pRefCounters, pDevice, pDeviceContext,SCDesc),
m_UnityGraphicsGL(UnityGraphicsGL)
{
- TextureDesc DummyTexDesc;
- DummyTexDesc.Name = "Back buffer proxy";
- DummyTexDesc.Type = RESOURCE_DIM_TEX_2D;
- DummyTexDesc.Format = SCDesc.ColorBufferFormat;
- DummyTexDesc.Width = SCDesc.Width;
- DummyTexDesc.Height = SCDesc.Height;
- DummyTexDesc.BindFlags = BIND_RENDER_TARGET;
- RefCntAutoPtr<IRenderDeviceGL> pDeviceGL(pDevice, IID_RenderDeviceGL);
- RefCntAutoPtr<ITexture> pDummyRenderTarget;
- pDeviceGL->CreateDummyTexture(DummyTexDesc, RESOURCE_STATE_RENDER_TARGET, &pDummyRenderTarget);
- m_pRTV = pDummyRenderTarget->GetDefaultView(TEXTURE_VIEW_RENDER_TARGET);
-
- DummyTexDesc.Name = "Depth buffer proxy";
- DummyTexDesc.Format = SCDesc.DepthBufferFormat;
- DummyTexDesc.BindFlags = BIND_DEPTH_STENCIL;
- RefCntAutoPtr<ITexture> pDummyDepthBuffer;
- pDeviceGL->CreateDummyTexture(DummyTexDesc, RESOURCE_STATE_DEPTH_WRITE, &pDummyDepthBuffer);
- m_pDSV = pDummyDepthBuffer->GetDefaultView(TEXTURE_VIEW_DEPTH_STENCIL);
+ CreateDummyBuffers();
}
-
+
virtual void Present(Uint32 SyncInterval)override final
{
UNEXPECTED("Present is not expected to be called directly");
@@ -67,18 +50,46 @@ public:
virtual void Resize(Uint32 NewWidth, Uint32 NewHeight)override final
{
- TBase::Resize(NewWidth, NewHeight, 0);
+ if (TBase::Resize(NewWidth, NewHeight, 0))
+ {
+ CreateDummyBuffers();
+ }
}
virtual GLuint GetDefaultFBO()const override final
{
return m_UnityGraphicsGL.GetGraphicsImpl()->GetDefaultFBO();
}
-
+
virtual ITextureView* GetCurrentBackBufferRTV()override final{return m_pRTV;}
virtual ITextureView* GetDepthBufferDSV()override final{return m_pDSV;}
private:
+ void CreateDummyBuffers()
+ {
+ if (m_SwapChainDesc.Width == 0 || m_SwapChainDesc.Height == 0)
+ return;
+
+ TextureDesc DummyTexDesc;
+ DummyTexDesc.Name = "Back buffer proxy";
+ DummyTexDesc.Type = RESOURCE_DIM_TEX_2D;
+ DummyTexDesc.Format = m_SwapChainDesc.ColorBufferFormat;
+ DummyTexDesc.Width = m_SwapChainDesc.Width;
+ DummyTexDesc.Height = m_SwapChainDesc.Height;
+ DummyTexDesc.BindFlags = BIND_RENDER_TARGET;
+ RefCntAutoPtr<IRenderDeviceGL> pDeviceGL(m_pRenderDevice, IID_RenderDeviceGL);
+ RefCntAutoPtr<ITexture> pDummyRenderTarget;
+ pDeviceGL->CreateDummyTexture(DummyTexDesc, RESOURCE_STATE_RENDER_TARGET, &pDummyRenderTarget);
+ m_pRTV = pDummyRenderTarget->GetDefaultView(TEXTURE_VIEW_RENDER_TARGET);
+
+ DummyTexDesc.Name = "Depth buffer proxy";
+ DummyTexDesc.Format = m_SwapChainDesc.DepthBufferFormat;
+ DummyTexDesc.BindFlags = BIND_DEPTH_STENCIL;
+ RefCntAutoPtr<ITexture> pDummyDepthBuffer;
+ pDeviceGL->CreateDummyTexture(DummyTexDesc, RESOURCE_STATE_DEPTH_WRITE, &pDummyDepthBuffer);
+ m_pDSV = pDummyDepthBuffer->GetDefaultView(TEXTURE_VIEW_DEPTH_STENCIL);
+ }
+
const UnityGraphicsGLCoreES_Emulator& m_UnityGraphicsGL;
RefCntAutoPtr<ITextureView> m_pRTV;
RefCntAutoPtr<ITextureView> m_pDSV;