Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #11279 from tellowkrinkle/GlobalStateIsGreat
VideoBackends:OGL: Creating vertex formats shouldn't unbind anything
  • Loading branch information
Pokechu22 committed Nov 29, 2022
2 parents 44f8b8c + e3cc420 commit 421af09
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 1 deletion.
4 changes: 3 additions & 1 deletion Source/Core/VideoBackends/OGL/OGLNativeVertexFormat.cpp
Expand Up @@ -59,7 +59,6 @@ GLVertexFormat::GLVertexFormat(const PortableVertexDeclaration& vtx_decl)

glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
ProgramShaderCache::BindVertexFormat(this);

// the element buffer is bound directly to the vao, so we must it set for every vao
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vm->GetIndexBufferHandle());
Expand All @@ -77,6 +76,9 @@ GLVertexFormat::GLVertexFormat(const PortableVertexDeclaration& vtx_decl)
SetPointer(ShaderAttrib::TexCoord0 + i, vertex_stride, vtx_decl.texcoords[i]);

SetPointer(ShaderAttrib::PositionMatrix, vertex_stride, vtx_decl.posmtx);

// Other code shouldn't have to worry about its vertex formats being randomly unbound
ProgramShaderCache::ReBindVertexFormat();
}

GLVertexFormat::~GLVertexFormat()
Expand Down
6 changes: 6 additions & 0 deletions Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
Expand Up @@ -496,6 +496,12 @@ void ProgramShaderCache::BindVertexFormat(const GLVertexFormat* vertex_format)
s_last_VAO = new_VAO;
}

void ProgramShaderCache::ReBindVertexFormat()
{
if (s_last_VAO)
glBindVertexArray(s_last_VAO);
}

bool ProgramShaderCache::IsValidVertexFormatBound()
{
return s_last_VAO != 0 && s_last_VAO != s_attributeless_VAO;
Expand Down
1 change: 1 addition & 0 deletions Source/Core/VideoBackends/OGL/ProgramShaderCache.h
Expand Up @@ -69,6 +69,7 @@ class ProgramShaderCache
{
public:
static void BindVertexFormat(const GLVertexFormat* vertex_format);
static void ReBindVertexFormat();
static bool IsValidVertexFormatBound();
static void InvalidateVertexFormat();
static void InvalidateVertexFormatIfBound(GLuint vao);
Expand Down

0 comments on commit 421af09

Please sign in to comment.