move vao from WorkspaceSceneOpenGL to GlxContext

EglContext already had a vao, and it makes more sense for the context to
take care of this than the scene
wilder/Plasma/6.2
Xaver Hugl 2 years ago
parent 7e095412aa
commit 8db8dd24bf
  1. 10
      src/backends/x11/standalone/glxcontext.cpp
  2. 1
      src/backends/x11/standalone/glxcontext.h
  3. 5
      src/scene/workspacescene_opengl.cpp

@ -21,10 +21,20 @@ GlxContext::GlxContext(::Display *display, GLXWindow window, GLXContext handle)
, m_window(window) , m_window(window)
, m_handle(handle) , m_handle(handle)
{ {
// It is not legal to not have a vertex array object bound in a core context
// to make code handling old and new OpenGL versions easier, bind a dummy vao that's used for everything
if (!isOpenglES() && hasOpenglExtension(QByteArrayLiteral("GL_ARB_vertex_array_object"))) {
glGenVertexArrays(1, &m_vao);
glBindVertexArray(m_vao);
}
} }
GlxContext::~GlxContext() GlxContext::~GlxContext()
{ {
if (m_vao) {
makeCurrent();
glDeleteVertexArrays(1, &m_vao);
}
glXDestroyContext(m_display, m_handle); glXDestroyContext(m_display, m_handle);
} }

@ -30,6 +30,7 @@ private:
::Display *const m_display; ::Display *const m_display;
const GLXWindow m_window; const GLXWindow m_window;
const GLXContext m_handle; const GLXContext m_handle;
uint32_t m_vao = 0;
}; };
} }

@ -43,11 +43,6 @@ WorkspaceSceneOpenGL::WorkspaceSceneOpenGL(OpenGLBackend *backend)
: WorkspaceScene(std::make_unique<ItemRendererOpenGL>()) : WorkspaceScene(std::make_unique<ItemRendererOpenGL>())
, m_backend(backend) , m_backend(backend)
{ {
// It is not legal to not have a vertex array object bound in a core context
if (!GLPlatform::instance()->isGLES() && hasGLExtension(QByteArrayLiteral("GL_ARB_vertex_array_object"))) {
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
}
} }
WorkspaceSceneOpenGL::~WorkspaceSceneOpenGL() WorkspaceSceneOpenGL::~WorkspaceSceneOpenGL()

Loading…
Cancel
Save