mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-06-26 06:28:30 +02:00
This argument... doesn't do anything. First off, setting it to true explicitly enables blending on the resulting surface, which is kind of the exact opposite of the variable name and is misleading to say the least? And secondly, SDL surfaces have blending enabled by default anyways, so it still doesn't even do anything. It's also a default argument, and I'm not one to shy away from removing such default arguments.
148 lines
4.0 KiB
C++
148 lines
4.0 KiB
C++
#include "GraphicsResources.h"
|
|
|
|
#include "FileSystemUtils.h"
|
|
#include "Vlogging.h"
|
|
|
|
// Used to load PNG data
|
|
extern "C"
|
|
{
|
|
extern unsigned lodepng_decode24(
|
|
unsigned char** out,
|
|
unsigned* w,
|
|
unsigned* h,
|
|
const unsigned char* in,
|
|
size_t insize
|
|
);
|
|
extern unsigned lodepng_decode32(
|
|
unsigned char** out,
|
|
unsigned* w,
|
|
unsigned* h,
|
|
const unsigned char* in,
|
|
size_t insize
|
|
);
|
|
extern const char* lodepng_error_text(unsigned code);
|
|
}
|
|
|
|
static SDL_Surface* LoadImage(const char *filename, bool noAlpha = false)
|
|
{
|
|
//Temporary storage for the image that's loaded
|
|
SDL_Surface* loadedImage = NULL;
|
|
//The optimized image that will be used
|
|
SDL_Surface* optimizedImage = NULL;
|
|
|
|
unsigned char *data;
|
|
unsigned int width, height;
|
|
unsigned int error;
|
|
|
|
unsigned char *fileIn;
|
|
size_t length;
|
|
FILESYSTEM_loadAssetToMemory(filename, &fileIn, &length, false);
|
|
if (fileIn == NULL)
|
|
{
|
|
SDL_assert(0 && "Image file missing!");
|
|
return NULL;
|
|
}
|
|
if (noAlpha)
|
|
{
|
|
error = lodepng_decode24(&data, &width, &height, fileIn, length);
|
|
}
|
|
else
|
|
{
|
|
error = lodepng_decode32(&data, &width, &height, fileIn, length);
|
|
}
|
|
FILESYSTEM_freeMemory(&fileIn);
|
|
|
|
if (error != 0)
|
|
{
|
|
vlog_error("Could not load %s: %s", filename, lodepng_error_text(error));
|
|
return NULL;
|
|
}
|
|
|
|
loadedImage = SDL_CreateRGBSurfaceWithFormatFrom(
|
|
data,
|
|
width,
|
|
height,
|
|
noAlpha ? 24 : 32,
|
|
width * (noAlpha ? 3 : 4),
|
|
noAlpha ? SDL_PIXELFORMAT_RGB24 : SDL_PIXELFORMAT_ABGR8888
|
|
);
|
|
|
|
if (loadedImage != NULL)
|
|
{
|
|
optimizedImage = SDL_ConvertSurfaceFormat(
|
|
loadedImage,
|
|
SDL_PIXELFORMAT_ARGB8888,
|
|
0
|
|
);
|
|
SDL_FreeSurface( loadedImage );
|
|
SDL_free(data);
|
|
SDL_SetSurfaceBlendMode(optimizedImage, SDL_BLENDMODE_BLEND);
|
|
return optimizedImage;
|
|
}
|
|
else
|
|
{
|
|
SDL_free(data);
|
|
vlog_error("Image not found: %s", filename);
|
|
SDL_assert(0 && "Image not found! See stderr.");
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
void GraphicsResources::init(void)
|
|
{
|
|
im_tiles = LoadImage("graphics/tiles.png");
|
|
im_tiles2 = LoadImage("graphics/tiles2.png");
|
|
im_tiles3 = LoadImage("graphics/tiles3.png");
|
|
im_entcolours = LoadImage("graphics/entcolours.png");
|
|
im_sprites = LoadImage("graphics/sprites.png");
|
|
im_flipsprites = LoadImage("graphics/flipsprites.png");
|
|
im_bfont = LoadImage("graphics/font.png");
|
|
im_teleporter = LoadImage("graphics/teleporter.png");
|
|
|
|
im_image0 = LoadImage("graphics/levelcomplete.png");
|
|
im_image1 = LoadImage("graphics/minimap.png", true);
|
|
im_image2 = LoadImage("graphics/covered.png", true);
|
|
im_image3 = LoadImage("graphics/elephant.png");
|
|
im_image4 = LoadImage("graphics/gamecomplete.png");
|
|
im_image5 = LoadImage("graphics/fliplevelcomplete.png");
|
|
im_image6 = LoadImage("graphics/flipgamecomplete.png");
|
|
im_image7 = LoadImage("graphics/site.png");
|
|
im_image8 = LoadImage("graphics/site2.png");
|
|
im_image9 = LoadImage("graphics/site3.png");
|
|
im_image10 = LoadImage("graphics/ending.png");
|
|
im_image11 = LoadImage("graphics/site4.png");
|
|
im_image12 = LoadImage("graphics/minimap.png");
|
|
}
|
|
|
|
|
|
void GraphicsResources::destroy(void)
|
|
{
|
|
#define CLEAR(img) \
|
|
SDL_FreeSurface(img); \
|
|
img = NULL;
|
|
|
|
CLEAR(im_tiles);
|
|
CLEAR(im_tiles2);
|
|
CLEAR(im_tiles3);
|
|
CLEAR(im_entcolours);
|
|
CLEAR(im_sprites);
|
|
CLEAR(im_flipsprites);
|
|
CLEAR(im_bfont);
|
|
CLEAR(im_teleporter);
|
|
|
|
CLEAR(im_image0);
|
|
CLEAR(im_image1);
|
|
CLEAR(im_image2);
|
|
CLEAR(im_image3);
|
|
CLEAR(im_image4);
|
|
CLEAR(im_image5);
|
|
CLEAR(im_image6);
|
|
CLEAR(im_image7);
|
|
CLEAR(im_image8);
|
|
CLEAR(im_image9);
|
|
CLEAR(im_image10);
|
|
CLEAR(im_image11);
|
|
CLEAR(im_image12);
|
|
#undef CLEAR
|
|
}
|