UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
dxt_display.c
Go to the documentation of this file.
1
27#include "dxt_common.h"
28#include "dxt_decoder.h"
29#include "dxt_util.h"
30#include "dxt_glsl.h"
31
34{
35 // DXT type
37
38 // Width in pixels
39 int width;
40
41 // Height in pixels
42 int height;
43
44 // Texture id
45 GLuint texture_id;
46
47 // Comperessed texture id
49
50 // Current texture id
52
53 // Program and shader handles
54 GLhandleARB program_display;
58
59 // Show
60 int show;
61};
62
67
73void
75{
76 glClear(GL_COLOR_BUFFER_BIT);
77 glViewport(0, 0, glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT));
78
79 glUseProgramObjectARB(g_display.program_display);
80
83 glBindTexture(GL_TEXTURE_2D, g_display.texture_id);
85 glutSetWindowTitle("Display Image");
86 }
90 glUseProgramObjectARB(g_display.program_display_dxt5ycocg);
91 }
92 glBindTexture(GL_TEXTURE_2D, g_display.texture_compressed_id);
94 glutSetWindowTitle("Display Compressed Image");
95 }
96
97 glBegin(GL_QUADS);
98 glTexCoord2f(0.0, 0.0); glVertex2f(-1.0, -1.0);
99 glTexCoord2f(1.0, 0.0); glVertex2f(1.0, -1.0);
100 glTexCoord2f(1.0, 1.0); glVertex2f(1.0, 1.0);
101 glTexCoord2f(0.0, 1.0); glVertex2f(-1.0, 1.0);
102 glEnd();
103
104 glUseProgramObjectARB(0);
105
106 glutSwapBuffers();
107}
108
114void
115dxt_display_keyboard(unsigned char key, int x, int y)
116{
117 switch ( key ) {
118 case 9: // [Tab] Change texture
119 if ( g_display.texture_current_id != 0 ) {
124 glutPostRedisplay();
125 }
126 break;
127 case 27: // [ESC] Quit
128 g_display.show = 0;
129 return;
130 }
131}
132
138int
139dxt_display_init(const char* title, enum dxt_type type, int width, int height)
140{
147
148 int argc = 0;
149 if ( title != NULL )
150 glutSetWindowTitle(title);
151 glutReshapeWindow(width, height);
152 glutDisplayFunc(dxt_display_render);
153 glutKeyboardFunc(dxt_display_keyboard);
154 glutShowWindow();
155
156 // Create program [display] and its shader
157 g_display.program_display = glCreateProgramObjectARB();
158 // Create shader from file
159 g_display.shader_fragment_display = dxt_shader_create_from_source(fp_display, GL_FRAGMENT_SHADER_ARB);
161 return -1;
162 // Attach shader to program and link the program
164 glLinkProgramARB(g_display.program_display);
165
166 // Create program [display_dxt5ycocg] and its shader
167 g_display.program_display_dxt5ycocg = glCreateProgramObjectARB();
168 // Create shader from file
171 return -1;
172 // Attach shader to program and link the program
174 glLinkProgramARB(g_display.program_display_dxt5ycocg);
175
176 return 0;
177}
178
184void
186{
187 g_display.show = 1;
188 glutPostRedisplay();
189 while( g_display.show ) {
190 //glutMainLoopEvent();
191 abort();
192 }
193 glutHideWindow();
194}
195
197int
198dxt_display_image(const char* title, DXT_IMAGE_TYPE* image, int width, int height)
199{
200#ifdef DEBUG
201 printf("Display Image [resolution: %dx%d]\n", width, height);
202#endif
203
205
206 glGenTextures(1, &g_display.texture_id);
207 glBindTexture(GL_TEXTURE_2D, g_display.texture_id);
208 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
209 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
210 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
211 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
212 glTexImage2D(GL_TEXTURE_2D, 0, DXT_IMAGE_GL_FORMAT, width, height, 0, GL_RGBA, DXT_IMAGE_GL_TYPE, image);
213
215
216 glDeleteShader(g_display.shader_fragment_display);
218 glDeleteProgram(g_display.program_display);
219 glDeleteProgram(g_display.program_display_dxt5ycocg);
220}
221
223int
224dxt_display_image_compressed(const char* title, unsigned char* image_compressed, int image_compressed_size, enum dxt_type type, int width, int height)
225{
226#ifdef DEBUG
227 printf("Display Compressed Image [size: %d bytes, resolution: %dx%d]\n", image_compressed_size, width, height);
228#endif
229
231
232 glGenTextures(1, &g_display.texture_compressed_id);
233 glBindTexture(GL_TEXTURE_2D, g_display.texture_compressed_id);
234 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
235 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
236 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
237 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
238 if ( type == DXT_TYPE_DXT5_YCOCG )
239 glCompressedTexImage2DARB(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, width, height, 0, image_compressed_size, image_compressed);
240 else
241 glCompressedTexImage2DARB(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, width, height, 0, image_compressed_size, image_compressed);
242
244}
245
247int
248dxt_display_image_comparison(DXT_IMAGE_TYPE* image, unsigned char* image_compressed, int image_compressed_size, enum dxt_type type, int width, int height)
249{
250#ifdef DEBUG
251 printf("Display Image Comparison [size: %d bytes, resolution: %dx%d]\n", image_compressed_size, width, height);
252#endif
253
254 dxt_display_init("Display Comparison", type, width, height);
255
256 glGenTextures(1, &g_display.texture_id);
257 glBindTexture(GL_TEXTURE_2D, g_display.texture_id);
258 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
259 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
260 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
261 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
262 glTexImage2D(GL_TEXTURE_2D, 0, DXT_IMAGE_GL_FORMAT, width, height, 0, GL_RGBA, DXT_IMAGE_GL_TYPE, image);
263
264 glGenTextures(1, &g_display.texture_compressed_id);
265 glBindTexture(GL_TEXTURE_2D, g_display.texture_compressed_id);
266 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
267 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
268 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
269 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
271 glCompressedTexImage2DARB(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, width, height, 0, image_compressed_size, image_compressed);
272 else
273 glCompressedTexImage2DARB(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, width, height, 0, image_compressed_size, image_compressed);
274
276
278
279 return 0;
280}
#define DXT_IMAGE_GL_TYPE
Definition dxt_common.h:72
#define DXT_IMAGE_GL_FORMAT
Definition dxt_common.h:73
dxt_type
Definition dxt_common.h:88
@ DXT_TYPE_DXT1
Definition dxt_common.h:89
@ DXT_TYPE_DXT5_YCOCG
Definition dxt_common.h:91
#define DXT_IMAGE_TYPE
Definition dxt_common.h:71
int dxt_display_image(const char *title, DXT_IMAGE_TYPE *image, int width, int height)
int dxt_display_image_comparison(DXT_IMAGE_TYPE *image, unsigned char *image_compressed, int image_compressed_size, enum dxt_type type, int width, int height)
void dxt_display_render(void)
Definition dxt_display.c:74
int dxt_display_image_compressed(const char *title, unsigned char *image_compressed, int image_compressed_size, enum dxt_type type, int width, int height)
int dxt_display_init(const char *title, enum dxt_type type, int width, int height)
void dxt_display_run()
void dxt_display_keyboard(unsigned char key, int x, int y)
struct dxt_display g_display
Definition dxt_display.c:66
GLuint dxt_shader_create_from_source(const char *source, GLenum type)
Definition dxt_util.c:32
static const char fp_display_dxt5ycocg[]
Definition gl.cpp:310
Option::OptType type
Definition settings.cpp:194
enum dxt_type type
Definition dxt_display.c:36
GLuint texture_compressed_id
Definition dxt_display.c:48
GLhandleARB program_display_dxt5ycocg
Definition dxt_display.c:55
GLuint texture_current_id
Definition dxt_display.c:51
GLuint texture_id
Definition dxt_display.c:45
GLhandleARB shader_fragment_display_dxt5ycocg
Definition dxt_display.c:57
GLhandleARB program_display
Definition dxt_display.c:54
GLhandleARB shader_fragment_display
Definition dxt_display.c:56
const char * key
Definition cineform.cpp:125