From 898001e0652bb45c0036dc7de4628bd1e2a46806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Kapu=C5=9Bci=C5=84ski?= Date: Wed, 10 Feb 2016 22:50:40 +0100 Subject: [PATCH] Changed CGL33Device requirement to OpenGL 3.2 --- src/graphics/opengl/gl33device.cpp | 26 +++++++++++++++++++------- src/graphics/opengl/glutil.cpp | 9 +++++++++ src/graphics/opengl/glutil.h | 2 ++ 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/graphics/opengl/gl33device.cpp b/src/graphics/opengl/gl33device.cpp index b0886465..61023d80 100644 --- a/src/graphics/opengl/gl33device.cpp +++ b/src/graphics/opengl/gl33device.cpp @@ -186,13 +186,13 @@ bool CGL33Device::Create() sscanf(version, "%d.%d", &m_glMajor, &m_glMinor); int glVersion = 10 * m_glMajor + m_glMinor; - if (glVersion < 30) + if (glVersion < 32) { GetLogger()->Error("Unsupported OpenGL version: %d.%d\n", m_glMajor, m_glMinor); - GetLogger()->Error("OpenGL 3.0 or newer is required to use this engine.\n"); - m_errorMessage = "It seems your graphics card does not support OpenGL 3.0.\n"; + GetLogger()->Error("OpenGL 3.2 or newer is required to use this engine.\n"); + m_errorMessage = "It seems your graphics card does not support OpenGL 3.2.\n"; m_errorMessage += "Please make sure you have appropriate hardware and newest drivers installed.\n"; - m_errorMessage += "(OpenGL 3.0 is roughly equivalent to Direct3D 10)\n\n"; + m_errorMessage += "(OpenGL 3.2 is roughly equivalent to Direct3D 10)\n\n"; m_errorMessage += GetHardwareInfo(false); return false; } @@ -275,7 +275,11 @@ bool CGL33Device::Create() sprintf(filename, "shaders/vertex_shader_33_pervertex.glsl"); shaders[0] = LoadShader(GL_VERTEX_SHADER, filename); - if (shaders[0] == 0) return false; + if (shaders[0] == 0) + { + m_errorMessage = GetLastShaderError(); + return false; + } if (m_perPixelLighting) sprintf(filename, "shaders/fragment_shader_33_perpixel.glsl"); @@ -283,10 +287,18 @@ bool CGL33Device::Create() sprintf(filename, "shaders/fragment_shader_33_pervertex.glsl"); shaders[1] = LoadShader(GL_FRAGMENT_SHADER, filename); - if (shaders[1] == 0) return false; + if (shaders[1] == 0) + { + m_errorMessage = GetLastShaderError(); + return false; + } m_shaderProgram = LinkProgram(2, shaders); - if (m_shaderProgram == 0) return false; + if (m_shaderProgram == 0) + { + m_errorMessage = GetLastShaderError(); + return false; + } glDeleteShader(shaders[0]); glDeleteShader(shaders[1]); diff --git a/src/graphics/opengl/glutil.cpp b/src/graphics/opengl/glutil.cpp index 41caf2e6..72ea019a 100644 --- a/src/graphics/opengl/glutil.cpp +++ b/src/graphics/opengl/glutil.cpp @@ -211,6 +211,13 @@ GLenum TranslateTextureCoordinateGen(int index) return textureCoordGen[index]; } +std::string lastShaderError; + +std::string GetLastShaderError() +{ + return lastShaderError; +} + GLint LoadShader(GLint type, const char* filename) { PHYSFS_file *file = PHYSFS_openRead(filename); @@ -244,6 +251,7 @@ GLint LoadShader(GLint type, const char* filename) glGetShaderInfoLog(shader, len + 1, nullptr, message.get()); GetLogger()->Error("Shader compilation error occured!\n%s\n", message.get()); + lastShaderError = std::string("Shader compilation error occured!\n\n") + std::string(message.get()); glDeleteShader(shader); return 0; @@ -276,6 +284,7 @@ GLint LinkProgram(int count, GLint shaders[]) glGetProgramInfoLog(program, len + 1, nullptr, message.get()); GetLogger()->Error("Shader program linking error occured!\n%s\n", message.get()); + lastShaderError = std::string("Shader program linking error occured!\n\n") + std::string(message.get()); glDeleteProgram(program); diff --git a/src/graphics/opengl/glutil.h b/src/graphics/opengl/glutil.h index 1c23140e..5ae4ff1b 100644 --- a/src/graphics/opengl/glutil.h +++ b/src/graphics/opengl/glutil.h @@ -74,6 +74,8 @@ GLenum TranslateTextureCoordinate(int index); GLenum TranslateTextureCoordinateGen(int index); +std::string GetLastShaderError(); + GLint LoadShader(GLint type, const char* filename); GLint LinkProgram(int count, GLint shaders[]);