From 97989f58ab13c64fbe05e629d2b2a024a2c3cfa4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?C=C3=B4me=20Chilliet?= Date: Thu, 24 Nov 2016 23:33:37 +0800 Subject: [PATCH] Moved image loading/saving in TGALoader and renamed it accordingly --- CMakeLists.txt | 4 +- Source/Game.h | 2 +- Source/GameTick.cpp | 4 +- Source/Globals.cpp | 2 +- Source/ImageIO.cpp | 290 ++++++++++++++++++++++++++++++ Source/{TGALoader.h => ImageIO.h} | 6 +- Source/Objects.h | 2 +- Source/OpenGL_Windows.cpp | 269 +-------------------------- Source/Skybox.h | 2 +- Source/Sprite.h | 2 +- Source/TGALoader.cpp | 31 ---- Source/Terrain.h | 2 +- Source/Text.h | 2 +- Source/Texture.cpp | 2 +- 14 files changed, 307 insertions(+), 313 deletions(-) create mode 100644 Source/ImageIO.cpp rename Source/{TGALoader.h => ImageIO.h} (89%) delete mode 100644 Source/TGALoader.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index c55c50a..8fe8a8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ set(LUGARU_SRCS ${SRCDIR}/Terrain.cpp ${SRCDIR}/Texture.cpp ${SRCDIR}/Text.cpp - ${SRCDIR}/TGALoader.cpp + ${SRCDIR}/ImageIO.cpp ${SRCDIR}/unpack.c ${SRCDIR}/Weapons.cpp ${SRCDIR}/OpenGL_Windows.cpp @@ -83,7 +83,7 @@ set(LUGARU_H ${SRCDIR}/Skeleton.h ${SRCDIR}/Skybox.h ${SRCDIR}/Sprite.h - ${SRCDIR}/TGALoader.h + ${SRCDIR}/ImageIO.h ${SRCDIR}/Terrain.h ${SRCDIR}/Texture.h ${SRCDIR}/Text.h diff --git a/Source/Game.h b/Source/Game.h index f554d1e..0baa365 100644 --- a/Source/Game.h +++ b/Source/Game.h @@ -22,7 +22,7 @@ along with Lugaru. If not, see . #include "SDL.h" -#include "TGALoader.h" +#include "ImageIO.h" #include "Terrain.h" #include "Skybox.h" diff --git a/Source/GameTick.cpp b/Source/GameTick.cpp index 2136af6..4db82ea 100644 --- a/Source/GameTick.cpp +++ b/Source/GameTick.cpp @@ -470,7 +470,7 @@ static void cmd_dispatch(const string cmd) } /********************> Tick() <*****/ -extern bool save_image(const char * fname); +extern bool save_screenshot(const char * fname); void Screenshot (void) { char filename[1024]; @@ -483,7 +483,7 @@ void Screenshot (void) mkdir("Screenshots"); #endif - save_image(filename); + save_screenshot(filename); } void Game::SetUpLighting() diff --git a/Source/Globals.cpp b/Source/Globals.cpp index 5fc6c55..709e021 100644 --- a/Source/Globals.cpp +++ b/Source/Globals.cpp @@ -29,7 +29,7 @@ along with Lugaru. If not, see . #include "Objects.h" #include "Weapons.h" #include "Person.h" -#include "TGALoader.h" +#include "ImageIO.h" #include "openal_wrapper.h" #include "Stereo.h" diff --git a/Source/ImageIO.cpp b/Source/ImageIO.cpp new file mode 100644 index 0000000..c8dffe5 --- /dev/null +++ b/Source/ImageIO.cpp @@ -0,0 +1,290 @@ +/* +Copyright (C) 2003, 2010 - Wolfire Games + +This file is part of Lugaru. + +Lugaru is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +Lugaru is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Lugaru. If not, see . +*/ + +/**> HEADER FILES <**/ + +#include +#include +#include +#include + +#include "Game.h" +#include "ImageIO.h" + +extern ImageRec texture; +extern bool visibleloading; + +/* These two are needed for screenshot */ +extern int kContextWidth; +extern int kContextHeight; + +static bool load_png(const char * fname, ImageRec & tex); +static bool load_jpg(const char * fname, ImageRec & tex); +static bool save_screenshot_png(const char * fname); + +bool upload_image(const char* fileName) +{ + return load_image(fileName, texture); +} + +bool load_image(const char *file_name, ImageRec &tex) +{ + if (visibleloading) + Game::LoadingScreen(); + + if ( tex.data == NULL ) + return false; + + const char *ptr = strrchr((char *)file_name, '.'); + if (ptr) { + if (strcasecmp(ptr + 1, "png") == 0) + return load_png(file_name, tex); + else if (strcasecmp(ptr + 1, "jpg") == 0) + return load_jpg(file_name, tex); + } + + STUBBED("Unsupported image type"); + return false; +} + +bool save_screenshot(const char *file_name) +{ + const char *ptr = strrchr((char *)file_name, '.'); + if (ptr) { + if (strcasecmp(ptr + 1, "png") == 0) + return save_screenshot_png(file_name); + } + + STUBBED("Unsupported image type"); + return false; +} + +struct my_error_mgr { + struct jpeg_error_mgr pub; /* "public" fields */ + jmp_buf setjmp_buffer; /* for return to caller */ +}; +typedef struct my_error_mgr * my_error_ptr; + +static void my_error_exit(j_common_ptr cinfo) +{ + struct my_error_mgr *err = (struct my_error_mgr *)cinfo->err; + longjmp(err->setjmp_buffer, 1); +} + +/* stolen from public domain example.c code in libjpg distribution. */ +static bool load_jpg(const char *file_name, ImageRec &tex) +{ + struct jpeg_decompress_struct cinfo; + struct my_error_mgr jerr; + JSAMPROW buffer[1]; /* Output row buffer */ + int row_stride; /* physical row width in output buffer */ + FILE *infile = fopen(file_name, "rb"); + + if (infile == NULL) + return false; + + cinfo.err = jpeg_std_error(&jerr.pub); + jerr.pub.error_exit = my_error_exit; + if (setjmp(jerr.setjmp_buffer)) { + jpeg_destroy_decompress(&cinfo); + fclose(infile); + return false; + } + + jpeg_create_decompress(&cinfo); + jpeg_stdio_src(&cinfo, infile); + (void) jpeg_read_header(&cinfo, TRUE); + + cinfo.out_color_space = JCS_RGB; + cinfo.quantize_colors = 0; + (void) jpeg_calc_output_dimensions(&cinfo); + (void) jpeg_start_decompress(&cinfo); + + row_stride = cinfo.output_width * cinfo.output_components; + tex.sizeX = cinfo.output_width; + tex.sizeY = cinfo.output_height; + tex.bpp = 24; + + while (cinfo.output_scanline < cinfo.output_height) { + buffer[0] = (JSAMPROW)(char *)tex.data + + ((cinfo.output_height - 1) - cinfo.output_scanline) * row_stride; + (void) jpeg_read_scanlines(&cinfo, buffer, 1); + } + + (void) jpeg_finish_decompress(&cinfo); + jpeg_destroy_decompress(&cinfo); + fclose(infile); + + return true; +} + +/* stolen from public domain example.c code in libpng distribution. */ +static bool load_png(const char *file_name, ImageRec &tex) +{ + bool hasalpha = false; + png_structp png_ptr = NULL; + png_infop info_ptr = NULL; + png_uint_32 width, height; + int bit_depth, color_type, interlace_type; + bool retval = false; + png_byte **row_pointers = NULL; + FILE *fp = fopen(file_name, "rb"); + + if (fp == NULL) { + cerr << file_name << " not found" << endl; + return(NULL); + } + + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (png_ptr == NULL) + goto png_done; + + info_ptr = png_create_info_struct(png_ptr); + if (info_ptr == NULL) + goto png_done; + + if (setjmp(png_jmpbuf(png_ptr))) + goto png_done; + + png_init_io(png_ptr, fp); + png_read_png(png_ptr, info_ptr, + PNG_TRANSFORM_STRIP_16 | PNG_TRANSFORM_PACKING, + NULL); + png_get_IHDR(png_ptr, info_ptr, &width, &height, + &bit_depth, &color_type, &interlace_type, NULL, NULL); + + if (bit_depth != 8) // transform SHOULD handle this... + goto png_done; + + if (color_type & PNG_COLOR_MASK_PALETTE) // !!! FIXME? + goto png_done; + + if ((color_type & PNG_COLOR_MASK_COLOR) == 0) // !!! FIXME? + goto png_done; + + hasalpha = ((color_type & PNG_COLOR_MASK_ALPHA) != 0); + row_pointers = png_get_rows(png_ptr, info_ptr); + if (!row_pointers) + goto png_done; + + if (!hasalpha) { + png_byte *dst = tex.data; + for (int i = height - 1; i >= 0; i--) { + png_byte *src = row_pointers[i]; + for (unsigned j = 0; j < width; j++) { + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + dst[3] = 0xFF; + src += 3; + dst += 4; + } + } + } + + else { + png_byte *dst = tex.data; + int pitch = width * 4; + for (int i = height - 1; i >= 0; i--, dst += pitch) + memcpy(dst, row_pointers[i], pitch); + } + + tex.sizeX = width; + tex.sizeY = height; + tex.bpp = 32; + retval = true; + +png_done: + if (!retval) { + cerr << "There was a problem loading " << file_name << endl; + } + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + if (fp) + fclose(fp); + return (retval); +} + +static bool save_screenshot_png(const char *file_name) +{ + FILE *fp = NULL; + png_structp png_ptr = NULL; + png_infop info_ptr = NULL; + bool retval = false; + + fp = fopen(file_name, "wb"); + if (fp == NULL) + return false; + + png_bytep *row_pointers = new png_bytep[kContextHeight]; + png_bytep screenshot = new png_byte[kContextWidth * kContextHeight * 3]; + if ((!screenshot) || (!row_pointers)) + goto save_png_done; + + glGetError(); + glReadPixels(0, 0, kContextWidth, kContextHeight, + GL_RGB, GL_UNSIGNED_BYTE, screenshot); + if (glGetError() != GL_NO_ERROR) + goto save_png_done; + + for (int i = 0; i < kContextHeight; i++) + row_pointers[i] = screenshot + ((kContextWidth * ((kContextHeight - 1) - i)) * 3); + + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (png_ptr == NULL) + goto save_png_done; + + info_ptr = png_create_info_struct(png_ptr); + if (info_ptr == NULL) + goto save_png_done; + + if (setjmp(png_jmpbuf(png_ptr))) + goto save_png_done; + + png_init_io(png_ptr, fp); + + if (setjmp(png_jmpbuf(png_ptr))) + goto save_png_done; + + png_set_IHDR(png_ptr, info_ptr, kContextWidth, kContextHeight, + 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + + png_write_info(png_ptr, info_ptr); + + if (setjmp(png_jmpbuf(png_ptr))) + goto save_png_done; + + png_write_image(png_ptr, row_pointers); + + if (setjmp(png_jmpbuf(png_ptr))) + goto save_png_done; + + png_write_end(png_ptr, NULL); + retval = true; + +save_png_done: + png_destroy_write_struct(&png_ptr, &info_ptr); + delete[] screenshot; + delete[] row_pointers; + if (fp) + fclose(fp); + if (!retval) + unlink(ConvertFileName(file_name)); + return retval; +} diff --git a/Source/TGALoader.h b/Source/ImageIO.h similarity index 89% rename from Source/TGALoader.h rename to Source/ImageIO.h index d8f3336..f59a0a8 100644 --- a/Source/TGALoader.h +++ b/Source/ImageIO.h @@ -17,8 +17,8 @@ You should have received a copy of the GNU General Public License along with Lugaru. If not, see . */ -#ifndef _TGA_LOADER_H_ -#define _TGA_LOADER_H_ +#ifndef _IMAGE_IO_H_ +#define _IMAGE_IO_H_ #ifdef _MSC_VER #pragma once @@ -48,6 +48,8 @@ typedef struct ImageRec { } ImageRec; bool upload_image(const char* filePath); +bool load_image(const char * fname, ImageRec & tex); +bool save_screenshot(const char * fname); #endif diff --git a/Source/Objects.h b/Source/Objects.h index a578374..bd60486 100644 --- a/Source/Objects.h +++ b/Source/Objects.h @@ -22,7 +22,7 @@ along with Lugaru. If not, see . #include "Quaternions.h" #include "gamegl.h" -#include "TGALoader.h" +#include "ImageIO.h" #include "Quaternions.h" #include "Frustum.h" #include "Lights.h" diff --git a/Source/OpenGL_Windows.cpp b/Source/OpenGL_Windows.cpp index 45e7b8b..475cd99 100644 --- a/Source/OpenGL_Windows.cpp +++ b/Source/OpenGL_Windows.cpp @@ -24,19 +24,8 @@ along with Lugaru. If not, see . #include "Game.h" -#include -#include -#include - using namespace Game; -bool load_image(const char * fname, ImageRec & tex); -static bool load_png(const char * fname, ImageRec & tex); -static bool load_jpg(const char * fname, ImageRec & tex); -bool save_image(const char * fname); -static bool save_png(const char * fname); - - #include "openal_wrapper.h" extern float multiplier; @@ -64,6 +53,7 @@ extern bool visibleloading; #include #include #include +#include #include #include "gamegl.h" #include "MacCompatibility.h" @@ -756,260 +746,3 @@ int main(int argc, char **argv) return -1; } - - - -// -------------------------------------------------------------------------- - -bool load_image(const char *file_name, ImageRec &tex) -{ - if (visibleloading) - Game::LoadingScreen(); - - if ( tex.data == NULL ) - return false; - - const char *ptr = strrchr((char *)file_name, '.'); - if (ptr) { - if (strcasecmp(ptr + 1, "png") == 0) - return load_png(file_name, tex); - else if (strcasecmp(ptr + 1, "jpg") == 0) - return load_jpg(file_name, tex); - } - - STUBBED("Unsupported image type"); - return false; -} - -struct my_error_mgr { - struct jpeg_error_mgr pub; /* "public" fields */ - jmp_buf setjmp_buffer; /* for return to caller */ -}; -typedef struct my_error_mgr * my_error_ptr; - - -static void my_error_exit(j_common_ptr cinfo) -{ - struct my_error_mgr *err = (struct my_error_mgr *)cinfo->err; - longjmp(err->setjmp_buffer, 1); -} - -/* stolen from public domain example.c code in libjpg distribution. */ -static bool load_jpg(const char *file_name, ImageRec &tex) -{ - struct jpeg_decompress_struct cinfo; - struct my_error_mgr jerr; - JSAMPROW buffer[1]; /* Output row buffer */ - int row_stride; /* physical row width in output buffer */ - FILE *infile = fopen(file_name, "rb"); - - if (infile == NULL) - return false; - - cinfo.err = jpeg_std_error(&jerr.pub); - jerr.pub.error_exit = my_error_exit; - if (setjmp(jerr.setjmp_buffer)) { - jpeg_destroy_decompress(&cinfo); - fclose(infile); - return false; - } - - jpeg_create_decompress(&cinfo); - jpeg_stdio_src(&cinfo, infile); - (void) jpeg_read_header(&cinfo, TRUE); - - cinfo.out_color_space = JCS_RGB; - cinfo.quantize_colors = 0; - (void) jpeg_calc_output_dimensions(&cinfo); - (void) jpeg_start_decompress(&cinfo); - - row_stride = cinfo.output_width * cinfo.output_components; - tex.sizeX = cinfo.output_width; - tex.sizeY = cinfo.output_height; - tex.bpp = 24; - - while (cinfo.output_scanline < cinfo.output_height) { - buffer[0] = (JSAMPROW)(char *)tex.data + - ((cinfo.output_height - 1) - cinfo.output_scanline) * row_stride; - (void) jpeg_read_scanlines(&cinfo, buffer, 1); - } - - (void) jpeg_finish_decompress(&cinfo); - jpeg_destroy_decompress(&cinfo); - fclose(infile); - - return true; -} - - -/* stolen from public domain example.c code in libpng distribution. */ -static bool load_png(const char *file_name, ImageRec &tex) -{ - bool hasalpha = false; - png_structp png_ptr = NULL; - png_infop info_ptr = NULL; - png_uint_32 width, height; - int bit_depth, color_type, interlace_type; - bool retval = false; - png_byte **row_pointers = NULL; - FILE *fp = fopen(file_name, "rb"); - - if (fp == NULL) { - cerr << file_name << " not found" << endl; - return(NULL); - } - - png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (png_ptr == NULL) - goto png_done; - - info_ptr = png_create_info_struct(png_ptr); - if (info_ptr == NULL) - goto png_done; - - if (setjmp(png_jmpbuf(png_ptr))) - goto png_done; - - png_init_io(png_ptr, fp); - png_read_png(png_ptr, info_ptr, - PNG_TRANSFORM_STRIP_16 | PNG_TRANSFORM_PACKING, - NULL); - png_get_IHDR(png_ptr, info_ptr, &width, &height, - &bit_depth, &color_type, &interlace_type, NULL, NULL); - - if (bit_depth != 8) // transform SHOULD handle this... - goto png_done; - - if (color_type & PNG_COLOR_MASK_PALETTE) // !!! FIXME? - goto png_done; - - if ((color_type & PNG_COLOR_MASK_COLOR) == 0) // !!! FIXME? - goto png_done; - - hasalpha = ((color_type & PNG_COLOR_MASK_ALPHA) != 0); - row_pointers = png_get_rows(png_ptr, info_ptr); - if (!row_pointers) - goto png_done; - - if (!hasalpha) { - png_byte *dst = tex.data; - for (int i = height - 1; i >= 0; i--) { - png_byte *src = row_pointers[i]; - for (unsigned j = 0; j < width; j++) { - dst[0] = src[0]; - dst[1] = src[1]; - dst[2] = src[2]; - dst[3] = 0xFF; - src += 3; - dst += 4; - } - } - } - - else { - png_byte *dst = tex.data; - int pitch = width * 4; - for (int i = height - 1; i >= 0; i--, dst += pitch) - memcpy(dst, row_pointers[i], pitch); - } - - tex.sizeX = width; - tex.sizeY = height; - tex.bpp = 32; - retval = true; - -png_done: - if (!retval) { - cerr << "There was a problem loading " << file_name << endl; - } - png_destroy_read_struct(&png_ptr, &info_ptr, NULL); - if (fp) - fclose(fp); - return (retval); -} - - -bool save_image(const char *file_name) -{ - const char *ptr = strrchr((char *)file_name, '.'); - if (ptr) { - if (strcasecmp(ptr + 1, "png") == 0) - return save_png(file_name); - } - - STUBBED("Unsupported image type"); - return false; -} - - -static bool save_png(const char *file_name) -{ - FILE *fp = NULL; - png_structp png_ptr = NULL; - png_infop info_ptr = NULL; - bool retval = false; - - fp = fopen(file_name, "wb"); - if (fp == NULL) - return false; - - png_bytep *row_pointers = new png_bytep[kContextHeight]; - png_bytep screenshot = new png_byte[kContextWidth * kContextHeight * 3]; - if ((!screenshot) || (!row_pointers)) - goto save_png_done; - - glGetError(); - glReadPixels(0, 0, kContextWidth, kContextHeight, - GL_RGB, GL_UNSIGNED_BYTE, screenshot); - if (glGetError() != GL_NO_ERROR) - goto save_png_done; - - for (int i = 0; i < kContextHeight; i++) - row_pointers[i] = screenshot + ((kContextWidth * ((kContextHeight - 1) - i)) * 3); - - png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (png_ptr == NULL) - goto save_png_done; - - info_ptr = png_create_info_struct(png_ptr); - if (info_ptr == NULL) - goto save_png_done; - - if (setjmp(png_jmpbuf(png_ptr))) - goto save_png_done; - - png_init_io(png_ptr, fp); - - if (setjmp(png_jmpbuf(png_ptr))) - goto save_png_done; - - png_set_IHDR(png_ptr, info_ptr, kContextWidth, kContextHeight, - 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, - PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); - - png_write_info(png_ptr, info_ptr); - - if (setjmp(png_jmpbuf(png_ptr))) - goto save_png_done; - - png_write_image(png_ptr, row_pointers); - - if (setjmp(png_jmpbuf(png_ptr))) - goto save_png_done; - - png_write_end(png_ptr, NULL); - retval = true; - -save_png_done: - png_destroy_write_struct(&png_ptr, &info_ptr); - delete[] screenshot; - delete[] row_pointers; - if (fp) - fclose(fp); - if (!retval) - unlink(ConvertFileName(file_name)); - return retval; -} - - - diff --git a/Source/Skybox.h b/Source/Skybox.h index 073ed11..f408da0 100644 --- a/Source/Skybox.h +++ b/Source/Skybox.h @@ -21,7 +21,7 @@ along with Lugaru. If not, see . #define _SKYBOX_H_ #include "Quaternions.h" -#include "TGALoader.h" +#include "ImageIO.h" #include "Quaternions.h" #include "gamegl.h" #include "Texture.h" diff --git a/Source/Sprite.h b/Source/Sprite.h index b2250bd..5ecf4c9 100644 --- a/Source/Sprite.h +++ b/Source/Sprite.h @@ -22,7 +22,7 @@ along with Lugaru. If not, see . #include "Quaternions.h" #include "gamegl.h" -#include "TGALoader.h" +#include "ImageIO.h" #include "Quaternions.h" #include "Frustum.h" #include "Lights.h" diff --git a/Source/TGALoader.cpp b/Source/TGALoader.cpp deleted file mode 100644 index 45bde23..0000000 --- a/Source/TGALoader.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright (C) 2003, 2010 - Wolfire Games - -This file is part of Lugaru. - -Lugaru is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -Lugaru is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Lugaru. If not, see . -*/ - -/**> HEADER FILES <**/ -#include "Game.h" -#include "TGALoader.h" - -extern ImageRec texture; - -extern bool load_image(const char * fname, ImageRec & tex); - -bool upload_image(const char* fileName) -{ - return load_image(fileName, texture); -} diff --git a/Source/Terrain.h b/Source/Terrain.h index 9f919b4..9602ad5 100644 --- a/Source/Terrain.h +++ b/Source/Terrain.h @@ -23,7 +23,7 @@ along with Lugaru. If not, see . #include "gamegl.h" #include "Frustum.h" #include "Lights.h" -#include "TGALoader.h" +#include "ImageIO.h" #include "Quaternions.h" #include "Quaternions.h" #include "Texture.h" diff --git a/Source/Text.h b/Source/Text.h index 584ca4a..b3165b7 100644 --- a/Source/Text.h +++ b/Source/Text.h @@ -26,7 +26,7 @@ along with Lugaru. If not, see . //#include "Files.h" #include "Quaternions.h" #include "gamegl.h" -#include "TGALoader.h" +#include "ImageIO.h" #include "Texture.h" class Text diff --git a/Source/Texture.cpp b/Source/Texture.cpp index 2d3f2a8..150eee7 100644 --- a/Source/Texture.cpp +++ b/Source/Texture.cpp @@ -19,7 +19,7 @@ along with Lugaru. If not, see . #include "gamegl.h" #include "Texture.h" -#include "TGALoader.h" +#include "ImageIO.h" using namespace std; -- 2.39.5