From 0df9e33b6be8944a5e484b87756756141d10d781 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 31 Jan 2019 18:30:18 +0000 Subject: [PATCH] Bind a dummy texbuffer for GL render texture, as macOS seems to need it --- renderdoc/driver/gl/gl_debug.cpp | 14 ++++++++++++++ renderdoc/driver/gl/gl_rendertexture.cpp | 7 +++++++ renderdoc/driver/gl/gl_replay.h | 3 +++ 3 files changed, 24 insertions(+) diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index 5bd67eda7..96cf01a22 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -637,6 +637,17 @@ void GLReplay::InitDebugData() drv.glGenFramebuffers(1, &DebugData.pickPixelFBO); drv.glBindFramebuffer(eGL_FRAMEBUFFER, DebugData.pickPixelFBO); + drv.glGenBuffers(1, &DebugData.dummyTexBufferStore); + drv.glBindBuffer(eGL_TEXTURE_BUFFER, DebugData.dummyTexBufferStore); + drv.glNamedBufferDataEXT(DebugData.dummyTexBufferStore, 32, NULL, eGL_STATIC_DRAW); + drv.glBindBuffer(eGL_TEXTURE_BUFFER, 0); + + drv.glGenTextures(1, &DebugData.dummyTexBuffer); + drv.glBindTexture(eGL_TEXTURE_BUFFER, DebugData.dummyTexBuffer); + drv.glTextureBufferEXT(DebugData.dummyTexBuffer, eGL_TEXTURE_BUFFER, eGL_RGBA32F, + DebugData.dummyTexBufferStore); + drv.glBindTexture(eGL_TEXTURE_BUFFER, 0); + drv.glGenTextures(1, &DebugData.pickPixelTex); drv.glBindTexture(eGL_TEXTURE_2D, DebugData.pickPixelTex); @@ -1081,6 +1092,9 @@ void GLReplay::DeleteDebugData() drv.glDeleteFramebuffers(1, &DebugData.pickPixelFBO); drv.glDeleteTextures(1, &DebugData.pickPixelTex); + drv.glDeleteTextures(1, &DebugData.dummyTexBuffer); + drv.glDeleteBuffers(1, &DebugData.dummyTexBufferStore); + drv.glDeleteBuffers(1, &DebugData.genericUBO); drv.glDeleteFramebuffers(1, &DebugData.customFBO); diff --git a/renderdoc/driver/gl/gl_rendertexture.cpp b/renderdoc/driver/gl/gl_rendertexture.cpp index 368fce79e..7b229020e 100644 --- a/renderdoc/driver/gl/gl_rendertexture.cpp +++ b/renderdoc/driver/gl/gl_rendertexture.cpp @@ -236,6 +236,13 @@ bool GLReplay::RenderTextureInternal(TextureDisplay cfg, int flags) } } + // bind a dummy texbuffer - some drivers (macOS) have trouble when a buffer isn't bound. + if(resType != RESTYPE_TEXBUFFER && DebugData.dummyTexBuffer) + { + drv.glActiveTexture((RDCGLenum)(eGL_TEXTURE0 + RESTYPE_TEXBUFFER)); + drv.glBindTexture(eGL_TEXTURE_BUFFER, DebugData.dummyTexBuffer); + } + drv.glActiveTexture((RDCGLenum)(eGL_TEXTURE0 + resType)); drv.glBindTexture(target, texname); diff --git a/renderdoc/driver/gl/gl_replay.h b/renderdoc/driver/gl/gl_replay.h index 5d39a40f3..e30d38504 100644 --- a/renderdoc/driver/gl/gl_replay.h +++ b/renderdoc/driver/gl/gl_replay.h @@ -363,6 +363,9 @@ private: GLuint pickPixelTex; GLuint pickPixelFBO; + GLuint dummyTexBuffer; + GLuint dummyTexBufferStore; + GLuint quadoverdrawFragShader; GLuint quadoverdrawResolveProg;