1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
#include <iostream>
#include <map>
#include <array>
#include <set>
#include <cstring>
#include <GLFW/glfw3.h>
#include <glbinding-aux/Meta.h>
#include <glbinding/AbstractFunction.h>
#include <glbinding-aux/ContextInfo.h>
#include <glbinding/Version.h>
#include <glbinding/glbinding.h>
#include <glbinding/gl/gl.h>
#include <glbinding-aux/ValidVersions.h>
#include <glbinding-aux/types_to_string.h>
using namespace gl;
using namespace glbinding;
const auto gles_versions = std::set<glbinding::Version>({
glbinding::Version(2, 0),
glbinding::Version(3, 0),
glbinding::Version(3, 1),
glbinding::Version(3, 2),
});
void error(int errnum, const char * errmsg)
{
std::cerr << errnum << ": " << errmsg << std::endl;
}
void print(
const Version & version
, const Version & result)
{
std::cout << " " << version << " " << result << std::endl;
}
Version printVersionOfContextRequest(const Version & version)
{
glfwDefaultWindowHints();
glfwWindowHint(GLFW_VISIBLE, false);
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, version.majorVersion());
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, version.minorVersion());
GLFWwindow * window = glfwCreateWindow(320, 240, "", nullptr, nullptr);
if (!window)
{
print(version, Version());
return Version();
}
glfwMakeContextCurrent(window);
glbinding::initialize(glfwGetProcAddress, true);
auto result = aux::ContextInfo::version();
glfwMakeContextCurrent(window);
print(version, result);
glfwMakeContextCurrent(nullptr);
glfwDestroyWindow(window);
return result;
}
int main(int argc, char * argv[])
{
glfwSetErrorCallback(error);
if (!glfwInit())
return 1;
std::cout << std::endl << "test: requesting all context configurations ..." << std::endl
<< std::endl << " scheme: <requested_version> <created_version>" << std::endl << std::endl;
for (const auto & version : gles_versions)
{
printVersionOfContextRequest(version);
std::cout << std::endl;
}
glfwDefaultWindowHints();
glfwWindowHint(GLFW_VISIBLE, false);
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
#ifdef SYSTEM_DARWIN
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, true);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#endif
GLFWwindow * window = glfwCreateWindow(320, 240, "", nullptr, nullptr);
if (!window)
{
glfwTerminate();
return -1;
}
glfwHideWindow(window);
glfwMakeContextCurrent(window);
glbinding::initialize(glfwGetProcAddress, false); // only resolve functions that are actually used (lazy)
// print some gl infos (query)
std::cout
<< "OpenGL ES Version: " << aux::ContextInfo::version() << std::endl
<< "OpenGL ES Vendor: " << aux::ContextInfo::vendor() << std::endl
<< "OpenGL ES Renderer: " << aux::ContextInfo::renderer() << std::endl
<< "OpenGL Revision: " << aux::Meta::glRevision() << " (gl.xml)" << std::endl << std::endl;
glfwTerminate();
return 0;
}
|