diff --git a/Source/Core/VideoBackends/OGL/GLUtil.cpp b/Source/Core/VideoBackends/OGL/GLUtil.cpp index d367c370bf..dddc299fb9 100644 --- a/Source/Core/VideoBackends/OGL/GLUtil.cpp +++ b/Source/Core/VideoBackends/OGL/GLUtil.cpp @@ -115,12 +115,14 @@ GLuint OpenGL_CompileProgram(const char* vertexShader, const char* fragmentShade return programID; } -static void CreateAttributelessVAO() +void OpenGL_CreateAttributelessVAO() { glGenVertexArrays(1, &attributelessVAO); + _dbg_assert_msg_(VIDEO, attributelessVAO != 0, "Attributeless VAO should have been created successfully.") // In a compatibility context, we require a valid, bound array buffer. glGenBuffers(1, &attributelessVBO); + _dbg_assert_msg_(VIDEO, attributelessVBO != 0, "Attributeless VBO should have been created successfully.") // Initialize the buffer with nothing. glBindBuffer(GL_ARRAY_BUFFER, attributelessVBO); @@ -132,16 +134,14 @@ static void CreateAttributelessVAO() void OpenGL_BindAttributelessVAO() { - if (attributelessVAO == 0) - CreateAttributelessVAO(); - + _dbg_assert_msg_(VIDEO, attributelessVAO != 0, "Attributeless VAO should have already been created.") glBindVertexArray(attributelessVAO); - glBindBuffer(GL_ARRAY_BUFFER, attributelessVBO); } void OpenGL_DeleteAttributelessVAO() { - if (attributelessVAO) + _dbg_assert_msg_(VIDEO, attributelessVAO != 0, "Attributeless VAO should have already been created.") + if (attributelessVAO != 0) { glDeleteVertexArrays(1, &attributelessVAO); glDeleteBuffers(1, &attributelessVBO); diff --git a/Source/Core/VideoBackends/OGL/GLUtil.h b/Source/Core/VideoBackends/OGL/GLUtil.h index 3d7e562971..13052be293 100644 --- a/Source/Core/VideoBackends/OGL/GLUtil.h +++ b/Source/Core/VideoBackends/OGL/GLUtil.h @@ -18,11 +18,14 @@ void InitInterface(); // Helpers GLuint OpenGL_CompileProgram(const char *vertexShader, const char *fragmentShader); -// Binds (and creates, if necessary) a VAO and VBO suitable for attributeless rendering. -void OpenGL_BindAttributelessVAO(); -// Deletes any existing VAO / VBO that has been created. +// Creates and deletes a VAO and VBO suitable for attributeless rendering. +// Called by the Renderer. +void OpenGL_CreateAttributelessVAO(); void OpenGL_DeleteAttributelessVAO(); +// Binds the VAO suitable for attributeless rendering. +void OpenGL_BindAttributelessVAO(); + // this should be removed in future, but as long as glsl is unstable, we should really read this messages #if defined(_DEBUG) || defined(DEBUGFAST) #define DEBUG_GLSL 1 diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index c14753039d..853711dc18 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -714,6 +714,8 @@ void Renderer::Init() " ocol0 = c;\n" "}\n"); + OpenGL_CreateAttributelessVAO(); + // creating buffers glGenBuffers(1, &s_ShowEFBCopyRegions_VBO); glGenVertexArrays(1, &s_ShowEFBCopyRegions_VAO);