Added warnings and error messages to graphics devices regarding unsupported OpenGL version

dev-time-step
Tomasz Kapuściński 2015-12-18 21:04:16 +01:00
parent 6492908cef
commit aa2e14219e
5 changed files with 41 additions and 5 deletions

View File

@ -624,7 +624,10 @@ bool CApplication::Create()
if (! m_device->Create() ) if (! m_device->Create() )
{ {
m_errorMessage = std::string("Error in CDevice::Create()\n") + standardInfoMessage; m_errorMessage = std::string("Error in CDevice::Create()\n")
+ "\n\n"
+ m_device->GetError()
+ standardInfoMessage;
m_exitCode = 5; m_exitCode = 5;
return false; return false;
} }

View File

@ -276,9 +276,18 @@ public:
*/ */
class CDevice class CDevice
{ {
protected:
std::string m_errorMessage;
public: public:
virtual ~CDevice() {} virtual ~CDevice() {}
//! Returns last error message or empty string
inline std::string GetError()
{
return m_errorMessage;
}
//! Provides a hook to debug graphics code (implementation-specific) //! Provides a hook to debug graphics code (implementation-specific)
virtual void DebugHook() = 0; virtual void DebugHook() = 0;

View File

@ -177,6 +177,7 @@ bool CGL21Device::Create()
if (glewInit() != GLEW_OK) if (glewInit() != GLEW_OK)
{ {
GetLogger()->Error("GLEW initialization failed\n"); GetLogger()->Error("GLEW initialization failed\n");
m_errorMessage = "An error occured while initializing GLEW.";
return false; return false;
} }
@ -186,7 +187,11 @@ bool CGL21Device::Create()
if (m_glMajor < 2) if (m_glMajor < 2)
{ {
GetLogger()->Error("Your hardware does not support OpenGL 2.0 or 2.1."); GetLogger()->Error("Unsupported OpenGL version: %d.%d\n", m_glMajor, m_glMinor);
GetLogger()->Error("OpenGL 2.0 or newer is required to use this engine.\n");
m_errorMessage = "It seems your graphics card does not support OpenGL 2.0.\n";
m_errorMessage += "Please make sure you have appropriate hardware and newest drivers installed.\n";
m_errorMessage += "(OpenGL 2.0 is roughly equivalent to Direct3D 9)";
return false; return false;
} }

View File

@ -177,6 +177,7 @@ bool CGL33Device::Create()
if (glewInit() != GLEW_OK) if (glewInit() != GLEW_OK)
{ {
GetLogger()->Error("GLEW initialization failed\n"); GetLogger()->Error("GLEW initialization failed\n");
m_errorMessage = "An error occured while initializing GLEW.";
return false; return false;
} }
@ -187,12 +188,18 @@ bool CGL33Device::Create()
int glVersion = 10 * m_glMajor + m_glMinor; int glVersion = 10 * m_glMajor + m_glMinor;
if (glVersion < 30) if (glVersion < 30)
{ {
GetLogger()->Error("Your hardware does not support OpenGL 3.0+. Exiting.\n"); 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";
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)";
return false; return false;
} }
else if (glVersion < 33) else if (glVersion < 33)
{ {
GetLogger()->Warn("Full OpenGL 3.3 unavailable. Graphics might be bugged.\n"); GetLogger()->Warn("Partially supported OpenGL version: %d.%d\n", m_glMajor, m_glMinor);
GetLogger()->Warn("You may experience problems while running the game on this engine.\n");
GetLogger()->Warn("OpenGL 3.3 or newer is recommended.\n");
} }
else else
{ {

View File

@ -173,12 +173,24 @@ bool CGLDevice::Create()
if (glewInit() != GLEW_OK) if (glewInit() != GLEW_OK)
{ {
GetLogger()->Error("GLEW initialization failed\n"); GetLogger()->Error("GLEW initialization failed\n");
m_errorMessage = "An error occured while initializing GLEW.";
return false; return false;
} }
// Extract OpenGL version // Extract OpenGL version
const char *version = reinterpret_cast<const char*>(glGetString(GL_VERSION)); const char *version = reinterpret_cast<const char*>(glGetString(GL_VERSION));
sscanf(version, "%d.%d", &m_glMajor, &m_glMinor); sscanf(version, "%d.%d", &m_glMajor, &m_glMinor);
int glVersion = 10 * m_glMajor + m_glMinor;
if (glVersion < 13)
{
GetLogger()->Error("Unsupported OpenGL version: %d.%d\n", m_glMajor, m_glMinor);
GetLogger()->Error("OpenGL 1.3 or newer is required to use this engine.\n");
m_errorMessage = "It seems your graphics card does not support OpenGL 1.3.\n";
m_errorMessage += "Please make sure you have appropriate hardware and newest drivers installed.\n";
return false;
}
GetLogger()->Info("OpenGL %d.%d\n", m_glMajor, m_glMinor); GetLogger()->Info("OpenGL %d.%d\n", m_glMajor, m_glMinor);
// Detect multitexture support // Detect multitexture support
@ -306,7 +318,7 @@ bool CGLDevice::Create()
m_framebufferSupport = DetectFramebufferSupport(); m_framebufferSupport = DetectFramebufferSupport();
if (m_framebufferSupport != FBS_NONE) if (m_framebufferSupport != FBS_NONE)
GetLogger()->Debug("Framebuffer supported\n"); GetLogger()->Info("Framebuffer supported\n");
GetLogger()->Info("CDevice created successfully\n"); GetLogger()->Info("CDevice created successfully\n");