From 4000d858aed75d56961a40be2dfd313b1a32a41b Mon Sep 17 00:00:00 2001 From: Eleni Maria Stea Date: Tue, 13 Mar 2018 09:59:55 +0200 Subject: [PATCH] This is a test program that loads compressed data, renders the image and gets the pixels with glGetCompressedTexImage* functions. Just for testing. --- Makefile | 12 ++ README | 8 ++ compressed_texture | Bin 0 -> 131080 bytes main.c | 359 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 379 insertions(+) create mode 100644 Makefile create mode 100644 README create mode 100644 compressed_texture create mode 100644 main.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..84363ff --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +obj = main.o +bin = test + +CFLAGS = -pedantic -Wall -g +LDFLAGS = -lGL -lglut + +$(bin): $(obj) + $(CC) -o $@ $(obj) $(LDFLAGS) + +.PHONY: clean +clean: + rm -f $(obj) $(bin) diff --git a/README b/README new file mode 100644 index 0000000..6a8352c --- /dev/null +++ b/README @@ -0,0 +1,8 @@ +Build and Run: +-------------- +Build: +make + +Run: +./test if your gpu can compress textures +./test compressed_texture to load already compressed data (recommended) diff --git a/compressed_texture b/compressed_texture new file mode 100644 index 0000000000000000000000000000000000000000..af66f3a2a004622b7786575996989ee3380eca7a GIT binary patch literal 131080 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 +#include +#include +#include +#include +#include + +#undef USE_SRGB + +#ifdef USE_SRGB +#define COMP_FMT GL_COMPRESSED_SRGB8_ETC2 +#else +#define COMP_FMT GL_COMPRESSED_RGB8_ETC2 +#endif + +int init(void); +int texcomp(unsigned char *compix, unsigned int tofmt, unsigned char *pixels, + int xsz, int ysz, unsigned int fromfmt, unsigned int fromtype); +void disp(void); +void reshape(int x, int y); +void keyb(unsigned char key, int x, int y); +void gen_image(unsigned char *pixels, int xsz, int ysz); +unsigned char *load_compressed_image(const char *fname, int *cszptr, int *xszptr, int *yszptr); +int dump_compressed_image(const char *fname, unsigned char *data, int size, int w, int h); +void print_compressed_formats(void); + +unsigned int tex, comp_tex; +const char *texfile; + +int main(int argc, char **argv) +{ + unsigned int glut_flags = GLUT_RGB | GLUT_DOUBLE; +#ifdef USE_SRGB + glut_flags |= GLUT_SRGB; +#endif + + texfile = argv[1]; + + glutInit(&argc, argv); + glutInitWindowSize(800, 600); + glutInitDisplayMode(glut_flags); + glutCreateWindow("test"); + + glutDisplayFunc(disp); + glutReshapeFunc(reshape); + glutKeyboardFunc(keyb); + + if(init() == -1) { + return 1; + } + + glutMainLoop(); + return 0; +} + +int init(void) +{ + unsigned char *pixels, *buf; + int xsz = 512; + int ysz = 512; + int is_comp = 0; + int comp_size = 0; + int tmp; + + print_compressed_formats(); + + if(texfile) { + if(!(pixels = load_compressed_image(texfile, &comp_size, &xsz, &ysz))) { + return -1; + } + printf("loaded compressed texture file: %s (%dx%d)\n", texfile, xsz, ysz); + + } else { + if(!(pixels = malloc(xsz * ysz * 3))) { + abort(); + } + gen_image(pixels, xsz, ysz); + + printf("compressing texture\n"); + if((comp_size = texcomp(pixels, COMP_FMT, pixels, xsz, ysz, GL_RGB, GL_UNSIGNED_BYTE)) == -1) { + return -1; + } + printf("compressed texture is %d bytes (uncompressed was: %d)\n", comp_size, xsz * ysz * 3); + + dump_compressed_image("compressed_texture", pixels, comp_size, xsz, ysz); + } + + glGenTextures(1, &tex); + glBindTexture(GL_TEXTURE_2D, tex); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glCompressedTexImage2D(GL_TEXTURE_2D, 0, COMP_FMT, xsz, ysz, 0, comp_size, pixels); + if(glGetError()) { + fprintf(stderr, "failed to upload compressed texture\n"); + return -1; + } + + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED, &is_comp); + if(!is_comp) { + fprintf(stderr, "texture is not compressed\n"); + return -1; + } + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &tmp); + if(tmp != comp_size) { + fprintf(stderr, "internal compressed size differs (expected: %d, got: %d)!\n", comp_size, tmp); + return -1; + } + + if(!(buf = malloc(comp_size))) { + fprintf(stderr, "failed to allocate comparison image buffer (%d bytes)\n", comp_size); + return -1; + } + glGetCompressedTexImage(GL_TEXTURE_2D, 0, buf); + + if(memcmp(pixels, buf, comp_size) != 0) { + fprintf(stderr, "submitted and retrieved pixel data differ!\n"); + } else { + printf("submitted and retrieved sizes match (%d bytes)\n", comp_size); + } + free(buf); + free(pixels); + +#ifdef USE_SRGB + glEnable(GL_FRAMEBUFFER_SRGB); +#endif + + glEnable(GL_TEXTURE_2D); + return 0; +} + +int texcomp(unsigned char *compix, unsigned int tofmt, unsigned char *pixels, + int xsz, int ysz, unsigned int fromfmt, unsigned int fromtype) +{ + unsigned int tex; + int is_comp = 0; + int comp_size = 0; + + glGenTextures(1, &tex); + glBindTexture(GL_TEXTURE_2D, tex); + glTexImage2D(GL_TEXTURE_2D, 0, tofmt, xsz, ysz, 0, fromfmt, fromtype, pixels); + if(glGetError()) { + fprintf(stderr, "failed to compress texture\n"); + return -1; + } + + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED, &is_comp); + if(!is_comp) { + fprintf(stderr, "texture is not compressed\n"); + return -1; + } + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, &comp_size); + + glGetCompressedTexImage(GL_TEXTURE_2D, 0, compix); + return comp_size; +} + +void disp(void) +{ + glClear(GL_COLOR_BUFFER_BIT); + + glBegin(GL_QUADS); + glTexCoord2f(0, 1); glVertex2f(-1, -1); + glTexCoord2f(1, 1); glVertex2f(1, -1); + glTexCoord2f(1, 0); glVertex2f(1, 1); + glTexCoord2f(0, 0); glVertex2f(-1, 1); + glEnd(); + + glutSwapBuffers(); + assert(glGetError() == GL_NO_ERROR); +} + +void reshape(int x, int y) +{ + float aspect = (float)x / (float)y; + glViewport(0, 0, x, y); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glScalef(1.0 / aspect, 1, 1); +} + +void keyb(unsigned char key, int x, int y) +{ + if(key == 27) { + exit(0); + } +} + +void gen_image(unsigned char *pixels, int xsz, int ysz) +{ + int i, j; + + for(i=0; i