Use sRGB textures on the input side if applicable.
[movit] / util.cpp
1 #define GL_GLEXT_PROTOTYPES 1
2
3 #include <stdio.h>
4 #include <assert.h>
5
6 #include <GL/gl.h>
7 #include <GL/glext.h>
8
9 #include <math.h>
10 #include "util.h"
11
12 void hsv2rgb(float h, float s, float v, float *r, float *g, float *b)
13 {
14         if (h < 0.0f) {
15                 h += 2.0f * M_PI;
16         }
17         float c = v * s;
18         float hp = (h * 180.0 / M_PI) / 60.0;
19         float x = c * (1 - fabs(fmod(hp, 2.0f) - 1.0f));
20
21         if (hp >= 0 && hp < 1) {
22                 *r = c;
23                 *g = x;
24                 *b = 0.0f;
25         } else if (hp >= 1 && hp < 2) {
26                 *r = x;
27                 *g = c;
28                 *b = 0.0f;
29         } else if (hp >= 2 && hp < 3) {
30                 *r = 0.0f;
31                 *g = c;
32                 *b = x;
33         } else if (hp >= 3 && hp < 4) {
34                 *r = 0.0f;
35                 *g = x;
36                 *b = c;
37         } else if (hp >= 4 && hp < 5) {
38                 *r = x;
39                 *g = 0.0f;
40                 *b = c;
41         } else {
42                 *r = c;
43                 *g = 0.0f;
44                 *b = x;
45         }
46
47         float m = v - c;
48         *r += m;
49         *g += m;
50         *b += m;
51 }
52
53 std::string read_file(const std::string &filename)
54 {
55         static char buf[131072];
56         FILE *fp = fopen(filename.c_str(), "r");
57         if (fp == NULL) {
58                 perror(filename.c_str());
59                 exit(1);
60         }
61
62         int len = fread(buf, 1, sizeof(buf), fp);
63         fclose(fp);
64
65         return std::string(buf, len);
66 }
67
68 GLhandleARB compile_shader(const std::string &shader_src, GLenum type)
69 {
70         GLhandleARB obj = glCreateShaderObjectARB(type);
71         const GLchar* source[] = { shader_src.data() };
72         const GLint length[] = { shader_src.size() };
73         glShaderSource(obj, 1, source, length);
74         glCompileShader(obj);
75
76         GLchar info_log[4096];
77         GLsizei log_length = sizeof(info_log) - 1;
78         glGetShaderInfoLog(obj, log_length, &log_length, info_log);
79         info_log[log_length] = 0; 
80         printf("shader compile log: %s\n", info_log);
81
82         GLint status;
83         glGetShaderiv(obj, GL_COMPILE_STATUS, &status);
84         if (status == GL_FALSE) {
85                 exit(1);
86         }
87
88         return obj;
89 }
90