00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "backendcapabilities.h"
00021
00022 #include "glheaders.h"
00023
00024 #include <QtCore/QStringList>
00025
00026 using namespace GluonGraphics;
00027
00028 int BackendCapabilities::backendVersion = -1;
00029 int BackendCapabilities::backendShaderVersion = -1;
00030
00031 BackendCapabilities::BackendType
00032 BackendCapabilities::type()
00033 {
00034 #ifdef GLUON_GRAPHICS_GLES
00035 return BT_OPENGLES;
00036 #else
00037 return BT_OPENGL;
00038 #endif
00039 }
00040
00041 int
00042 BackendCapabilities::version()
00043 {
00044 if(backendVersion != -1)
00045 return backendVersion;
00046
00047 const GLubyte* version = glGetString(GL_VERSION);
00048
00049 QString versionString = QString::fromAscii(reinterpret_cast<const char*>(version));
00050 QStringList versionParts = versionString.split('.');
00051
00052 int versionNumber = 0;
00053 versionNumber += versionParts.at(0).toInt() * 100;
00054 versionNumber += (versionParts.at(1).toInt() > 9) ? versionParts.at(1).toInt() : versionParts.at(1).toInt() * 10;
00055
00056 if(versionParts.count() > 2)
00057 versionNumber += qMin(versionParts.at(2).toInt(), 9);
00058
00059 backendVersion = versionNumber;
00060 return versionNumber;
00061 }
00062
00063 int
00064 BackendCapabilities::shaderVersion()
00065 {
00066 if(backendShaderVersion != -1)
00067 return backendShaderVersion;
00068
00069 const GLubyte* version = glGetString(GL_SHADING_LANGUAGE_VERSION);
00070 if(glGetError() == GL_INVALID_ENUM)
00071 return -1;
00072
00073 QString versionString = QString::fromAscii(reinterpret_cast<const char*>(version));
00074 QStringList versionParts = versionString.split('.');
00075
00076 int versionNumber = 0;
00077 versionNumber += versionParts.at(0).toInt() * 100;
00078 versionNumber += (versionParts.at(1).toInt() > 9) ? versionParts.at(1).toInt() : versionParts.at(1).toInt() * 10;
00079
00080 if(versionParts.count() > 2)
00081 versionNumber += qMin(versionParts.at(2).toInt(), 9);
00082
00083 return versionNumber;
00084 }