Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /examples/iso2d-spatial/utils/utils.c
ViewVC logotype

Annotation of /examples/iso2d-spatial/utils/utils.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2950 - (view) (download) (as text)

1 : lamonts 2950 #include "utils.h"
2 :    
3 :     static GLchar * utils_readFile (const char *file);
4 :     static const char * utils_shaderName (GLenum kind);
5 :    
6 :     void reportError (GLenum err, const char *file, int line, const char *msg){
7 :     const char *error;
8 :    
9 :     switch (err) {
10 :     case GL_INVALID_ENUM: error = "invalid enum"; break;
11 :     case GL_INVALID_VALUE: error = "invalid value"; break;
12 :     case GL_INVALID_OPERATION: error = "invalid operation"; break;
13 :     case GL_INVALID_FRAMEBUFFER_OPERATION: error = "invalid framebuffer operation"; break;
14 :     case GL_OUT_OF_MEMORY: error = "out of memory"; break;
15 :     default: error = "unknown"; break;
16 :     }
17 :    
18 :     fprintf(stderr, "[%s:%d] %s; %s\n\n",file,line,error,msg);
19 :    
20 :     exit (EXIT_FAILURE);
21 :     }
22 :    
23 :     void checkError (const char *file, int line, const char *msg)
24 :     {
25 :     GLenum sts = glGetError();
26 :     if (sts != GL_NO_ERROR)
27 :     reportError (sts, file, line, msg);
28 :     }
29 :    
30 :    
31 :     GLuint utils_loadShadersFromFile(GLenum kind, const char * file){
32 :    
33 :     GLuint id = 0;
34 :    
35 :     id = glCreateShader(kind);
36 :    
37 :     if(id == 0){
38 :     fprintf(stderr,"Error creating shade: kind = %s, error = %d",utils_shaderName(kind),glGetError());
39 :     exit(EXIT_FAILURE);
40 :     }
41 :    
42 :     GLint sts;
43 :    
44 :     const GLchar *src = utils_readFile (file);
45 :    
46 :     if (src == NULL)
47 :     return id;
48 :    
49 :     glShaderSource (id, 1, &src, 0);
50 :    
51 :     free((void *)src);
52 :    
53 :     glCompileShader (id);
54 :    
55 :     /* check for errors */
56 :     glGetShaderiv (id, GL_COMPILE_STATUS, &sts);
57 :     if (sts != GL_TRUE) {
58 :     /* the compile failed, so report an error */
59 :     glGetShaderiv (id, GL_INFO_LOG_LENGTH, &sts);
60 :     if (sts != 0) {
61 :     GLchar *log = malloc(sizeof(GLchar) * sts);
62 :     glGetShaderInfoLog (id, sts, 0, log);
63 :     fprintf(stderr,"Error compiling %s shader \" %s \" :\n no log\n", utils_shaderName(kind), log);
64 :     free(log);
65 :     }
66 :     else
67 :     fprintf(stderr,"Error compiling %s shader \" %s \" :\n no log\n" , utils_shaderName(kind), file);
68 :     }
69 :    
70 :     return id;
71 :    
72 :     }
73 :     /* Create GL program */
74 :     GLuint utils_createGLProgram(GLuint vId, GLuint fId)
75 :     {
76 :     GLuint id = glCreateProgram();
77 :     if(id == 0){
78 :     fprintf(stderr, "Error creating shader program\n");
79 :     exit(EXIT_FAILURE);
80 :     }
81 :     //attach shaders
82 :     glAttachShader(id, vId);
83 :     glAttachShader(id, fId);
84 :    
85 :     //Link program
86 :     GLint sts;
87 :    
88 :     glLinkProgram (id);
89 :    
90 :     /* check for errors in the linking */
91 :     glGetProgramiv(id, GL_LINK_STATUS, &sts);
92 :     if (sts != GL_TRUE) {
93 :     /* the link failed, so report an error */
94 :     glGetProgramiv (id, GL_INFO_LOG_LENGTH, &sts);
95 :     if (sts != 0) {
96 :     GLchar *log = malloc(sizeof(GLchar) * sts);
97 :     glGetProgramInfoLog (id, sts, 0, log);
98 :     fprintf(stderr,"Error linking program:%s\n\n\n",log);
99 :     fprintf(stderr,"Shader ID = %d\n", id);
100 :     free(log);
101 :     }
102 :     else
103 :     fprintf(stderr,"Error linking program:\n no log\n\n");
104 :     exit (EXIT_FAILURE);
105 :     }
106 :     return id;
107 :     }
108 :    
109 :     /* Local functions */
110 :     static GLchar * utils_readFile (const char *file)
111 :     {
112 :     struct stat st;
113 :    
114 :     /* get the size of the file */
115 :     if (stat(file, &st) < 0) {
116 :     fprintf(stderr, "error reading the size of \" %s \"\n",file);
117 :     return 0;
118 :     }
119 :     size_t sz = st.st_size;
120 :    
121 :     /* open the file */
122 :     FILE *strm = fopen(file, "r");
123 :     if (strm == NULL) {
124 :     fprintf(stderr, "error openning \" %s \"\n",file);
125 :     return 0;
126 :     }
127 :    
128 :     /* allocate the buffer */
129 :     GLchar *buf = malloc(sizeof(GLchar) * (sz+1));
130 :    
131 :     /* read the file */
132 :     if (fread(buf, 1, sz, strm) != sz) {
133 :     fprintf(stderr, "error reading \" %s \"\n",file);
134 :     free (buf);
135 :     }
136 :     buf[sz] = '\0';
137 :    
138 :     fclose (strm);
139 :    
140 :     return buf;
141 :    
142 :     }
143 :     static const char *utils_shaderName (GLenum kind)
144 :     {
145 :     if (kind == GL_FRAGMENT_SHADER) return "fragment";
146 :     else if (kind == GL_VERTEX_SHADER) return "vertex";
147 :     else if (kind == GL_GEOMETRY_SHADER) return "geometry";
148 :     else return "unknown";
149 :     }

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0