59 if (version.empty()) {
63 std::stringstream stream;
64 for (
size_t i = 0; i < version.size(); i++) {
72 std::istringstream istream;
73 istream.str(stream.str());
74 std::vector<size_t> version_components;
75 for (std::string version_component;
76 std::getline(istream, version_component,
'.');) {
77 version_components.push_back(std::stoul(version_component));
86 sl_version_string_(
GetGLString(gl, GL_SHADING_LANGUAGE_VERSION)) {
91 if (!gl_version.has_value()) {
95 gl_version_ = gl_version.value();
99 int extension_count = 0;
100 gl.GetIntegerv(GL_NUM_EXTENSIONS, &extension_count);
101 for (
auto i = 0; i < extension_count; i++) {
105 const auto extensions =
GetGLString(gl, GL_EXTENSIONS);
106 std::stringstream extensions_stream(extensions);
107 std::string extension;
108 while (std::getline(extensions_stream, extension,
' ')) {
109 extensions_.insert(extension);
114 if (!sl_version.has_value()) {
118 sl_version_ = sl_version.value();
131 return "Unknown Renderer.";
134 std::vector<std::pair<std::string, std::string>> items;
136 items.emplace_back(std::make_pair(
"Vendor", vendor_));
137 items.emplace_back(std::make_pair(
"Renderer", renderer_));
138 items.emplace_back(std::make_pair(
"GL Version", gl_version_string_));
140 std::make_pair(
"Shading Language Version", sl_version_string_));
142 std::make_pair(
"Extensions", std::to_string(extensions_.size())));
144 size_t max_width = 0u;
145 for (
const auto& item : items) {
146 max_width = std::max(max_width, item.first.size());
149 std::stringstream stream;
150 stream <<
"OpenGL Renderer:" << std::endl;
151 for (
const auto& item : items) {
152 stream << std::setw(max_width + 1) << item.first <<
": " << item.second
156 const auto pad = std::string(max_width + 3,
' ');
157 for (
const auto& extension : extensions_) {
158 stream << pad << extension << std::endl;