From 928600acd4e0ae98f38dca0bd8b835084f48d2db Mon Sep 17 00:00:00 2001 From: Vladislav Khorev Date: Sat, 7 Mar 2026 19:41:15 +0300 Subject: [PATCH] Refactoring --- src/Game.cpp | 12 ------- src/Space.cpp | 44 +------------------------ src/SparkEmitter.cpp | 7 ---- src/UiManager.cpp | 24 -------------- src/planet/PlanetObject.cpp | 58 --------------------------------- src/render/Renderer.cpp | 63 +++++++----------------------------- src/render/Renderer.h | 7 ---- src/render/ShaderManager.cpp | 37 +++++++++++++++++++-- src/render/TextRenderer.cpp | 7 ---- 9 files changed, 46 insertions(+), 213 deletions(-) diff --git a/src/Game.cpp b/src/Game.cpp index 5dc8aff..7c8b92a 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -227,11 +227,6 @@ namespace ZL renderer.shaderManager.PushShader(defaultShaderName); renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vTexCoordName); - - renderer.DisableVertexAttribArray(vPositionName); - renderer.DisableVertexAttribArray(vTexCoordName); glEnable(GL_BLEND); menuManager.uiManager.draw(renderer); glDisable(GL_BLEND); @@ -272,16 +267,12 @@ namespace ZL void Game::drawLoading() { static const std::string defaultShaderName = "default"; - static const std::string vPositionName = "vPosition"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; glClear(GL_DEPTH_BUFFER_BIT); renderer.shaderManager.PushShader(defaultShaderName); renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vTexCoordName); //float width = Environment::projectionWidth; //float height = Environment::projectionHeight; @@ -299,9 +290,6 @@ namespace ZL renderer.PopMatrix(); renderer.PopProjectionMatrix(); - - renderer.DisableVertexAttribArray(vPositionName); - renderer.DisableVertexAttribArray(vTexCoordName); renderer.shaderManager.PopShader(); CheckGlError(); } diff --git a/src/Space.cpp b/src/Space.cpp index b7b558d..7864fb6 100644 --- a/src/Space.cpp +++ b/src/Space.cpp @@ -420,15 +420,13 @@ namespace ZL { static const std::string defaultShaderName = "default"; static const std::string envShaderName = "env_sky"; - static const std::string vPositionName = "vPosition"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; static const std::string skyPercentUniformName = "skyPercent"; renderer.shaderManager.PushShader(envShaderName); renderer.RenderUniform1i(textureUniformName, 0); renderer.RenderUniform1f(skyPercentUniformName, skyPercent); - renderer.EnableVertexAttribArray(vPositionName); + renderer.PushPerspectiveProjectionMatrix(1.0 / 1.5, static_cast(Environment::width) / static_cast(Environment::height), Environment::CONST_Z_NEAR, Environment::CONST_Z_FAR); @@ -476,8 +474,6 @@ namespace ZL renderer.PopMatrix(); renderer.PopProjectionMatrix(); - renderer.DisableVertexAttribArray(vPositionName); - renderer.shaderManager.PopShader(); CheckGlError(); } @@ -486,14 +482,10 @@ namespace ZL { static const std::string defaultShaderName = "default"; static const std::string envShaderName = "env"; - static const std::string vPositionName = "vPosition"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; renderer.shaderManager.PushShader(defaultShaderName); renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vTexCoordName); renderer.PushPerspectiveProjectionMatrix(1.0 / 1.5, static_cast(Environment::width) / static_cast(Environment::height), @@ -521,8 +513,6 @@ namespace ZL renderer.shaderManager.PushShader("default"); renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vTexCoordName); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE); renderer.PushMatrix(); @@ -539,8 +529,6 @@ namespace ZL renderer.PopMatrix(); glDisable(GL_BLEND); - renderer.DisableVertexAttribArray(vPositionName); - renderer.DisableVertexAttribArray(vTexCoordName); renderer.shaderManager.PopShader(); //projectileEmitter.draw(renderer, Environment::zoom, Environment::width, Environment::height); @@ -568,9 +556,6 @@ namespace ZL glDisable(GL_BLEND); renderer.PopMatrix(); renderer.PopProjectionMatrix(); - renderer.DisableVertexAttribArray(vPositionName); - renderer.DisableVertexAttribArray(vTexCoordName); - renderer.shaderManager.PopShader(); CheckGlError(); } @@ -579,15 +564,10 @@ namespace ZL { static const std::string defaultShaderName = "default"; static const std::string envShaderName = "env"; - static const std::string vPositionName = "vPosition"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; renderer.shaderManager.PushShader(defaultShaderName); renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vTexCoordName); - renderer.PushPerspectiveProjectionMatrix(1.0 / 1.5, static_cast(Environment::width) / static_cast(Environment::height), Environment::CONST_Z_NEAR, Environment::CONST_Z_FAR); @@ -612,9 +592,6 @@ namespace ZL renderer.PopMatrix(); } renderer.PopProjectionMatrix(); - renderer.DisableVertexAttribArray(vPositionName); - renderer.DisableVertexAttribArray(vTexCoordName); - renderer.shaderManager.PopShader(); CheckGlError(); } @@ -622,8 +599,6 @@ namespace ZL void Space::drawScene() { static const std::string defaultShaderName = "default"; static const std::string envShaderName = "env"; - static const std::string vPositionName = "vPosition"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; glClearColor(0.0f, 1.0f, 0.0f, 1.0f); @@ -669,16 +644,11 @@ namespace ZL void Space::drawRemoteShips() { static const std::string defaultShaderName = "default"; - static const std::string vPositionName = "vPosition"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; renderer.shaderManager.PushShader(defaultShaderName); renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vTexCoordName); - renderer.PushPerspectiveProjectionMatrix(1.0 / 1.5, static_cast(Environment::width) / static_cast(Environment::height), Environment::CONST_Z_NEAR, Environment::CONST_Z_FAR); @@ -741,8 +711,6 @@ namespace ZL } renderer.PopProjectionMatrix(); - renderer.DisableVertexAttribArray(vPositionName); - renderer.DisableVertexAttribArray(vTexCoordName); renderer.shaderManager.PopShader(); CheckGlError(); @@ -996,17 +964,11 @@ namespace ZL renderer.PushMatrix(); renderer.LoadIdentity(); - renderer.EnableVertexAttribArray("vPosition"); - renderer.EnableVertexAttribArray("vColor"); - Eigen::Vector4f uColor(crosshairCfg.color.x(), crosshairCfg.color.y(), crosshairCfg.color.z(), crosshairCfg.alpha); renderer.RenderUniform4fv("uColor", uColor.data()); renderer.DrawVertexRenderStruct(crosshairMesh); - renderer.DisableVertexAttribArray("vPosition"); - renderer.DisableVertexAttribArray("vColor"); - renderer.PopMatrix(); renderer.PopProjectionMatrix(); renderer.shaderManager.PopShader(); @@ -1335,7 +1297,6 @@ namespace ZL renderer.PushMatrix(); renderer.LoadIdentity(); - renderer.EnableVertexAttribArray("vPosition"); renderer.RenderUniform4fv("uColor", enemyColor.data()); // рамки @@ -1358,7 +1319,6 @@ namespace ZL drawLeadRing2D(lx, ly); } - renderer.DisableVertexAttribArray("vPosition"); renderer.PopMatrix(); renderer.PopProjectionMatrix(); renderer.shaderManager.PopShader(); @@ -1444,7 +1404,6 @@ namespace ZL renderer.PushMatrix(); renderer.LoadIdentity(); - renderer.EnableVertexAttribArray("vPosition"); renderer.RenderUniform4fv("uColor", enemyColor.data()); // стрелка @@ -1462,7 +1421,6 @@ namespace ZL drawLeadRing2D(lx, ly); } - renderer.DisableVertexAttribArray("vPosition"); renderer.PopMatrix(); renderer.PopProjectionMatrix(); renderer.shaderManager.PopShader(); diff --git a/src/SparkEmitter.cpp b/src/SparkEmitter.cpp index 748afd5..666e311 100644 --- a/src/SparkEmitter.cpp +++ b/src/SparkEmitter.cpp @@ -195,14 +195,10 @@ namespace ZL { sparkQuad.data.TexCoordData = drawTexCoords; sparkQuad.RefreshVBO(); - static const std::string vPositionName = "vPosition"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; renderer.shaderManager.PushShader(shaderProgramName); renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vTexCoordName); //float aspectRatio = static_cast(screenWidth) / static_cast(screenHeight); //renderer.PushPerspectiveProjectionMatrix(1.0 / 1.5, aspectRatio, Environment::CONST_Z_NEAR, Environment::CONST_Z_FAR); @@ -222,9 +218,6 @@ namespace ZL { //renderer.PopProjectionMatrix(); glDisable(GL_BLEND); - - renderer.DisableVertexAttribArray(vPositionName); - renderer.DisableVertexAttribArray(vTexCoordName); renderer.shaderManager.PopShader(); } diff --git a/src/UiManager.cpp b/src/UiManager.cpp index cf059c6..2e911b1 100644 --- a/src/UiManager.cpp +++ b/src/UiManager.cpp @@ -61,8 +61,6 @@ namespace ZL { } if (!(*tex)) return; - static const std::string vPositionName = "vPosition"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; renderer.PushMatrix(); @@ -70,14 +68,8 @@ namespace ZL { renderer.ScaleMatrix({ animScaleX, animScaleY, 1.0f }); renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vTexCoordName); - glBindTexture(GL_TEXTURE_2D, (*tex)->getTexID()); renderer.DrawVertexRenderStruct(mesh); - - renderer.DisableVertexAttribArray(vPositionName); - renderer.DisableVertexAttribArray(vTexCoordName); renderer.PopMatrix(); } @@ -148,14 +140,9 @@ namespace ZL { } void UiSlider::draw(Renderer& renderer) const { - static const std::string vPositionName = "vPosition"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vTexCoordName); - if (texTrack) { glBindTexture(GL_TEXTURE_2D, texTrack->getTexID()); renderer.DrawVertexRenderStruct(trackMesh); @@ -164,9 +151,6 @@ namespace ZL { glBindTexture(GL_TEXTURE_2D, texKnob->getTexID()); renderer.DrawVertexRenderStruct(knobMesh); } - - renderer.DisableVertexAttribArray(vPositionName); - renderer.DisableVertexAttribArray(vTexCoordName); } void UiStaticImage::buildMesh() { @@ -202,19 +186,11 @@ namespace ZL { void UiStaticImage::draw(Renderer& renderer) const { if (!texture) return; - static const std::string vPositionName = "vPosition"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vTexCoordName); - glBindTexture(GL_TEXTURE_2D, texture->getTexID()); renderer.DrawVertexRenderStruct(mesh); - - renderer.DisableVertexAttribArray(vPositionName); - renderer.DisableVertexAttribArray(vTexCoordName); } void UiTextField::draw(Renderer& renderer) const { diff --git a/src/planet/PlanetObject.cpp b/src/planet/PlanetObject.cpp index 02503a2..c64a9be 100644 --- a/src/planet/PlanetObject.cpp +++ b/src/planet/PlanetObject.cpp @@ -186,15 +186,11 @@ namespace ZL { static const std::string defaultShaderName2 = "planetBake"; - static const std::string vPositionName = "vPosition"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; renderer.shaderManager.PushShader(defaultShaderName2); renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vTexCoordName); Triangle tr = planetData.getLodLevel().triangles[0]; @@ -260,8 +256,6 @@ namespace ZL { glDisable(GL_CULL_FACE); // Не забываем выключить, чтобы не сломать остальной рендер renderer.PopMatrix(); renderer.PopProjectionMatrix(); - renderer.DisableVertexAttribArray(vTexCoordName); - renderer.DisableVertexAttribArray(vPositionName); renderer.shaderManager.PopShader(); CheckGlError(); } @@ -300,21 +294,10 @@ namespace ZL { { static const std::string defaultShaderName = "planetLand"; - static const std::string vPositionName = "vPosition"; - static const std::string vColorName = "vColor"; - static const std::string vNormalName = "vNormal"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; renderer.shaderManager.PushShader(defaultShaderName); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vColorName); - renderer.EnableVertexAttribArray(vNormalName); - renderer.EnableVertexAttribArray("vTangent"); - renderer.EnableVertexAttribArray("vBinormal"); - renderer.EnableVertexAttribArray(vTexCoordName); - float dist = planetData.distanceToPlanetSurfaceFast(Environment::shipState.position); auto zRange = planetData.calculateZRange(dist); @@ -376,12 +359,6 @@ namespace ZL { renderer.PopMatrix(); renderer.PopProjectionMatrix(); - renderer.DisableVertexAttribArray(vTexCoordName); - renderer.DisableVertexAttribArray(vNormalName); - renderer.DisableVertexAttribArray("vTangent"); - renderer.DisableVertexAttribArray("vBinormal"); - renderer.DisableVertexAttribArray(vColorName); - renderer.DisableVertexAttribArray(vPositionName); renderer.shaderManager.PopShader(); CheckGlError(); @@ -391,19 +368,10 @@ namespace ZL { void PlanetObject::drawStones(Renderer& renderer) { static const std::string defaultShaderName2 = "planetStone"; - static const std::string vPositionName = "vPosition"; - static const std::string vColorName = "vColor"; - static const std::string vNormalName = "vNormal"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; renderer.shaderManager.PushShader(defaultShaderName2); renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vColorName); - renderer.EnableVertexAttribArray(vNormalName); - renderer.EnableVertexAttribArray(vTexCoordName); - float dist = planetData.distanceToPlanetSurfaceFast(Environment::shipState.position); auto zRange = planetData.calculateZRange(dist); @@ -468,10 +436,6 @@ namespace ZL { renderer.PopMatrix(); renderer.PopProjectionMatrix(); - renderer.DisableVertexAttribArray(vTexCoordName); - renderer.DisableVertexAttribArray(vNormalName); - renderer.DisableVertexAttribArray(vColorName); - renderer.DisableVertexAttribArray(vPositionName); renderer.shaderManager.PopShader(); CheckGlError(); @@ -480,16 +444,10 @@ namespace ZL { void PlanetObject::drawAtmosphere(Renderer& renderer) { static const std::string defaultShaderName = "defaultAtmosphere"; - //static const std::string defaultShaderName = "defaultColor"; - static const std::string vPositionName = "vPosition"; - static const std::string vNormalName = "vNormal"; //glClear(GL_DEPTH_BUFFER_BIT); glDepthMask(GL_FALSE); renderer.shaderManager.PushShader(defaultShaderName); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vNormalName); - float dist = planetData.distanceToPlanetSurfaceFast(Environment::shipState.position); auto zRange = planetData.calculateZRange(dist); float currentZNear = zRange.first; @@ -571,9 +529,6 @@ namespace ZL { glDepthMask(GL_TRUE); renderer.PopMatrix(); renderer.PopProjectionMatrix(); - - renderer.DisableVertexAttribArray(vNormalName); - renderer.DisableVertexAttribArray(vPositionName); renderer.shaderManager.PopShader(); CheckGlError(); @@ -582,19 +537,10 @@ namespace ZL { void PlanetObject::drawCamp(Renderer& renderer) { static const std::string defaultShaderName2 = "default"; - static const std::string vPositionName = "vPosition"; - static const std::string vColorName = "vColor"; - static const std::string vNormalName = "vNormal"; - static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; renderer.shaderManager.PushShader(defaultShaderName2); renderer.RenderUniform1i(textureUniformName, 0); - renderer.EnableVertexAttribArray(vPositionName); - renderer.EnableVertexAttribArray(vColorName); - renderer.EnableVertexAttribArray(vNormalName); - renderer.EnableVertexAttribArray(vTexCoordName); - float dist = planetData.distanceToPlanetSurfaceFast(Environment::shipState.position); auto zRange = planetData.calculateZRange(dist); @@ -655,10 +601,6 @@ namespace ZL { renderer.PopMatrix(); renderer.PopProjectionMatrix(); - renderer.DisableVertexAttribArray(vTexCoordName); - renderer.DisableVertexAttribArray(vNormalName); - renderer.DisableVertexAttribArray(vColorName); - renderer.DisableVertexAttribArray(vPositionName); renderer.shaderManager.PopShader(); CheckGlError(); diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 748b7f3..795c243 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -50,17 +50,14 @@ namespace ZL { Matrix4f r; - // ��������������� r.data()[0] = 2.f / width; r.data()[5] = 2.f / height; r.data()[10] = -1.f / depthRange; - // ��������� �������������� ����������� r.data()[1] = r.data()[2] = r.data()[3] = 0; r.data()[4] = r.data()[6] = r.data()[7] = 0; r.data()[8] = r.data()[9] = r.data()[11] = 0; - // ���������� (��������) r.data()[12] = -(xmax + xmin) / width; r.data()[13] = -(ymax + ymin) / height; r.data()[14] = zNear / depthRange; @@ -703,19 +700,7 @@ namespace ZL { Matrix4f m = Matrix4f::Identity(); m.block<3, 3>(0, 0) = m3; - /* - m.m[0] = m3.data()[0]; - m.m[1] = m3.data()[1]; - m.m[2] = m3.data()[2]; - m.m[4] = m3.data()[3]; - m.m[5] = m3.data()[4]; - m.m[6] = m3.data()[5]; - - m.m[8] = m3.data()[6]; - m.m[9] = m3.data()[7]; - m.m[10] = m3.data()[8]; - */ m = ModelviewMatrixStack.top() * m; if (ModelviewMatrixStack.size() == 0) @@ -733,17 +718,7 @@ namespace ZL { void Renderer::RotateMatrix(const Matrix3f& m3) { Matrix4f m = Matrix4f::Identity(); - /*m.m[0] = m3.data()[0]; - m.m[1] = m3.data()[1]; - m.m[2] = m3.data()[2]; - m.m[4] = m3.data()[3]; - m.m[5] = m3.data()[4]; - m.m[6] = m3.data()[5]; - - m.m[8] = m3.data()[6]; - m.m[9] = m3.data()[7]; - m.m[10] = m3.data()[8];*/ m.block<3, 3>(0, 0) = m3; m = ModelviewMatrixStack.top() * m; @@ -782,22 +757,6 @@ namespace ZL { SetMatrix(); } - - void Renderer::EnableVertexAttribArray(const std::string& attribName) - { - - auto shader = shaderManager.GetCurrentShader(); - if (shader->attribList.find(attribName) != shader->attribList.end()) - glEnableVertexAttribArray(shader->attribList[attribName]); - } - - void Renderer::DisableVertexAttribArray(const std::string& attribName) - { - auto shader = shaderManager.GetCurrentShader(); - if (shader->attribList.find(attribName) != shader->attribList.end()) - glDisableVertexAttribArray(shader->attribList[attribName]); - } - void Renderer::RenderUniformMatrix3fv(const std::string& uniformName, bool transpose, const float* value) { auto shader = shaderManager.GetCurrentShader(); @@ -902,56 +861,56 @@ namespace ZL { { glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.normalVBO->getBuffer()); VertexAttribPointer3fv(vNormal, 0, NULL); - EnableVertexAttribArray(vNormal); + //EnableVertexAttribArray(vNormal); } else { - DisableVertexAttribArray(vNormal); + //DisableVertexAttribArray(vNormal); } if (VertexRenderStruct.data.TangentData.size() > 0) { glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.tangentVBO->getBuffer()); VertexAttribPointer3fv(vTangent, 0, NULL); - EnableVertexAttribArray(vTangent); + //EnableVertexAttribArray(vTangent); } else { - DisableVertexAttribArray(vTangent); + //DisableVertexAttribArray(vTangent); } if (VertexRenderStruct.data.BinormalData.size() > 0) { glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.binormalVBO->getBuffer()); VertexAttribPointer3fv(vBinormal, 0, NULL); - EnableVertexAttribArray(vBinormal); + //EnableVertexAttribArray(vBinormal); } else { - DisableVertexAttribArray(vBinormal); + //DisableVertexAttribArray(vBinormal); } if (VertexRenderStruct.data.ColorData.size() > 0) { glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.colorVBO->getBuffer()); VertexAttribPointer3fv(vColor, 0, NULL); - EnableVertexAttribArray(vColor); + //EnableVertexAttribArray(vColor); } else { - DisableVertexAttribArray(vColor); + //DisableVertexAttribArray(vColor); } if (VertexRenderStruct.data.TexCoordData.size() > 0) { glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.texCoordVBO->getBuffer()); VertexAttribPointer2fv(vTexCoord, 0, NULL); - EnableVertexAttribArray(vTexCoord); + //EnableVertexAttribArray(vTexCoord); } else { - DisableVertexAttribArray(vTexCoord); + //DisableVertexAttribArray(vTexCoord); } glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.positionVBO->getBuffer()); VertexAttribPointer3fv(vPosition, 0, NULL); - EnableVertexAttribArray(vPosition); + //EnableVertexAttribArray(vPosition); glDrawArrays(GL_TRIANGLES, 0, static_cast(VertexRenderStruct.data.PositionData.size())); } diff --git a/src/render/Renderer.h b/src/render/Renderer.h index 656752a..4096089 100644 --- a/src/render/Renderer.h +++ b/src/render/Renderer.h @@ -127,13 +127,6 @@ namespace ZL { void SetMatrix(); - - - void EnableVertexAttribArray(const std::string& attribName); - - void DisableVertexAttribArray(const std::string& attribName); - - void RenderUniformMatrix3fv(const std::string& uniformName, bool transpose, const float* value); void RenderUniformMatrix4fv(const std::string& uniformName, bool transpose, const float* value); void RenderUniform1i(const std::string& uniformName, const int value); diff --git a/src/render/ShaderManager.cpp b/src/render/ShaderManager.cpp index 45c8140..f2b4f60 100644 --- a/src/render/ShaderManager.cpp +++ b/src/render/ShaderManager.cpp @@ -167,7 +167,6 @@ namespace ZL { fragmentShader = readTextFile(fragmentShaderFileName); } - ///std::cout << "Shader: "<< vertexShader << std::endl; shaderResourceMap[shaderName] = std::make_shared(vertexShader, fragmentShader); } @@ -181,9 +180,27 @@ namespace ZL { throw std::runtime_error("Shader does not exist!"); } + if (shaderStack.size() > 0) + { + auto& prevShaderAttribList = shaderResourceMap[shaderStack.top()]->attribList; + for (auto& attrib : prevShaderAttribList) + { + glDisableVertexAttribArray(attrib.second); + } + } + shaderStack.push(shaderName); - glUseProgram(shaderResourceMap[shaderName]->getShaderProgram()); + auto& shaderResource = shaderResourceMap[shaderName]; + + glUseProgram(shaderResource->getShaderProgram()); + + auto& shaderAttribList = shaderResource->attribList; + for (auto& attrib : shaderAttribList) + { + glEnableVertexAttribArray(attrib.second); + } + } @@ -192,12 +209,26 @@ namespace ZL { throw std::runtime_error("Shader stack underflow!"); } + auto& prevShaderAttribList = shaderResourceMap[shaderStack.top()]->attribList; + for (auto& attrib : prevShaderAttribList) + { + glDisableVertexAttribArray(attrib.second); + } + shaderStack.pop(); if (shaderStack.size() == 0) { glUseProgram(0); } else { - glUseProgram(shaderResourceMap[shaderStack.top()]->getShaderProgram()); + auto& shaderResource = shaderResourceMap[shaderStack.top()]; + + glUseProgram(shaderResource->getShaderProgram()); + + auto& shaderAttribList = shaderResource->attribList; + for (auto& attrib : shaderAttribList) + { + glEnableVertexAttribArray(attrib.second); + } } } diff --git a/src/render/TextRenderer.cpp b/src/render/TextRenderer.cpp index 73e2db1..6e1c0ea 100644 --- a/src/render/TextRenderer.cpp +++ b/src/render/TextRenderer.cpp @@ -380,10 +380,6 @@ void TextRenderer::drawText(const std::string& text, float x, float y, float sca glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, atlasTexture->getTexID()); - - r->EnableVertexAttribArray("vPosition"); - r->EnableVertexAttribArray("vTexCoord"); - //for (size_t i = 0; i < text.length(); ++i) { // auto it = glyphs.find(text[i]); // if (it == glyphs.end()) continue; @@ -401,9 +397,6 @@ void TextRenderer::drawText(const std::string& text, float x, float y, float sca // glDrawArrays(GL_TRIANGLES, 0, 6); //} r->DrawVertexRenderStruct(cached.mesh); - - r->DisableVertexAttribArray("vPosition"); - r->DisableVertexAttribArray("vTexCoord"); r->shaderManager.PopShader(); // Сброс бинда текстуры не обязателен, но можно для чистоты