Skip to content
Permalink
Browse files
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.
@@ -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());
@@ -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()
@@ -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;
@@ -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);

0 comments on commit 421af09

Please sign in to comment.