From 9e813d98f1ca5e2e90d5c05227154d03c1e4dc6b Mon Sep 17 00:00:00 2001 From: Michael Fabian 'Xaymar' Dirks Date: Thu, 14 Dec 2017 00:22:27 +0100 Subject: [PATCH] gs-vertexbuffer: Update to new API adding flush_direct functionality This fixes the crashes on deleting a filter without requiring painful memory editing. --- source/gs-vertexbuffer.cpp | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/source/gs-vertexbuffer.cpp b/source/gs-vertexbuffer.cpp index 3f9c988..491ccbd 100644 --- a/source/gs-vertexbuffer.cpp +++ b/source/gs-vertexbuffer.cpp @@ -54,7 +54,7 @@ GS::VertexBuffer::VertexBuffer(uint32_t maximumVertices) { // Allocate GPU obs_enter_graphics(); - m_vertexbuffer = gs_vertexbuffer_create(&m_vertexbufferdata, GS_DYNAMIC); + m_vertexbuffer = gs_vertexbuffer_create(&m_vertexbufferdata, GS_DYNAMIC | GS_DUP_BUFFER); obs_leave_graphics(); if (!m_vertexbuffer) { throw std::runtime_error("Failed to create vertex buffer."); @@ -79,19 +79,6 @@ GS::VertexBuffer::~VertexBuffer() { if (m_vertexbuffer) { std::memset(&m_vertexbufferdata, 0, sizeof(m_vertexbufferdata)); - // Workaround API stupidity in obs-studio. - // See PR: https://github.com/jp9000/obs-studio/pull/993 - - if (gs_get_device_type() == GS_DEVICE_DIRECT3D_11) { - #ifdef _DEBUG - *(reinterpret_cast(m_vertexbuffer) + 14) = 0; - #else - *(reinterpret_cast(m_vertexbuffer) + 13) = 0; - #endif - } else { - //*(reinterpret_cast(m_vertexbuffer)+14) = 0; - } - obs_enter_graphics(); gs_vertexbuffer_destroy(m_vertexbuffer); obs_leave_graphics(); @@ -126,7 +113,7 @@ gs_vertbuffer_t* GS::VertexBuffer::get(bool refreshGPU) { m_vertexbufferdata.num_tex = m_uvwLayers; obs_enter_graphics(); - gs_vertexbuffer_flush(m_vertexbuffer); + gs_vertexbuffer_flush_direct(m_vertexbuffer, &m_vertexbufferdata); obs_leave_graphics(); } return m_vertexbuffer;