From a2703d1a867b55dc32ee4b94f0d972f5c5e6174b Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 13:29:09 -0700 Subject: [PATCH 01/23] CScreensaverBiof: use vao Signed-off-by: Lukas Rusak --- src/biof/main.cpp | 11 +++++++++++ src/biof/main.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/biof/main.cpp b/src/biof/main.cpp index ad7241039..fd76e6b32 100644 --- a/src/biof/main.cpp +++ b/src/biof/main.cpp @@ -77,6 +77,9 @@ bool CScreensaverBiof::Start() if (!LoadShaderFiles(vertShader, fraqShader) || !CompileAndLink()) return false; + glGenVertexArrays(1, &m_vao); + glBindVertexArray(m_vao); + glGenBuffers(4, m_vboHandle); m_normal.clear(); @@ -163,6 +166,8 @@ bool CScreensaverBiof::Start() glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindVertexArray(0); + m_startFrameTime = std::chrono::duration(std::chrono::system_clock::now().time_since_epoch()).count(); m_startOK = true; return true; @@ -180,6 +185,8 @@ void CScreensaverBiof::Stop() glDeleteBuffers(4, m_vboHandle); memset(m_vboHandle, 0, sizeof(m_vboHandle)); + glBindVertexArray(0); + glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); } @@ -189,6 +196,8 @@ void CScreensaverBiof::Render() if (!m_startOK) return; + glBindVertexArray(m_vao); + if ((m_geometry == SPHERES) || (m_geometry == BIGSPHERES)) glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); @@ -293,6 +302,8 @@ void CScreensaverBiof::Render() glDisableVertexAttribArray(m_hVertex); glDisableVertexAttribArray(m_hColor); + glBindVertexArray(0); + if ((m_geometry == SPHERES) || (m_geometry == BIGSPHERES)) glDisable(GL_CULL_FACE); diff --git a/src/biof/main.h b/src/biof/main.h index 09edb4271..475cb44cf 100644 --- a/src/biof/main.h +++ b/src/biof/main.h @@ -89,6 +89,8 @@ class ATTR_DLL_LOCAL CScreensaverBiof bool m_startOK = false; + GLuint m_vao = -1; + GLuint m_vboHandle[4] = {0}; int m_pointsQty, m_linesQty; From 6e7d481fab64254b3d9d33762516a33f05aba0e6 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 13:32:15 -0700 Subject: [PATCH 02/23] CScreensaverBusySpheres: use vao Signed-off-by: Lukas Rusak --- src/busyspheres/main.cpp | 8 ++++++++ src/busyspheres/main.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/busyspheres/main.cpp b/src/busyspheres/main.cpp index 9001a86d9..bf25781f4 100644 --- a/src/busyspheres/main.cpp +++ b/src/busyspheres/main.cpp @@ -66,6 +66,8 @@ bool CScreensaverBusySpheres::Start() } m_texture_id = kodi::gui::gl::Load(Texture); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); glGenBuffers(1, &m_indexVBO); @@ -92,6 +94,8 @@ void CScreensaverBusySpheres::Stop() m_vertexVBO = 0; glDeleteBuffers(1, &m_indexVBO); m_indexVBO = 0; + + glDeleteVertexArrays(1, &m_vao); } void CScreensaverBusySpheres::Render() @@ -101,6 +105,8 @@ void CScreensaverBusySpheres::Render() if (!m_startOK) return; + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexVBO); glBindTexture(GL_TEXTURE_2D, m_texture_id); @@ -269,6 +275,8 @@ void CScreensaverBusySpheres::Render() glDisableVertexAttribArray(m_aPosition); glDisableVertexAttribArray(m_aColor); glDisableVertexAttribArray(m_aCoord); + + glBindVertexArray(0); } void CScreensaverBusySpheres::OnCompiledAndLinked() diff --git a/src/busyspheres/main.h b/src/busyspheres/main.h index 75766b8c6..6bf5aa532 100644 --- a/src/busyspheres/main.h +++ b/src/busyspheres/main.h @@ -76,6 +76,7 @@ class ATTR_DLL_LOCAL CScreensaverBusySpheres GLint m_aCoord = -1; GLint m_aColor = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_indexVBO = 0; From 336cda806e99ec972ecabb2cda83516790f4d43d Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 14:01:08 -0700 Subject: [PATCH 03/23] CScreensaverCyclone: use vao Signed-off-by: Lukas Rusak --- src/cyclone/main.cpp | 13 +++++++++++-- src/cyclone/main.h | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/cyclone/main.cpp b/src/cyclone/main.cpp index 64a9d56d1..466a47b2c 100644 --- a/src/cyclone/main.cpp +++ b/src/cyclone/main.cpp @@ -544,8 +544,9 @@ bool CScreensaverCyclone::Start() m_particles[j] = new CParticle(m_cyclones[i]); } + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); m_lastTime = std::chrono::duration(std::chrono::system_clock::now().time_since_epoch()).count(); m_startOK = true; @@ -559,10 +560,11 @@ void CScreensaverCyclone::Stop() m_startOK = false; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; + glDeleteVertexArrays(1, &m_vao); + glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); @@ -584,6 +586,9 @@ void CScreensaverCyclone::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glVertexAttribPointer(m_hVertex, 3, GL_FLOAT, GL_TRUE, sizeof(sLight), BUFFER_OFFSET(offsetof(sLight, vertex))); glEnableVertexAttribArray(m_hVertex); @@ -617,6 +622,10 @@ void CScreensaverCyclone::Render() glDisableVertexAttribArray(m_hVertex); glDisableVertexAttribArray(m_hNormal); glDisableVertexAttribArray(m_hColor); + + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverCyclone::DrawEntry(int primitive, const sLight* data, unsigned int size) diff --git a/src/cyclone/main.h b/src/cyclone/main.h index 455a50ebf..5f7f12a7c 100644 --- a/src/cyclone/main.h +++ b/src/cyclone/main.h @@ -91,6 +91,7 @@ class ATTR_DLL_LOCAL CScreensaverCyclone GLint m_hVertex = -1; GLint m_hColor = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; CCyclone **m_cyclones; From ca89886124a07c963c579c0e141b8866b7f37650 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 14:04:49 -0700 Subject: [PATCH 04/23] CScreensaverColorFire: use vao Signed-off-by: Lukas Rusak --- src/colorfire/main.cpp | 12 +++++++++++- src/colorfire/main.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/colorfire/main.cpp b/src/colorfire/main.cpp index 8725c6e20..e314ecb55 100644 --- a/src/colorfire/main.cpp +++ b/src/colorfire/main.cpp @@ -142,6 +142,8 @@ bool CScreensaverColorFire::Start() m_light[3].coord = glm::vec2(0.0f, 1.0f); m_light[3].vertex = glm::vec3(-1.0f, 1.0f, 0.0f); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); glGenBuffers(1, &m_indexVBO); @@ -157,13 +159,14 @@ void CScreensaverColorFire::Stop() m_startOK = false; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; glDeleteBuffers(1, &m_indexVBO); m_indexVBO = 0; glDeleteTextures(1, &m_texture); m_texture = 0; + + glDeleteVertexArrays(1, &m_vao); } void CScreensaverColorFire::Render() @@ -177,6 +180,8 @@ void CScreensaverColorFire::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); + glBlendFunc(GL_SRC_ALPHA, GL_ONE); glEnable(GL_BLEND); @@ -220,6 +225,11 @@ void CScreensaverColorFire::Render() glDisableVertexAttribArray(m_hColor); glDisableVertexAttribArray(m_hCoord); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); + glBlendFunc(GL_ONE, GL_ZERO); glDisable(GL_BLEND); } diff --git a/src/colorfire/main.h b/src/colorfire/main.h index 01f991ff5..e543cecbc 100644 --- a/src/colorfire/main.h +++ b/src/colorfire/main.h @@ -60,6 +60,7 @@ class ATTR_DLL_LOCAL CScreensaverColorFire GLint m_hCoord = -1; GLint m_hColor = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_indexVBO = 0; GLuint m_texture = 0; From 8c9006a0f6cca808b92e1d62c033108fa8ac0e26 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 14:20:43 -0700 Subject: [PATCH 05/23] CScreensaverDrempels: use vao Signed-off-by: Lukas Rusak --- src/drempels/main.cpp | 16 ++++++++++++---- src/drempels/main.h | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/drempels/main.cpp b/src/drempels/main.cpp index 88e59b4c4..14dd05c66 100644 --- a/src/drempels/main.cpp +++ b/src/drempels/main.cpp @@ -188,10 +188,10 @@ bool CScreensaverDrempels::Start() m_quad[3].coord = glm::vec2(1.0f, 0.0f); m_quad[3].vertex = glm::vec3(1.0f, 0.0f, 0.0f); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glGenBuffers(1, &m_indexVBO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexVBO); RandomizeStartValues(); @@ -215,10 +215,8 @@ void CScreensaverDrempels::Stop() delete [] m_cell; delete [] m_buf; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_indexVBO); m_indexVBO = 0; glDeleteTextures(1, &m_tex); @@ -231,6 +229,8 @@ void CScreensaverDrempels::Stop() m_uvtex = 0; glDeleteTextures(1, &m_btex); m_btex = 0; + + glDeleteVertexArrays(1, &m_vao); } void CScreensaverDrempels::Render() @@ -244,6 +244,8 @@ void CScreensaverDrempels::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); @@ -636,10 +638,16 @@ void CScreensaverDrempels::Render() DrawQuads(glm::vec4(1.0f, 1.0f, 1.0f, 1.0f)); } + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + glDisableVertexAttribArray(m_hVertex); glDisableVertexAttribArray(m_hColor); glDisableVertexAttribArray(m_hCoord); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); + glBlendFunc(GL_ONE, GL_ZERO); } diff --git a/src/drempels/main.h b/src/drempels/main.h index 78e111d2a..6ec36462a 100644 --- a/src/drempels/main.h +++ b/src/drempels/main.h @@ -85,6 +85,7 @@ class ATTR_DLL_LOCAL CScreensaverDrempels GLint m_hCoord = -1; GLint m_hColor = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_indexVBO = 0; From 41b227dc0252b056a15f9ecdb01cb858ea6b3a51 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 14:57:32 -0700 Subject: [PATCH 06/23] CScreensaverEuphoria: use vao Signed-off-by: Lukas Rusak --- src/euphoria/main.cpp | 12 ++++++++++-- src/euphoria/main.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/euphoria/main.cpp b/src/euphoria/main.cpp index 1b0c5389c..bec41cfc0 100644 --- a/src/euphoria/main.cpp +++ b/src/euphoria/main.cpp @@ -621,8 +621,9 @@ bool CScreensaverEuphoria::Start() m_wisps = new CWisp[g_settings.dWisps]; m_backwisps = new CWisp[g_settings.dBackground]; + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); m_feedbackIntensity = float(g_settings.dFeedback) / 101.0f; m_lastTime = std::chrono::duration(std::chrono::system_clock::now().time_since_epoch()).count(); @@ -638,10 +639,11 @@ void CScreensaverEuphoria::Stop() m_startOK = false; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; + glDeleteVertexArrays(1, &m_vao); + glViewport(m_viewport.x, m_viewport.y, m_viewport.width, m_viewport.height); glDisable(GL_BLEND); glBlendFunc(GL_ONE, GL_ZERO); @@ -673,6 +675,8 @@ void CScreensaverEuphoria::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); + glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); @@ -789,6 +793,10 @@ void CScreensaverEuphoria::Render() glDisableVertexAttribArray(m_hColor); glDisableVertexAttribArray(m_hCoord); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); + glDisable(GL_BLEND); glBlendFunc(GL_ONE, GL_ZERO); } diff --git a/src/euphoria/main.h b/src/euphoria/main.h index 2e9885536..78eb72448 100644 --- a/src/euphoria/main.h +++ b/src/euphoria/main.h @@ -105,6 +105,7 @@ class ATTR_DLL_LOCAL CScreensaverEuphoria GLint m_hCoord = -1; GLint m_hColor = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; CWisp *m_backwisps; From d98951e12efbeba7515d35fe76a185b35441aed4 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 15:11:40 -0700 Subject: [PATCH 07/23] CScreensaverFeedback: use vao Signed-off-by: Lukas Rusak --- src/feedback/main.cpp | 11 +++++++++++ src/feedback/main.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/feedback/main.cpp b/src/feedback/main.cpp index f18ba395b..4804e85e9 100644 --- a/src/feedback/main.cpp +++ b/src/feedback/main.cpp @@ -132,6 +132,8 @@ bool CScreensaverFeedback::Start() // Window initialization glViewport(X(), Y(), Width(), Height()); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); glGenBuffers(1, &m_indexVBO); @@ -171,6 +173,8 @@ void CScreensaverFeedback::Stop() delete[] m_velocities; delete[] m_accelerations; delete[] m_framedTextures; + + glDeleteVertexArrays(1, &m_vao); } void CScreensaverFeedback::Render() @@ -184,6 +188,8 @@ void CScreensaverFeedback::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexVBO); BindTexture(GL_TEXTURE_2D, m_texture); @@ -433,6 +439,11 @@ void CScreensaverFeedback::Render() glDisableVertexAttribArray(m_hVertex); glDisableVertexAttribArray(m_hColor); glDisableVertexAttribArray(m_hCoord); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverFeedback::OnCompiledAndLinked() diff --git a/src/feedback/main.h b/src/feedback/main.h index 7c6ebf40e..6dd87a671 100644 --- a/src/feedback/main.h +++ b/src/feedback/main.h @@ -66,6 +66,7 @@ class ATTR_DLL_LOCAL CScreensaverFeedback GLint m_hCoord = -1; GLint m_hColor = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_indexVBO = 0; From 19bd6269916ca419ff1fadb8fadc6cb5fdeb0319 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 15:15:35 -0700 Subject: [PATCH 08/23] CScreensaverFieldLines: use vao Signed-off-by: Lukas Rusak --- src/fieldlines/main.cpp | 10 ++++++++++ src/fieldlines/main.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/fieldlines/main.cpp b/src/fieldlines/main.cpp index 5ca338a30..f822ad09f 100644 --- a/src/fieldlines/main.cpp +++ b/src/fieldlines/main.cpp @@ -45,6 +45,8 @@ bool CScreensaverFieldLines::Start() // Initialize pseudorandom number generator srand((unsigned)time(nullptr)); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); // calculate boundaries @@ -92,6 +94,8 @@ void CScreensaverFieldLines::Stop() m_vertexVBO = 0; delete[] m_packets; + + glDeleteVertexArrays(1, &m_vao); } void CScreensaverFieldLines::Render() @@ -105,6 +109,8 @@ void CScreensaverFieldLines::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glVertexAttribPointer(m_hPos, 3, GL_FLOAT, 0, sizeof(PackedVertex), BUFFER_OFFSET(offsetof(PackedVertex, x))); @@ -151,6 +157,10 @@ void CScreensaverFieldLines::Render() glDisableVertexAttribArray(m_hPos); glDisableVertexAttribArray(m_hCol); + + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverFieldLines::drawfieldline(CIon& ion, float x, float y, float z) diff --git a/src/fieldlines/main.h b/src/fieldlines/main.h index b0e9f57c4..8b469892a 100644 --- a/src/fieldlines/main.h +++ b/src/fieldlines/main.h @@ -59,6 +59,7 @@ class ATTR_DLL_LOCAL CScreensaverFieldLines PackedVertex* m_packets = nullptr; + GLuint m_vao = 0; unsigned int m_vertexVBO = 0; glm::mat4 m_projMat; From e4ff4dad9dacf6f52e9a327816a4e0f48a827958 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 15:25:57 -0700 Subject: [PATCH 09/23] CScreensaverFlocks: use vao Signed-off-by: Lukas Rusak --- src/flocks/main.cpp | 14 +++++++++++--- src/flocks/main.h | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/flocks/main.cpp b/src/flocks/main.cpp index 7c724fe6d..080158120 100644 --- a/src/flocks/main.cpp +++ b/src/flocks/main.cpp @@ -768,8 +768,9 @@ bool CScreensaverFlocks::Start() for (int i = 0; i < gSettings.dFollowers; i++) m_fBugs[i].initFollower(m_width, m_height, m_depth); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glGenBuffers(1, &m_indexVBO); m_colorFade = float(gSettings.dColorfadespeed) * 0.01f; @@ -794,15 +795,15 @@ void CScreensaverFlocks::Stop() return; m_startOK = false; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_indexVBO); m_indexVBO = 0; glDeleteTextures(1, &m_texture); m_texture = 0; + glDeleteVertexArrays(1, &m_vao); + glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glClearColor (0.0f, 0.0f, 0.0f, 1.0f); @@ -826,6 +827,8 @@ void CScreensaverFlocks::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glVertexAttribPointer(m_hVertex, 3, GL_FLOAT, GL_TRUE, sizeof(sLight), BUFFER_OFFSET(offsetof(sLight, vertex))); glEnableVertexAttribArray(m_hVertex); @@ -941,6 +944,11 @@ void CScreensaverFlocks::Render() glDisableVertexAttribArray(m_hVertex); glDisableVertexAttribArray(m_hNormal); glDisableVertexAttribArray(m_hColor); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverFlocks::DrawEntry(int primitive, const sLight* data, unsigned int size) diff --git a/src/flocks/main.h b/src/flocks/main.h index 626a041b2..320fc5a60 100644 --- a/src/flocks/main.h +++ b/src/flocks/main.h @@ -95,6 +95,7 @@ class ATTR_DLL_LOCAL CScreensaverFlocks GLint m_hColor = -1; GLint m_hCoord = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_indexVBO = 0; From 48336e06272851c03d437aa36e21b38238bb8e9a Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 15:34:15 -0700 Subject: [PATCH 10/23] CScreensaverFlux: use vao Signed-off-by: Lukas Rusak --- src/flux/main.cpp | 12 ++++++++++-- src/flux/main.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/flux/main.cpp b/src/flux/main.cpp index 8c1055cf5..776853462 100644 --- a/src/flux/main.cpp +++ b/src/flux/main.cpp @@ -616,8 +616,9 @@ bool CScreensaverFlux::Start() // Initialize flux fields m_fluxes = new CFlux[gSettings.dFluxes]; + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); m_cameraAngle = 0.0f; m_startOK = true; @@ -631,10 +632,11 @@ void CScreensaverFlux::Stop() return; m_startOK = false; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; + glDeleteVertexArrays(1, &m_vao); + if (gSettings.dGeometry == GEOMETRY_POINTS || gSettings.dGeometry == GEOMETRY_LIGHTS) { @@ -666,6 +668,8 @@ void CScreensaverFlux::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glVertexAttribPointer(m_hVertex, 3, GL_FLOAT, GL_TRUE, sizeof(sLight), BUFFER_OFFSET(offsetof(sLight, vertex))); glEnableVertexAttribArray(m_hVertex); @@ -745,6 +749,10 @@ void CScreensaverFlux::Render() glDisableVertexAttribArray(m_hCoord); glDisableVertexAttribArray(m_hVertex); glDisableVertexAttribArray(m_hNormal); + + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverFlux::DrawPoint() diff --git a/src/flux/main.h b/src/flux/main.h index 540a758a6..1307e7c1c 100644 --- a/src/flux/main.h +++ b/src/flux/main.h @@ -95,6 +95,7 @@ class ATTR_DLL_LOCAL CScreensaverFlux GLint m_hVertex = -1; GLint m_hCoord = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; glm::mat4 m_modelProjMat; From b22473a64d5d02db89a7752c03dd66b5dcc34960 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 15:38:41 -0700 Subject: [PATCH 11/23] CScreensaverHelios: use vao Signed-off-by: Lukas Rusak --- src/helios/main.cpp | 25 ++++++++++++------------- src/helios/main.h | 1 + 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/helios/main.cpp b/src/helios/main.cpp index 9e57b9022..2d1408b69 100644 --- a/src/helios/main.cpp +++ b/src/helios/main.cpp @@ -360,22 +360,12 @@ bool CScreensaverHelios::Start() m_spheres[i + gHeliosSettings.dEmitters].setThickness(200.0f * sphereScaleFactor); } + glGenVertexArrays(1, &m_vao); + glBindVertexArray(m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glGenBuffers(1, &m_indexVBO); - glVertexAttribPointer(m_hNormal, 3, GL_FLOAT, GL_TRUE, sizeof(sLight), BUFFER_OFFSET(offsetof(sLight, normal))); - glEnableVertexAttribArray(m_hNormal); - - glVertexAttribPointer(m_hVertex, 3, GL_FLOAT, GL_TRUE, sizeof(sLight), BUFFER_OFFSET(offsetof(sLight, vertex))); - glEnableVertexAttribArray(m_hVertex); - - glVertexAttribPointer(m_hColor, 4, GL_FLOAT, GL_TRUE, sizeof(sLight), BUFFER_OFFSET(offsetof(sLight, color))); - glEnableVertexAttribArray(m_hColor); - - glVertexAttribPointer(m_hCoord, 2, GL_FLOAT, GL_TRUE, sizeof(sLight), BUFFER_OFFSET(offsetof(sLight, coord))); - glEnableVertexAttribArray(m_hCoord); - m_lastTime = std::chrono::duration(std::chrono::system_clock::now().time_since_epoch()).count(); m_startOK = true; return true; @@ -395,6 +385,8 @@ void CScreensaverHelios::Stop() glDeleteBuffers(1, &m_indexVBO); m_indexVBO = 0; + glDeleteVertexArrays(1, &m_vao); + // Free memory delete[] m_elist; delete[] m_alist; @@ -412,6 +404,8 @@ void CScreensaverHelios::Render() if (!m_startOK) return; + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glVertexAttribPointer(m_hNormal, 3, GL_FLOAT, GL_TRUE, sizeof(sLight), BUFFER_OFFSET(offsetof(sLight, normal))); @@ -705,6 +699,11 @@ void CScreensaverHelios::Render() glDisableVertexAttribArray(m_hVertex); glDisableVertexAttribArray(m_hColor); glDisableVertexAttribArray(m_hCoord); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverHelios::OnCompiledAndLinked() diff --git a/src/helios/main.h b/src/helios/main.h index 45f9b8047..a6f339099 100644 --- a/src/helios/main.h +++ b/src/helios/main.h @@ -61,6 +61,7 @@ class ATTR_DLL_LOCAL CScreensaverHelios float m_frameTime = 0.0f; bool m_startOK = false; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_indexVBO = 0; GLuint m_texture_id[2] = {0}; From 87606f49e5dddc90c8626f9e0578d3ceb1419fff Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 15:43:00 -0700 Subject: [PATCH 12/23] CScreensaverHufoSmoke: use vao Signed-off-by: Lukas Rusak --- src/hufosmoke/main.cpp | 12 ++++++++++-- src/hufosmoke/main.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/hufosmoke/main.cpp b/src/hufosmoke/main.cpp index 97c3ece0b..7279d7795 100644 --- a/src/hufosmoke/main.cpp +++ b/src/hufosmoke/main.cpp @@ -130,8 +130,9 @@ bool CScreensaverHufoSmoke::Start() glBlendFunc(GL_SRC_ALPHA, GL_ONE); glEnable(GL_BLEND); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); m_tFire = 0.0; FireInit(); // initialise fire @@ -148,10 +149,11 @@ void CScreensaverHufoSmoke::Stop() m_startOK = false; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; + glDeleteVertexArrays(1, &m_vao); + // Kodi defaults glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -174,6 +176,8 @@ void CScreensaverHufoSmoke::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glVertexAttribPointer(m_hVertex, 3, GL_FLOAT, GL_TRUE, sizeof(sLight), BUFFER_OFFSET(offsetof(sLight, vertex))); glEnableVertexAttribArray(m_hVertex); @@ -209,6 +213,10 @@ void CScreensaverHufoSmoke::Render() glDisableVertexAttribArray(m_hVertex); glDisableVertexAttribArray(m_hColor); + + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverHufoSmoke::FireInit() diff --git a/src/hufosmoke/main.h b/src/hufosmoke/main.h index 44a19c197..4756d5a28 100644 --- a/src/hufosmoke/main.h +++ b/src/hufosmoke/main.h @@ -108,6 +108,7 @@ class ATTR_DLL_LOCAL CScreensaverHufoSmoke GLint m_hVertex = -1; GLint m_hColor = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; bool m_startOK = false; From 497b628657481248021e7821b82200da5d69e7a6 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 15:45:22 -0700 Subject: [PATCH 13/23] CScreensaverHufoTunnel: use vao Signed-off-by: Lukas Rusak --- src/hufotunnel/main.cpp | 12 ++++++++++-- src/hufotunnel/main.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/hufotunnel/main.cpp b/src/hufotunnel/main.cpp index 79f764c23..471158686 100644 --- a/src/hufotunnel/main.cpp +++ b/src/hufotunnel/main.cpp @@ -163,8 +163,9 @@ bool CScreensaverHufoTunnel::Start() m_tVit = 8000.0; HoleInit(); // initialise tunnel pos + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); m_uniformColorUsed = 0; m_lastTime = std::chrono::duration(std::chrono::system_clock::now().time_since_epoch()).count(); @@ -180,10 +181,11 @@ void CScreensaverHufoTunnel::Stop() m_startOK = false; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; + glDeleteVertexArrays(1, &m_vao); + if (m_texture) { glDeleteTextures(1, &m_texture); @@ -205,6 +207,8 @@ void CScreensaverHufoTunnel::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); + glCullFace(GL_FRONT); // reject fliped faces glEnable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); // no zbuffer @@ -318,6 +322,10 @@ void CScreensaverHufoTunnel::Render() glDisableVertexAttribArray(m_colorLoc); glDisableVertexAttribArray(m_texCoord0Loc); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); + glCullFace(GL_BACK); glDisable(GL_CULL_FACE); } diff --git a/src/hufotunnel/main.h b/src/hufotunnel/main.h index 330995400..e89fe831e 100644 --- a/src/hufotunnel/main.h +++ b/src/hufotunnel/main.h @@ -126,6 +126,7 @@ class ATTR_DLL_LOCAL CScreensaverHufoTunnel GLint m_colorLoc = -1; GLint m_texCoord0Loc = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_texture = 0; From f2d97a936b9f7ae4cb9364293c8a2b248ad5ef4e Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 15:47:54 -0700 Subject: [PATCH 14/23] CScreensaverHyperspace: use vao Signed-off-by: Lukas Rusak --- src/hyperspace/main.cpp | 17 ++++++++++++----- src/hyperspace/main.h | 1 + 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/hyperspace/main.cpp b/src/hyperspace/main.cpp index 080fe707d..a34a88422 100644 --- a/src/hyperspace/main.cpp +++ b/src/hyperspace/main.cpp @@ -116,10 +116,10 @@ bool CScreensaverHyperspace::Start() Build2DMipmaps(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_RGB, NEBULAMAPSIZE, NEBULAMAPSIZE, GL_RGB, GL_UNSIGNED_BYTE, nebulamap); Build2DMipmaps(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_RGB, NEBULAMAPSIZE, NEBULAMAPSIZE, GL_RGB, GL_UNSIGNED_BYTE, nebulamap); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glGenBuffers(1, &m_indexVBO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexVBO); m_first = true; m_textureTime = 0.0f; @@ -135,14 +135,13 @@ void CScreensaverHyperspace::Stop() return; m_startOK = false; - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; glDeleteBuffers(1, &m_indexVBO); m_indexVBO = 0; + glDeleteVertexArrays(1, &m_vao); + delete m_sunStar; m_sunStar = nullptr; @@ -181,6 +180,8 @@ void CScreensaverHyperspace::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glVertexAttribPointer(m_aPosition, 4, GL_FLOAT, GL_TRUE, sizeof(sLight), BUFFER_OFFSET(offsetof(sLight, vertex))); @@ -423,6 +424,12 @@ void CScreensaverHyperspace::Render() glDisableVertexAttribArray(m_aNormal); glDisableVertexAttribArray(m_aCoord); glDisableVertexAttribArray(m_aColor); + + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverHyperspace::Draw(int primitive, const sLight* data, unsigned int size) diff --git a/src/hyperspace/main.h b/src/hyperspace/main.h index cd3d12d75..1430f79c9 100644 --- a/src/hyperspace/main.h +++ b/src/hyperspace/main.h @@ -177,6 +177,7 @@ class ATTR_DLL_LOCAL CScreensaverHyperspace GLint m_aCoord = -1; GLint m_aColor = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_indexVBO = 0; From a8a20f5960f96576796059bedd13d3dc2324d61f Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 15:49:56 -0700 Subject: [PATCH 15/23] CScreensaverLattice: use vao Signed-off-by: Lukas Rusak --- src/lattice/main.cpp | 13 ++++++++++--- src/lattice/main.h | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/lattice/main.cpp b/src/lattice/main.cpp index c95674b47..ae6f63d39 100644 --- a/src/lattice/main.cpp +++ b/src/lattice/main.cpp @@ -214,6 +214,8 @@ bool CScreensaverLattice::Start() m_lastBorder = k; m_segments = 1; + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); m_lastTime = std::chrono::duration(std::chrono::system_clock::now().time_since_epoch()).count(); m_startOK = true; @@ -230,15 +232,14 @@ void CScreensaverLattice::Stop() m_startOK = false; - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindTexture(GL_TEXTURE_2D, 0); - glDisable(GL_CULL_FACE); glDisable(GL_BLEND); glDisable(GL_DEPTH_TEST); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; + + glDeleteVertexArrays(1, &m_vao); } void CScreensaverLattice::Render() @@ -246,6 +247,8 @@ void CScreensaverLattice::Render() if (!m_startOK) return; + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glVertexAttribPointer(m_aNormalLoc, 3, GL_FLOAT, GL_TRUE, sizeof(sLatticeSegmentEntry), BUFFER_OFFSET(offsetof(sLatticeSegmentEntry, normal))); @@ -447,6 +450,10 @@ void CScreensaverLattice::Render() glDisableVertexAttribArray(m_aColorLoc); glDisableVertexAttribArray(m_aCoordLoc); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); + glDisable(GL_BLEND); glBlendFunc(GL_ONE, GL_ZERO); glDisable(GL_DEPTH_TEST); diff --git a/src/lattice/main.h b/src/lattice/main.h index 19826b815..feee63cc9 100644 --- a/src/lattice/main.h +++ b/src/lattice/main.h @@ -154,6 +154,7 @@ class ATTR_DLL_LOCAL CScreensaverLattice GLint m_aCoordLoc = -1; GLint m_aColorLoc = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; double m_lastTime; From ab5e7ea45701a86472259fde8f6bb3ce82628ade Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 20 Apr 2023 15:51:40 -0700 Subject: [PATCH 16/23] CScreensaverLorenz: use vao Signed-off-by: Lukas Rusak --- src/lorenz/main.cpp | 11 ++++++++++- src/lorenz/main.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lorenz/main.cpp b/src/lorenz/main.cpp index feef058b7..d5a5cf37a 100644 --- a/src/lorenz/main.cpp +++ b/src/lorenz/main.cpp @@ -144,6 +144,8 @@ bool CScreensaverLorenz::Start() set_camera(); glViewport(X(), Y(), Width()-X(), Height()-Y()); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); m_lastTime = std::chrono::duration(std::chrono::system_clock::now().time_since_epoch()).count(); @@ -168,9 +170,10 @@ void CScreensaverLorenz::Stop() delete m_satellite_times; delete m_satellite_speeds; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; + + glDeleteVertexArrays(1, &m_vao); } void CScreensaverLorenz::Render() @@ -178,6 +181,8 @@ void CScreensaverLorenz::Render() if (!m_startOK) return; + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glVertexAttribPointer(m_hNormal, 3, GL_FLOAT, GL_TRUE, sizeof(sLatticeSegmentEntry), BUFFER_OFFSET(offsetof(sLatticeSegmentEntry, normal))); @@ -214,6 +219,10 @@ void CScreensaverLorenz::Render() glDisableVertexAttribArray(m_hNormal); glDisableVertexAttribArray(m_hVertex); glDisableVertexAttribArray(m_hColor); + + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverLorenz::OnCompiledAndLinked() diff --git a/src/lorenz/main.h b/src/lorenz/main.h index fce6a8937..03b714886 100644 --- a/src/lorenz/main.h +++ b/src/lorenz/main.h @@ -131,6 +131,7 @@ class ATTR_DLL_LOCAL CScreensaverLorenz GLint m_hVertex = -1; GLint m_hColor = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; double m_lastTime; From 4a2be7fe45b4e8065cee9aa368162d3982627aac Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 21 Apr 2023 09:46:33 -0700 Subject: [PATCH 17/23] CScreensaverMatrixView: use vao Signed-off-by: Lukas Rusak --- src/matrixview/main.cpp | 14 ++++++++++---- src/matrixview/main.h | 1 + 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/matrixview/main.cpp b/src/matrixview/main.cpp index 0ae4ad4d9..d2beb2e82 100644 --- a/src/matrixview/main.cpp +++ b/src/matrixview/main.cpp @@ -102,11 +102,11 @@ bool CScreensaverMatrixView::Start() glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glGenBuffers(1, &m_indexVBO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexVBO); m_startOK = true; @@ -120,14 +120,14 @@ void CScreensaverMatrixView::Stop() m_startOK = false; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_indexVBO); m_indexVBO = 0; + glDeleteVertexArrays(1, &m_vao); + glDeleteTextures(1, &m_texture1); m_texture1 = 0; glDeleteTextures(1, &m_texture2); @@ -150,6 +150,7 @@ void CScreensaverMatrixView::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexVBO); @@ -184,6 +185,11 @@ void CScreensaverMatrixView::Render() glDisableVertexAttribArray(m_positionLoc); glDisableVertexAttribArray(m_colorLoc); glDisableVertexAttribArray(m_texCoord0Loc); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } /* Draw character #num on the screen. */ diff --git a/src/matrixview/main.h b/src/matrixview/main.h index 17376b6c1..9c717d4a6 100644 --- a/src/matrixview/main.h +++ b/src/matrixview/main.h @@ -90,6 +90,7 @@ class ATTR_DLL_LOCAL CScreensaverMatrixView GLint m_positionLoc = -1; GLint m_texCoord0Loc = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_indexVBO = 0; From 6bb8bc5cca2a6ce33f0d151b9187131e7af62e43 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 21 Apr 2023 09:50:09 -0700 Subject: [PATCH 18/23] CScreensaverMicrocosm: use vao Signed-off-by: Lukas Rusak --- src/microcosm/main.cpp | 14 ++++++++++---- src/microcosm/main.h | 1 + 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/microcosm/main.cpp b/src/microcosm/main.cpp index 7ee227a18..c48e0a829 100644 --- a/src/microcosm/main.cpp +++ b/src/microcosm/main.cpp @@ -66,10 +66,10 @@ bool CScreensaverMicrocosm::Start() m_settings.Load(); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glGenBuffers(1, &m_indexVBO); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexVBO); srand((unsigned)time(nullptr)); @@ -314,14 +314,14 @@ void CScreensaverMicrocosm::Stop() delete m_volume2; m_volume2 = nullptr; - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_indexVBO); m_indexVBO = 0; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; + glDeleteVertexArrays(1, &m_vao); + // Reset from addon changed GL values for Kodi's work (also done here to make // sure it is Kodi's default #if !defined(HAS_GLES) @@ -354,6 +354,7 @@ void CScreensaverMicrocosm::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexVBO); @@ -768,6 +769,11 @@ void CScreensaverMicrocosm::Render() glDisableVertexAttribArray(m_hNormal); glDisableVertexAttribArray(m_hVertex); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverMicrocosm::Draw(const float* vertices, unsigned int vertex_offset, const unsigned int* indices, unsigned int index_offset) diff --git a/src/microcosm/main.h b/src/microcosm/main.h index 84c5f0eda..4cdd2b3f6 100644 --- a/src/microcosm/main.h +++ b/src/microcosm/main.h @@ -210,6 +210,7 @@ class ATTR_DLL_LOCAL CScreensaverMicrocosm GLint m_hNormal = -1; GLint m_hVertex = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_indexVBO = 0; From 8fd92bfd629fe4cf83739f38f9801580e1c9d12f Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 21 Apr 2023 09:51:52 -0700 Subject: [PATCH 19/23] CScreensaverPlasma: use vao Signed-off-by: Lukas Rusak --- src/plasma/main.cpp | 8 ++++++++ src/plasma/main.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/plasma/main.cpp b/src/plasma/main.cpp index 6490a1f11..a12d6561d 100644 --- a/src/plasma/main.cpp +++ b/src/plasma/main.cpp @@ -39,6 +39,8 @@ bool CScreensaverPlasma::Start() if (!LoadShaderFiles(vertShader, fraqShader) || !CompileAndLink()) return false; + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); // Initialize pseudorandom number generator @@ -60,6 +62,8 @@ void CScreensaverPlasma::Stop() { glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; + + glDeleteVertexArrays(1, &m_vao); } void CScreensaverPlasma::Render() @@ -193,6 +197,8 @@ void CScreensaverPlasma::Render() packets[3].u1 = textop; packets[3].v1 = texright; + glBindVertexArray(m_vao); + EnableShader(); glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); @@ -214,6 +220,8 @@ void CScreensaverPlasma::Render() DisableShader(); glBindTexture(GL_TEXTURE_2D, 0); + + glBindVertexArray(0); } void CScreensaverPlasma::SetPlasmaSize() diff --git a/src/plasma/main.h b/src/plasma/main.h index 5e7222f0d..bf6cdf138 100644 --- a/src/plasma/main.h +++ b/src/plasma/main.h @@ -57,6 +57,7 @@ class ATTR_DLL_LOCAL CScreensaverPlasma GLint m_hPos = -1; GLint m_hCord = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_tex = 0; From 26bbe6f68214c8536f6ba63f8523041f27147347 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 21 Apr 2023 09:55:01 -0700 Subject: [PATCH 20/23] CScreensaverSkyRocket: use vao Signed-off-by: Lukas Rusak --- src/skyrocket/main.cpp | 12 ++++++++++-- src/skyrocket/main.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/skyrocket/main.cpp b/src/skyrocket/main.cpp index fa0349b77..c46a4b5c2 100644 --- a/src/skyrocket/main.cpp +++ b/src/skyrocket/main.cpp @@ -69,8 +69,9 @@ bool CScreensaverSkyRocket::Start() if (m_settings.dSound) m_soundengine = new CSoundEngine(float(m_settings.dSound) * 0.01f); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); - glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); // Change rocket firing rate m_rocketTimer = 0.0f; @@ -91,10 +92,11 @@ void CScreensaverSkyRocket::Stop() { m_startOK = false; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, &m_vertexVBO); m_vertexVBO = 0; + glDeleteVertexArrays(1, &m_vao); + // Kodi defaults glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -122,6 +124,8 @@ void CScreensaverSkyRocket::Render() * TODO: Maybe add a separate interface call to inform about? */ //@{ + glBindVertexArray(m_vao); + glDisable(GL_DEPTH_TEST); glFrontFace(GL_CCW); glEnable(GL_CULL_FACE); @@ -583,6 +587,10 @@ void CScreensaverSkyRocket::Render() glDisableVertexAttribArray(m_hColor); glDisableVertexAttribArray(m_hCoord); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); + glBlendFunc(GL_SRC_ALPHA, GL_ONE); glEnable(GL_BLEND); glDisable(GL_DEPTH_TEST); diff --git a/src/skyrocket/main.h b/src/skyrocket/main.h index cda2308e1..01a46d204 100644 --- a/src/skyrocket/main.h +++ b/src/skyrocket/main.h @@ -174,6 +174,7 @@ class ATTR_DLL_LOCAL CScreensaverSkyRocket GLint m_hCoord = -1; GLint m_hColor = -1; + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLfloat *m_proj = nullptr; From 16977e87e4bf96560a81823d5f298a7b22a79b01 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 21 Apr 2023 09:59:13 -0700 Subject: [PATCH 21/23] CScreensaverSolarWinds: use vao Signed-off-by: Lukas Rusak --- src/solarwinds/main.cpp | 11 ++++++++++- src/solarwinds/main.h | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/solarwinds/main.cpp b/src/solarwinds/main.cpp index 0f2e236fe..329841190 100644 --- a/src/solarwinds/main.cpp +++ b/src/solarwinds/main.cpp @@ -270,6 +270,8 @@ bool CScreensaverSolarWinds::Start() // Initialize pseudorandom number generator srand((unsigned)time(nullptr)); + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, m_vertexVBO); m_projMat = glm::perspective(glm::radians(90.0f), (float)Width() / (float)Height(), 1.0f, 10000.0f); @@ -342,10 +344,11 @@ void CScreensaverSolarWinds::Stop() { m_startOK = false; - glBindBuffer(GL_ARRAY_BUFFER, 0); glDeleteBuffers(1, m_vertexVBO); memset(m_vertexVBO, 0, sizeof(m_vertexVBO)); + glDeleteVertexArrays(1, &m_vao); + // Free memory delete[] m_winds; } @@ -355,6 +358,8 @@ void CScreensaverSolarWinds::Render() if (!m_startOK) return; + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO[0]); glVertexAttribPointer(m_hPos, 3, GL_FLOAT, 0, sizeof(sLight), BUFFER_OFFSET(offsetof(sLight, vertex))); glEnableVertexAttribArray(m_hPos); @@ -420,6 +425,10 @@ void CScreensaverSolarWinds::Render() glDisableVertexAttribArray(m_hPos); glDisableVertexAttribArray(m_hCol); glDisableVertexAttribArray(m_hCoord); + + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverSolarWinds::SetDefaults(int type) diff --git a/src/solarwinds/main.h b/src/solarwinds/main.h index c739fea3a..bfee9eea3 100644 --- a/src/solarwinds/main.h +++ b/src/solarwinds/main.h @@ -85,6 +85,8 @@ class ATTR_DLL_LOCAL CScreensaverSolarWinds bool m_startOK = false; int m_startClearCnt = 5; + + GLuint m_vao = 0; unsigned int m_vertexVBO[2] = {0}; CWind *m_winds; From 87fac9e77d8a19042de9c4050d2caddd26636234 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 21 Apr 2023 10:01:17 -0700 Subject: [PATCH 22/23] CScreensaverSpiroGraphX: use vao Signed-off-by: Lukas Rusak --- src/spirographx/main.cpp | 8 ++++++++ src/spirographx/main.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/src/spirographx/main.cpp b/src/spirographx/main.cpp index 45255764c..6289af507 100644 --- a/src/spirographx/main.cpp +++ b/src/spirographx/main.cpp @@ -34,6 +34,8 @@ bool CScreensaverSpiroGraphX::Start() // Initialize pseudorandom number generator srand((unsigned)time(nullptr)); + glGenVertexArrays(1, &m_vao); + glGenBuffers(2, m_vertexVBO); m_content.blurWidth = kodi::addon::GetSettingInt("general.blurwidth"); @@ -63,6 +65,8 @@ void CScreensaverSpiroGraphX::Stop() glDeleteBuffers(2, m_vertexVBO); memset(m_vertexVBO, 0, sizeof(m_vertexVBO)); + glDeleteVertexArrays(1, &m_vao); + // Kodi defaults glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -91,6 +95,8 @@ void CScreensaverSpiroGraphX::Render() m_modelMat = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -3.0f)); + glBindVertexArray(m_vao); + EnableShader(); float width = sqrt((GLfloat) (Width() * Height()) / (500 * 400)); @@ -136,6 +142,8 @@ void CScreensaverSpiroGraphX::Render() m_content.equationBase += m_content.speed * (frameTime / (1.0f / 30.0f)); + glBindVertexArray(0); + glFlush(); } diff --git a/src/spirographx/main.h b/src/spirographx/main.h index 0de1f6a22..47e5fcdc4 100644 --- a/src/spirographx/main.h +++ b/src/spirographx/main.h @@ -65,6 +65,8 @@ class ATTR_DLL_LOCAL CScreensaverSpiroGraphX double m_lastTime; bool m_startOK = false; + + GLuint m_vao = 0; unsigned int m_vertexVBO[2] = {0}; int m_detail; From 3c131dcbdc547b6528c74305dab9561c60ea110c Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Fri, 21 Apr 2023 10:04:08 -0700 Subject: [PATCH 23/23] CScreensaverSunDancer2: use vao Signed-off-by: Lukas Rusak --- src/sundancer2/main.cpp | 11 +++++++++++ src/sundancer2/main.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/sundancer2/main.cpp b/src/sundancer2/main.cpp index 4444a440a..19bac8c98 100644 --- a/src/sundancer2/main.cpp +++ b/src/sundancer2/main.cpp @@ -89,6 +89,8 @@ bool CScreensaverSunDancer2::Start() if (!LoadShaderFiles(vertShader, fraqShader) || !CompileAndLink()) return false; + glGenVertexArrays(1, &m_vao); + glGenBuffers(1, &m_vertexVBO); glGenBuffers(1, &m_indexVBO); @@ -180,6 +182,8 @@ void CScreensaverSunDancer2::Stop() glDeleteBuffers(1, &m_indexVBO); m_indexVBO = 0; + glDeleteVertexArrays(1, &m_vao); + // Kodi defaults glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -199,6 +203,8 @@ void CScreensaverSunDancer2::Render() if (!m_startOK) return; + glBindVertexArray(m_vao); + glBindBuffer(GL_ARRAY_BUFFER, m_vertexVBO); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexVBO); @@ -346,6 +352,11 @@ void CScreensaverSunDancer2::Render() glDisableVertexAttribArray(m_hPos); glDisableVertexAttribArray(m_hCol); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); } void CScreensaverSunDancer2::OnCompiledAndLinked() diff --git a/src/sundancer2/main.h b/src/sundancer2/main.h index 630f1d976..7c919b1ac 100644 --- a/src/sundancer2/main.h +++ b/src/sundancer2/main.h @@ -37,6 +37,8 @@ class ATTR_DLL_LOCAL CScreensaverSunDancer2 private: bool m_startOK = false; + + GLuint m_vao = 0; GLuint m_vertexVBO = 0; GLuint m_indexVBO = 0;