diff --git a/source/renderer/backend/gl/ShaderProgram.cpp b/source/renderer/backend/gl/ShaderProgram.cpp index f5dba1f364..65b1df5555 100644 --- a/source/renderer/backend/gl/ShaderProgram.cpp +++ b/source/renderer/backend/gl/ShaderProgram.cpp @@ -358,13 +358,13 @@ class CShaderProgramGLSL : public CShaderProgram { public: CShaderProgramGLSL( - CDevice* device, + CDevice* device, const CStr& name, const VfsPath& vertexFile, const VfsPath& fragmentFile, const CShaderDefines& defines, const std::map& vertexAttribs, int streamflags) : CShaderProgram(streamflags), - m_Device(device), + m_Device(device), m_Name(name), m_VertexFile(vertexFile), m_FragmentFile(fragmentFile), m_Defines(defines), m_VertexAttribs(vertexAttribs) { @@ -376,6 +376,11 @@ public: m_FragmentShader = glCreateShader(GL_FRAGMENT_SHADER); m_FileDependencies = {m_VertexFile, m_FragmentFile}; +#if !CONFIG2_GLES + glObjectLabel(GL_SHADER, m_VertexShader, -1, vertexFile.string8().c_str()); + glObjectLabel(GL_SHADER, m_FragmentShader, -1, fragmentFile.string8().c_str()); +#endif + Load(); } @@ -435,6 +440,10 @@ public: ENSURE(!m_Program); m_Program = glCreateProgram(); +#if !CONFIG2_GLES + glObjectLabel(GL_PROGRAM, m_Program, -1, m_Name.c_str()); +#endif + glAttachShader(m_Program, m_VertexShader); ogl_WarnIfError(); glAttachShader(m_Program, m_FragmentShader); @@ -806,6 +815,7 @@ public: private: CDevice* m_Device = nullptr; + CStr m_Name; VfsPath m_VertexFile; VfsPath m_FragmentFile; std::vector m_FileDependencies; @@ -981,7 +991,7 @@ std::unique_ptr CShaderProgram::Create(CDevice* device, const CS } if (root.GetAttributes().GetNamedItem(at_type) == "glsl") - return CShaderProgram::ConstructGLSL(device, vertexFile, fragmentFile, defines, vertexAttribs, streamFlags); + return CShaderProgram::ConstructGLSL(device, name, vertexFile, fragmentFile, defines, vertexAttribs, streamFlags); else return CShaderProgram::ConstructARB(device, vertexFile, fragmentFile, defines, vertexUniforms, fragmentUniforms, streamFlags); } @@ -1013,12 +1023,13 @@ std::unique_ptr CShaderProgram::ConstructARB( // static std::unique_ptr CShaderProgram::ConstructGLSL( - CDevice* device, const VfsPath& vertexFile, const VfsPath& fragmentFile, + CDevice* device, const CStr& name, + const VfsPath& vertexFile, const VfsPath& fragmentFile, const CShaderDefines& defines, const std::map& vertexAttribs, int streamflags) { return std::make_unique( - device, vertexFile, fragmentFile, defines, vertexAttribs, streamflags); + device, name, vertexFile, fragmentFile, defines, vertexAttribs, streamflags); } int CShaderProgram::GetStreamFlags() const diff --git a/source/renderer/backend/gl/ShaderProgram.h b/source/renderer/backend/gl/ShaderProgram.h index 7642a30808..d6ad5ff994 100644 --- a/source/renderer/backend/gl/ShaderProgram.h +++ b/source/renderer/backend/gl/ShaderProgram.h @@ -191,7 +191,8 @@ protected: * Construct based on GLSL vertex/fragment shader files. */ static std::unique_ptr ConstructGLSL( - CDevice* device, const VfsPath& vertexFile, const VfsPath& fragmentFile, + CDevice* device, const CStr& name, + const VfsPath& vertexFile, const VfsPath& fragmentFile, const CShaderDefines& defines, const std::map& vertexAttribs, int streamflags);