nuclear@1: #include nuclear@1: #include nuclear@1: #include nuclear@1: #include "opengl.h" nuclear@1: nuclear@1: namespace gph { nuclear@1: nuclear@1: GLCaps glcaps; nuclear@1: nuclear@1: static void fill_glcaps(); nuclear@1: static void print_glcaps(GLCaps *caps); nuclear@1: nuclear@1: bool init_opengl() nuclear@1: { nuclear@1: glewInit(); nuclear@1: fill_glcaps(); nuclear@1: return true; nuclear@1: } nuclear@1: nuclear@1: static void fill_glcaps() nuclear@1: { nuclear@1: memset(&glcaps, 0, sizeof glcaps); nuclear@1: nuclear@1: glcaps.version = strdup((const char*)glGetString(GL_VERSION)); nuclear@1: glcaps.renderer = strdup((const char*)glGetString(GL_RENDERER)); nuclear@1: glcaps.vendor = strdup((const char*)glGetString(GL_VENDOR)); nuclear@1: nuclear@1: glcaps.sdr = GLEW_ARB_shading_language_100; nuclear@1: if(glcaps.sdr) { nuclear@1: glcaps.sdr_ver = strdup((const char*)glGetString(GL_SHADING_LANGUAGE_VERSION)); nuclear@1: } nuclear@1: nuclear@1: glcaps.fbo = GLEW_ARB_framebuffer_object || GLEW_EXT_framebuffer_object; nuclear@1: glcaps.tex_float = GLEW_ARB_texture_float; nuclear@1: glcaps.npow2_tex = GLEW_ARB_texture_non_power_of_two; nuclear@1: glcaps.fsaa = GLEW_ARB_multisample; nuclear@1: nuclear@1: glGetIntegerv(GL_MAX_TEXTURE_UNITS, &glcaps.max_tex_units); nuclear@1: if(glcaps.fbo) { nuclear@1: glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &glcaps.max_mrt); nuclear@1: } nuclear@1: if(glcaps.fsaa) { nuclear@1: glGetIntegerv(GL_MAX_SAMPLES, &glcaps.max_samples); nuclear@1: } else { nuclear@1: glcaps.max_samples = 1; nuclear@1: } nuclear@1: if(GLEW_EXT_texture_filter_anisotropic) { nuclear@1: glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glcaps.max_aniso); nuclear@1: } else { nuclear@1: glcaps.max_aniso = 1.0f; nuclear@1: } nuclear@1: nuclear@1: print_glcaps(&glcaps); nuclear@1: } nuclear@1: nuclear@1: static void print_glcaps(GLCaps *caps) nuclear@1: { nuclear@1: printf("OpenGL %s - %s - %s\n", caps->version, caps->vendor, caps->renderer); nuclear@1: nuclear@1: printf("--- capabilities ---\n"); nuclear@1: printf(" GLSL shaders: %s\n", caps->sdr ? "yes" : "no"); nuclear@1: if(caps->sdr) { nuclear@1: printf(" GLSL version: %s\n", caps->sdr_ver); nuclear@1: } nuclear@1: printf("framebuffer objects: %s\n", caps->fbo ? "yes" : "no"); nuclear@1: if(caps->fbo) { nuclear@1: printf(" max render targets: %d\n", caps->max_mrt); nuclear@1: } nuclear@1: printf(" antialiasing: %s\n", caps->fsaa ? "yes" : "no"); nuclear@1: if(caps->fsaa) { nuclear@1: printf(" max samples: %d\n", caps->max_samples); nuclear@1: } nuclear@1: printf(" float textures: %s\n", caps->tex_float ? "yes" : "no"); nuclear@1: printf(" non-pow2 textures: %s\n", caps->npow2_tex ? "yes" : "no"); nuclear@1: printf(" texture units: %d\n", caps->max_tex_units); nuclear@1: printf("--------------------\n"); nuclear@1: } nuclear@1: nuclear@1: } // namespace gph