**************************************************************************/
+#include <assert.h>
+
+#include "glproc.hpp"
#include "glws.hpp"
namespace glws {
-bool debug = true;
-
-
bool
checkExtension(const char *extName, const char *extString)
{
- const char *p = extString;
- const char *q = extName;
- char c;
- do {
- c = *p++;
- if (c == '\0' || c == ' ') {
- if (q && *q == '\0') {
- return true;
- } else {
- q = extName;
- }
- } else {
- if (q && *q == c) {
- ++q;
- } else {
- q = 0;
- }
- }
- } while (c);
- return false;
+ assert(extName);
+ assert(extString);
+
+ const char *p = extString;
+ const char *q = extName;
+ char c;
+ do {
+ c = *p++;
+ if (c == '\0' || c == ' ') {
+ if (q && *q == '\0') {
+ return true;
+ } else {
+ q = extName;
+ }
+ } else {
+ if (q && *q == c) {
+ ++q;
+ } else {
+ q = 0;
+ }
+ }
+ } while (c);
+ return false;
+}
+
+
+bool
+Context::hasExtension(const char *string) {
+ if (extensions.empty()) {
+ if (profile == PROFILE_CORE) {
+ // Use glGetStringi
+ GLint num_extensions = 0;
+ glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions);
+ for (int i = 0; i < num_extensions; ++i) {
+ const char *extension = reinterpret_cast<const char *>(glGetStringi(GL_EXTENSIONS, i));
+ if (extension) {
+ extensions.insert(extension);
+ }
+ }
+ } else {
+ // Use glGetString
+ const char *begin = reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS));
+ do {
+ const char *end = begin;
+ char c = *end;
+ while (c != '\0' && c != ' ') {
+ ++end;
+ c = *end;
+ }
+ if (end != begin) {
+ extensions.insert(std::string(begin, end));
+ }
+
+ if (c == '\0') {
+ break;
+ }
+ begin = end + 1;
+ } while(1);
+ }
+ }
+
+ return extensions.find(string) != extensions.end();
}