Changed CGL33Device requirement to OpenGL 3.2

dev-time-step
Tomasz Kapuściński 2016-02-10 22:50:40 +01:00
parent 447b466d6e
commit 898001e065
3 changed files with 30 additions and 7 deletions

View File

@ -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]);

View File

@ -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);

View File

@ -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[]);