graphene

annotate src/opengl.cc @ 1:f85a59195206

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 24 Jul 2015 01:28:00 +0300
parents
children
rev   line source
nuclear@1 1 #include <stdio.h>
nuclear@1 2 #include <stdlib.h>
nuclear@1 3 #include <string.h>
nuclear@1 4 #include "opengl.h"
nuclear@1 5
nuclear@1 6 namespace gph {
nuclear@1 7
nuclear@1 8 GLCaps glcaps;
nuclear@1 9
nuclear@1 10 static void fill_glcaps();
nuclear@1 11 static void print_glcaps(GLCaps *caps);
nuclear@1 12
nuclear@1 13 bool init_opengl()
nuclear@1 14 {
nuclear@1 15 glewInit();
nuclear@1 16 fill_glcaps();
nuclear@1 17 return true;
nuclear@1 18 }
nuclear@1 19
nuclear@1 20 static void fill_glcaps()
nuclear@1 21 {
nuclear@1 22 memset(&glcaps, 0, sizeof glcaps);
nuclear@1 23
nuclear@1 24 glcaps.version = strdup((const char*)glGetString(GL_VERSION));
nuclear@1 25 glcaps.renderer = strdup((const char*)glGetString(GL_RENDERER));
nuclear@1 26 glcaps.vendor = strdup((const char*)glGetString(GL_VENDOR));
nuclear@1 27
nuclear@1 28 glcaps.sdr = GLEW_ARB_shading_language_100;
nuclear@1 29 if(glcaps.sdr) {
nuclear@1 30 glcaps.sdr_ver = strdup((const char*)glGetString(GL_SHADING_LANGUAGE_VERSION));
nuclear@1 31 }
nuclear@1 32
nuclear@1 33 glcaps.fbo = GLEW_ARB_framebuffer_object || GLEW_EXT_framebuffer_object;
nuclear@1 34 glcaps.tex_float = GLEW_ARB_texture_float;
nuclear@1 35 glcaps.npow2_tex = GLEW_ARB_texture_non_power_of_two;
nuclear@1 36 glcaps.fsaa = GLEW_ARB_multisample;
nuclear@1 37
nuclear@1 38 glGetIntegerv(GL_MAX_TEXTURE_UNITS, &glcaps.max_tex_units);
nuclear@1 39 if(glcaps.fbo) {
nuclear@1 40 glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &glcaps.max_mrt);
nuclear@1 41 }
nuclear@1 42 if(glcaps.fsaa) {
nuclear@1 43 glGetIntegerv(GL_MAX_SAMPLES, &glcaps.max_samples);
nuclear@1 44 } else {
nuclear@1 45 glcaps.max_samples = 1;
nuclear@1 46 }
nuclear@1 47 if(GLEW_EXT_texture_filter_anisotropic) {
nuclear@1 48 glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glcaps.max_aniso);
nuclear@1 49 } else {
nuclear@1 50 glcaps.max_aniso = 1.0f;
nuclear@1 51 }
nuclear@1 52
nuclear@1 53 print_glcaps(&glcaps);
nuclear@1 54 }
nuclear@1 55
nuclear@1 56 static void print_glcaps(GLCaps *caps)
nuclear@1 57 {
nuclear@1 58 printf("OpenGL %s - %s - %s\n", caps->version, caps->vendor, caps->renderer);
nuclear@1 59
nuclear@1 60 printf("--- capabilities ---\n");
nuclear@1 61 printf(" GLSL shaders: %s\n", caps->sdr ? "yes" : "no");
nuclear@1 62 if(caps->sdr) {
nuclear@1 63 printf(" GLSL version: %s\n", caps->sdr_ver);
nuclear@1 64 }
nuclear@1 65 printf("framebuffer objects: %s\n", caps->fbo ? "yes" : "no");
nuclear@1 66 if(caps->fbo) {
nuclear@1 67 printf(" max render targets: %d\n", caps->max_mrt);
nuclear@1 68 }
nuclear@1 69 printf(" antialiasing: %s\n", caps->fsaa ? "yes" : "no");
nuclear@1 70 if(caps->fsaa) {
nuclear@1 71 printf(" max samples: %d\n", caps->max_samples);
nuclear@1 72 }
nuclear@1 73 printf(" float textures: %s\n", caps->tex_float ? "yes" : "no");
nuclear@1 74 printf(" non-pow2 textures: %s\n", caps->npow2_tex ? "yes" : "no");
nuclear@1 75 printf(" texture units: %d\n", caps->max_tex_units);
nuclear@1 76 printf("--------------------\n");
nuclear@1 77 }
nuclear@1 78
nuclear@1 79 } // namespace gph