UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
dxt_display.c File Reference
#include "dxt_common.h"
#include "dxt_decoder.h"
#include "dxt_util.h"
#include "dxt_glsl.h"
Include dependency graph for dxt_display.c:

Go to the source code of this file.

Classes

struct  dxt_display
 

Functions

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)
 
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_keyboard (unsigned char key, int x, int y)
 
void dxt_display_render (void)
 
void dxt_display_run ()
 

Variables

struct dxt_display g_display
 

Function Documentation

◆ dxt_display_image()

int dxt_display_image ( const char * title,
DXT_IMAGE_TYPE * image,
int width,
int height )

Documented at declaration

Definition at line 198 of file dxt_display.c.

199{
200#ifdef DEBUG
201 printf("Display Image [resolution: %dx%d]\n", width, height);
202#endif
203
204 dxt_display_init(title, DXT_TYPE_DXT1, width, height);
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}
#define DXT_IMAGE_GL_TYPE
Definition dxt_common.h:72
#define DXT_IMAGE_GL_FORMAT
Definition dxt_common.h:73
@ DXT_TYPE_DXT1
Definition dxt_common.h:89
int dxt_display_init(const char *title, enum dxt_type type, int width, int height)
void dxt_display_run()
struct dxt_display g_display
Definition dxt_display.c:66
GLhandleARB program_display_dxt5ycocg
Definition dxt_display.c:55
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

References dxt_display_init(), dxt_display_run(), DXT_IMAGE_GL_FORMAT, DXT_IMAGE_GL_TYPE, DXT_TYPE_DXT1, g_display, dxt_display::height, dxt_display::program_display, dxt_display::program_display_dxt5ycocg, dxt_display::shader_fragment_display, dxt_display::shader_fragment_display_dxt5ycocg, dxt_display::texture_id, and dxt_display::width.

Referenced by perform_decode(), perform_display(), and perform_encode().

Here is the call graph for this function:

◆ dxt_display_image_comparison()

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 )

Documented at declaration

Definition at line 248 of file dxt_display.c.

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}
@ DXT_TYPE_DXT5_YCOCG
Definition dxt_common.h:91
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
GLuint texture_current_id
Definition dxt_display.c:51

References dxt_display_init(), dxt_display_run(), DXT_IMAGE_GL_FORMAT, DXT_IMAGE_GL_TYPE, DXT_TYPE_DXT5_YCOCG, g_display, dxt_display::height, dxt_display::texture_compressed_id, dxt_display::texture_current_id, dxt_display::texture_id, dxt_display::type, type, and dxt_display::width.

Referenced by perform_comparison().

Here is the call graph for this function:

◆ dxt_display_image_compressed()

int dxt_display_image_compressed ( const char * title,
unsigned char * image_compressed,
int image_compressed_size,
enum dxt_type type,
int width,
int height )

Documented at declaration

Definition at line 224 of file dxt_display.c.

225{
226#ifdef DEBUG
227 printf("Display Compressed Image [size: %d bytes, resolution: %dx%d]\n", image_compressed_size, width, height);
228#endif
229
230 dxt_display_init(title, type, width, height);
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}

References dxt_display_init(), dxt_display_run(), DXT_TYPE_DXT5_YCOCG, g_display, dxt_display::height, dxt_display::texture_compressed_id, type, and dxt_display::width.

Referenced by perform_decode(), perform_display(), and perform_encode().

Here is the call graph for this function:

◆ dxt_display_init()

int dxt_display_init ( const char * title,
enum dxt_type type,
int width,
int height )

OpenGL init

Returns
zero if succeeds, otherwise nonzero

Definition at line 139 of file dxt_display.c.

140{
142 g_display.width = width;
143 g_display.height = height;
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}
void dxt_display_render(void)
Definition dxt_display.c:74
void dxt_display_keyboard(unsigned char key, int x, int y)
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

References dxt_display_keyboard(), dxt_display_render(), dxt_shader_create_from_source(), fp_display_dxt5ycocg, g_display, dxt_display::height, dxt_display::program_display, dxt_display::program_display_dxt5ycocg, dxt_display::shader_fragment_display, dxt_display::shader_fragment_display_dxt5ycocg, dxt_display::texture_compressed_id, dxt_display::texture_current_id, dxt_display::texture_id, dxt_display::type, type, and dxt_display::width.

Referenced by dxt_display_image(), dxt_display_image_comparison(), and dxt_display_image_compressed().

Here is the call graph for this function:

◆ dxt_display_keyboard()

void dxt_display_keyboard ( unsigned char key,
int x,
int y )

OpenGL handle keyboard

Returns
void

Definition at line 115 of file dxt_display.c.

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}
const char * key
Definition cineform.cpp:125

References g_display, key, dxt_display::show, dxt_display::texture_compressed_id, dxt_display::texture_current_id, and dxt_display::texture_id.

Referenced by dxt_display_init().

◆ dxt_display_render()

void dxt_display_render ( void )

OpenGL render

Returns
void

Definition at line 74 of file dxt_display.c.

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}

References DXT_TYPE_DXT5_YCOCG, g_display, dxt_display::program_display, dxt_display::program_display_dxt5ycocg, dxt_display::texture_compressed_id, dxt_display::texture_current_id, dxt_display::texture_id, and dxt_display::type.

Referenced by dxt_display_init().

◆ dxt_display_run()

void dxt_display_run ( )

OpenGL run loop

Returns
void

Definition at line 185 of file dxt_display.c.

186{
187 g_display.show = 1;
188 glutPostRedisplay();
189 while( g_display.show ) {
190 //glutMainLoopEvent();
191 abort();
192 }
193 glutHideWindow();
194}

References g_display, and dxt_display::show.

Referenced by dxt_display_image(), dxt_display_image_comparison(), and dxt_display_image_compressed().

Variable Documentation

◆ g_display