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
|