diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2018-12-02 17:39:49 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2018-12-02 17:39:49 +0000 |
| commit | 466dff5b223bd3f4af7963fec546ff179a745556 (patch) | |
| tree | bfb10a46716aec66eb38e67574718c4c230d419c /Graphics/GraphicsEngineOpenGL | |
| parent | Added explicit state transition control flags to CLEAR_DEPTH_STENCIL_FLAGS (diff) | |
| download | DiligentCore-466dff5b223bd3f4af7963fec546ff179a745556.tar.gz DiligentCore-466dff5b223bd3f4af7963fec546ff179a745556.zip | |
Added explicit state transition control to UpdateBuffer and UpdateTexture commands
Diffstat (limited to 'Graphics/GraphicsEngineOpenGL')
3 files changed, 30 insertions, 9 deletions
diff --git a/Graphics/GraphicsEngineOpenGL/include/DeviceContextGLImpl.h b/Graphics/GraphicsEngineOpenGL/include/DeviceContextGLImpl.h index a2a1f0be..3cd10b90 100644 --- a/Graphics/GraphicsEngineOpenGL/include/DeviceContextGLImpl.h +++ b/Graphics/GraphicsEngineOpenGL/include/DeviceContextGLImpl.h @@ -29,17 +29,17 @@ #include "GLContextState.h" #include "GLObjectWrapper.h" #include "BufferGLImpl.h" -#include "TextureViewGLImpl.h" +#include "TextureBaseGL.h" #include "PipelineStateGLImpl.h" namespace Diligent { /// Implementation of the Diligent::IDeviceContextGL interface -class DeviceContextGLImpl final : public DeviceContextBase<IDeviceContextGL, BufferGLImpl, TextureViewGLImpl, PipelineStateGLImpl> +class DeviceContextGLImpl final : public DeviceContextBase<IDeviceContextGL, BufferGLImpl, TextureBaseGL, PipelineStateGLImpl> { public: - using TDeviceContextBase = DeviceContextBase<IDeviceContextGL, BufferGLImpl, TextureViewGLImpl, PipelineStateGLImpl>; + using TDeviceContextBase = DeviceContextBase<IDeviceContextGL, BufferGLImpl, TextureBaseGL, PipelineStateGLImpl>; DeviceContextGLImpl( IReferenceCounters *pRefCounters, class RenderDeviceGLImpl *pDeviceGL, bool bIsDeferred ); @@ -78,7 +78,11 @@ public: virtual void Flush()override final; - virtual void UpdateBuffer(IBuffer *pBuffer, Uint32 Offset, Uint32 Size, const PVoid pData)override final; + virtual void UpdateBuffer(IBuffer* pBuffer, + Uint32 Offset, + Uint32 Size, + const PVoid pData, + RESOURCE_STATE_TRANSITION_MODE StateTransitionMode)override final; virtual void CopyBuffer(IBuffer *pSrcBuffer, Uint32 SrcOffset, IBuffer *pDstBuffer, Uint32 DstOffset, Uint32 Size)override final; @@ -86,7 +90,13 @@ public: virtual void UnmapBuffer(IBuffer* pBuffer)override final; - virtual void UpdateTexture(ITexture* pTexture, Uint32 MipLevel, Uint32 Slice, const Box& DstBox, const TextureSubResData& SubresData)override final; + virtual void UpdateTexture(ITexture* pTexture, + Uint32 MipLevel, + Uint32 Slice, + const Box& DstBox, + const TextureSubResData& SubresData, + RESOURCE_STATE_TRANSITION_MODE SrcBufferStateTransitionMode, + RESOURCE_STATE_TRANSITION_MODE TextureStateTransitionMode)override final; virtual void CopyTexture(ITexture* pSrcTexture, Uint32 SrcMipLevel, diff --git a/Graphics/GraphicsEngineOpenGL/include/TextureBaseGL.h b/Graphics/GraphicsEngineOpenGL/include/TextureBaseGL.h index 934e0c8e..88302ace 100644 --- a/Graphics/GraphicsEngineOpenGL/include/TextureBaseGL.h +++ b/Graphics/GraphicsEngineOpenGL/include/TextureBaseGL.h @@ -42,6 +42,7 @@ class TextureBaseGL : public TextureBase<ITextureGL, RenderDeviceGLImpl, Texture { public: using TTextureBase = TextureBase<ITextureGL, RenderDeviceGLImpl, TextureViewGLImpl, FixedBlockMemoryAllocator>; + using ViewImplType = TextureViewGLImpl; TextureBaseGL(IReferenceCounters *pRefCounters, FixedBlockMemoryAllocator& TexViewObjAllocator, diff --git a/Graphics/GraphicsEngineOpenGL/src/DeviceContextGLImpl.cpp b/Graphics/GraphicsEngineOpenGL/src/DeviceContextGLImpl.cpp index a20685f3..f4e61e6f 100644 --- a/Graphics/GraphicsEngineOpenGL/src/DeviceContextGLImpl.cpp +++ b/Graphics/GraphicsEngineOpenGL/src/DeviceContextGLImpl.cpp @@ -1011,9 +1011,13 @@ namespace Diligent return true; } - void DeviceContextGLImpl::UpdateBuffer(IBuffer* pBuffer, Uint32 Offset, Uint32 Size, const PVoid pData) + void DeviceContextGLImpl::UpdateBuffer(IBuffer* pBuffer, + Uint32 Offset, + Uint32 Size, + const PVoid pData, + RESOURCE_STATE_TRANSITION_MODE StateTransitionMode) { - TDeviceContextBase::UpdateBuffer(pBuffer, Offset, Size, pData); + TDeviceContextBase::UpdateBuffer(pBuffer, Offset, Size, pData, StateTransitionMode); auto* pBufferGL = ValidatedCast<BufferGLImpl>(pBuffer); pBufferGL->UpdateData(m_ContextState, Offset, Size, pData); @@ -1042,9 +1046,15 @@ namespace Diligent pBufferGL->Unmap(); } - void DeviceContextGLImpl::UpdateTexture(ITexture* pTexture, Uint32 MipLevel, Uint32 Slice, const Box& DstBox, const TextureSubResData& SubresData) + void DeviceContextGLImpl::UpdateTexture(ITexture* pTexture, + Uint32 MipLevel, + Uint32 Slice, + const Box& DstBox, + const TextureSubResData& SubresData, + RESOURCE_STATE_TRANSITION_MODE SrcBufferStateTransitionMode, + RESOURCE_STATE_TRANSITION_MODE TextureStateTransitionMode) { - TDeviceContextBase::UpdateTexture( pTexture, MipLevel, Slice, DstBox, SubresData ); + TDeviceContextBase::UpdateTexture( pTexture, MipLevel, Slice, DstBox, SubresData, SrcBufferStateTransitionMode, TextureStateTransitionMode ); auto* pTexGL = ValidatedCast<TextureBaseGL>(pTexture); pTexGL->UpdateData(m_ContextState, MipLevel, Slice, DstBox, SubresData); } |
