mirror of https://github.com/mosra/magnum.git
Browse Source
Similar to `glxinfo`, displays information about Magnum engine and OpenGL capabilities. Currently for Unix/X11 only, as I don't have windowless application implementation for other platforms.pull/7/head
3 changed files with 123 additions and 0 deletions
@ -0,0 +1,109 @@ |
|||||||
|
/*
|
||||||
|
Copyright © 2010, 2011, 2012 Vladimír Vondruš <mosra@centrum.cz> |
||||||
|
|
||||||
|
This file is part of Magnum. |
||||||
|
|
||||||
|
Magnum is free software: you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU Lesser General Public License version 3 |
||||||
|
only, as published by the Free Software Foundation. |
||||||
|
|
||||||
|
Magnum is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
GNU Lesser General Public License version 3 for more details. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <Utility/Debug.h> |
||||||
|
|
||||||
|
#include "Context.h" |
||||||
|
#include "Platform/WindowlessGlxApplication.h" |
||||||
|
|
||||||
|
namespace Magnum { |
||||||
|
|
||||||
|
class MagnumInfo: public Platform::WindowlessGlxApplication { |
||||||
|
public: |
||||||
|
MagnumInfo(int& argc, char** argv); |
||||||
|
|
||||||
|
inline int exec() override { return 0; } |
||||||
|
}; |
||||||
|
|
||||||
|
MagnumInfo::MagnumInfo(int& argc, char** argv): WindowlessGlxApplication(argc, argv) { |
||||||
|
Context* c = Context::current(); |
||||||
|
|
||||||
|
Debug() << ""; |
||||||
|
Debug() << " +---------------------------------------------------------+"; |
||||||
|
Debug() << " | Information about Magnum engine and OpenGL capabilities |"; |
||||||
|
Debug() << " +---------------------------------------------------------+"; |
||||||
|
Debug() << ""; |
||||||
|
|
||||||
|
Debug() << "Used application: Platform::WindowlessGlxApplication"; |
||||||
|
{ |
||||||
|
Debug d; |
||||||
|
d << "Compilation flags:"; |
||||||
|
#ifdef MAGNUM_TARGET_GLES |
||||||
|
d << "MAGNUM_TARGET_GLES"; |
||||||
|
#endif |
||||||
|
#ifdef MAGNUM_TARGET_GLES2 |
||||||
|
d << "MAGNUM_TARGET_GLES2"; |
||||||
|
#endif |
||||||
|
#ifdef MAGNUM_TARGET_NACL |
||||||
|
d << "MAGNUM_TARGET_NACL"; |
||||||
|
#endif |
||||||
|
#ifdef CORRADE_GCC46_COMPATIBILITY |
||||||
|
d << "CORRADE_GCC46_COMPATIBILITY"; |
||||||
|
#endif |
||||||
|
} |
||||||
|
Debug() << ""; |
||||||
|
|
||||||
|
Debug() << "Vendor:" << c->vendorString(); |
||||||
|
Debug() << "Renderer:" << c->rendererString(); |
||||||
|
Debug() << "OpenGL version:" << c->version() << '(' + c->versionString() + ')'; |
||||||
|
Debug() << "GLSL version:" << c->version() << '(' + c->shadingLanguageVersionString() + ')'; |
||||||
|
Debug() << ""; |
||||||
|
|
||||||
|
/* Get first future (not supported) version */ |
||||||
|
std::vector<Version> versions{ |
||||||
|
#ifndef MAGNUM_TARGET_GLES |
||||||
|
Version::GL300, |
||||||
|
Version::GL310, |
||||||
|
Version::GL320, |
||||||
|
Version::GL330, |
||||||
|
Version::GL400, |
||||||
|
Version::GL410, |
||||||
|
Version::GL420, |
||||||
|
Version::GL430, |
||||||
|
#else |
||||||
|
Version::GLES200, |
||||||
|
Version::GLES300, |
||||||
|
#endif |
||||||
|
Version::None |
||||||
|
}; |
||||||
|
std::size_t future = 0; |
||||||
|
while(versions[future] != Version::None && c->isVersionSupported(versions[future])) |
||||||
|
++future; |
||||||
|
|
||||||
|
/* Display supported OpenGL extensions from unsupported versions */ |
||||||
|
for(std::size_t i = future; i != versions.size(); ++i) { |
||||||
|
if(versions[i] != Version::None) |
||||||
|
Debug() << versions[i] << "extension support:"; |
||||||
|
else Debug() << "Vendor extension support:"; |
||||||
|
|
||||||
|
for(const auto& extension: Extension::extensions(versions[i])) { |
||||||
|
std::string extensionName = extension.string(); |
||||||
|
Debug d; |
||||||
|
d << " " << extensionName << std::string(60-extensionName.size(), ' '); |
||||||
|
if(c->isExtensionSupported(extension)) |
||||||
|
d << "SUPPORTED"; |
||||||
|
else if(c->isVersionSupported(extension.requiredVersion())) |
||||||
|
d << " - "; |
||||||
|
else |
||||||
|
d << " --- "; |
||||||
|
} |
||||||
|
|
||||||
|
Debug() << ""; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
MAGNUM_WINDOWLESSGLXAPPLICATION_MAIN(Magnum::MagnumInfo) |
||||||
Loading…
Reference in new issue