diff --git a/libobs-d3d11/d3d11-subsystem.hpp b/libobs-d3d11/d3d11-subsystem.hpp index 24117ee00..ae97a8397 100644 --- a/libobs-d3d11/d3d11-subsystem.hpp +++ b/libobs-d3d11/d3d11-subsystem.hpp @@ -256,6 +256,15 @@ struct gs_vertex_buffer : gs_obj { void BuildBuffers(); + inline void Release() + { + vertexBuffer.Release(); + normalBuffer.Release(); + colorBuffer.Release(); + tangentBuffer.Release(); + uvBuffers.clear(); + } + gs_vertex_buffer(gs_device_t *device, struct gs_vb_data *data, uint32_t flags); }; @@ -281,6 +290,8 @@ struct gs_index_buffer : gs_obj { void InitBuffer(); + inline void Release() {indexBuffer.Release();} + gs_index_buffer(gs_device_t *device, enum gs_index_type type, void *indices, size_t num, uint32_t flags); }; @@ -343,6 +354,15 @@ struct gs_texture_2d : gs_texture { void InitRenderTargets(); void BackupTexture(const uint8_t **data); + inline void Release() + { + texture.Release(); + for (auto &rt : renderTarget) + rt.Release(); + gdiSurface.Release(); + shaderRes.Release(); + } + inline gs_texture_2d() : gs_texture (GS_TEXTURE_2D, 0, GS_UNKNOWN) { @@ -369,6 +389,12 @@ struct gs_zstencil_buffer : gs_obj { void InitBuffer(); + inline void Release() + { + texture.Release(); + view.Release(); + } + inline gs_zstencil_buffer() : width (0), height (0), @@ -388,6 +414,11 @@ struct gs_stage_surface : gs_obj { gs_color_format format; DXGI_FORMAT dxgiFormat; + inline void Release() + { + texture.Release(); + } + gs_stage_surface(gs_device_t *device, uint32_t width, uint32_t height, gs_color_format colorFormat); }; @@ -397,6 +428,8 @@ struct gs_sampler_state : gs_obj { D3D11_SAMPLER_DESC sd = {}; gs_sampler_info info; + inline void Release() {state.Release();} + gs_sampler_state(gs_device_t *device, const gs_sampler_info *info); }; @@ -482,6 +515,13 @@ struct gs_vertex_shader : gs_shader { bool hasTangents; uint32_t nTexUnits; + inline void Release() + { + shader.Release(); + layout.Release(); + constants.Release(); + } + inline uint32_t NumBuffersExpected() const { uint32_t count = nTexUnits+1; @@ -505,6 +545,11 @@ struct gs_duplicator : gs_obj { void Start(); + inline void Release() + { + duplicator.Release(); + } + gs_duplicator(gs_device_t *device, int monitor_idx); ~gs_duplicator(); }; @@ -513,6 +558,12 @@ struct gs_pixel_shader : gs_shader { ComPtr shader; vector> samplers; + inline void Release() + { + shader.Release(); + constants.Release(); + } + inline void GetSamplerStates(ID3D11SamplerState **states) { size_t i; @@ -541,6 +592,13 @@ struct gs_swap_chain : gs_obj { void Resize(uint32_t cx, uint32_t cy); void Init(); + inline void Release() + { + target.Release(); + zs.Release(); + swap.Release(); + } + gs_swap_chain(gs_device *device, const gs_init_data *data); }; @@ -579,6 +637,11 @@ struct SavedBlendState : BlendState { ComPtr state; D3D11_BLEND_DESC bd; + inline void Release() + { + state.Release(); + } + inline SavedBlendState(const BlendState &val, D3D11_BLEND_DESC &desc) : BlendState(val), bd(desc) { @@ -629,6 +692,11 @@ struct SavedZStencilState : ZStencilState { ComPtr state; D3D11_DEPTH_STENCIL_DESC dsd; + inline void Release() + { + state.Release(); + } + inline SavedZStencilState(const ZStencilState &val, D3D11_DEPTH_STENCIL_DESC desc) : ZStencilState (val), @@ -657,6 +725,11 @@ struct SavedRasterState : RasterState { ComPtr state; D3D11_RASTERIZER_DESC rd; + inline void Release() + { + state.Release(); + } + inline SavedRasterState(const RasterState &val, D3D11_RASTERIZER_DESC &desc) : RasterState (val),