Add SDL 2 support to tools/sdl_image_test/showimage.c
This commit is contained in:
parent
18d35f5bf0
commit
c8d2851d63
@ -1,18 +1,35 @@
|
||||
CFLAGS = -Wall -O -g
|
||||
|
||||
CFLAGS += $(shell sdl-config --cflags)
|
||||
ifeq ($(API),sdl2)
|
||||
# SDL 2.x
|
||||
SDLCONFIG = sdl2-config
|
||||
SDLIMAGE = SDL2_image
|
||||
BIN = showimage-sdl2
|
||||
CFLAGS += -DUSE_SDL2
|
||||
else
|
||||
# SDL 1.2.x
|
||||
SDLCONFIG = sdl-config
|
||||
SDLIMAGE = SDL_image
|
||||
BIN = showimage
|
||||
CFLAGS += -DUSE_SDL
|
||||
endif
|
||||
|
||||
LDLIBS = $(shell sdl-config --libs)
|
||||
LDLIBS += $(shell pkg-config SDL_image --libs-only-l)
|
||||
CFLAGS += $(shell $(SDLCONFIG) --cflags)
|
||||
|
||||
LDFLAGS = $(shell pkg-config SDL_image --libs-only-L)
|
||||
LDLIBS = $(shell $(SDLCONFIG) --libs)
|
||||
LDLIBS += $(shell pkg-config $(SDLIMAGE) --libs-only-l)
|
||||
|
||||
LDFLAGS = $(shell pkg-config $(SDLIMAGE) --libs-only-L)
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
all: showimage
|
||||
all: $(BIN)
|
||||
|
||||
clean:
|
||||
$(RM) showimage *.o
|
||||
$(RM) $(BIN) *.o
|
||||
|
||||
showimage: showimage.o
|
||||
$(BIN): $(BIN).o
|
||||
|
||||
$(BIN).o: showimage.c
|
||||
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
|
||||
@ -23,7 +23,12 @@
|
||||
#include <SDL.h>
|
||||
#include <SDL_image.h>
|
||||
|
||||
#if defined(USE_SDL)
|
||||
SDL_Surface * screen = NULL;
|
||||
#elif defined(USE_SDL2)
|
||||
SDL_Window * window = NULL;
|
||||
SDL_Renderer * renderer = NULL;
|
||||
#endif
|
||||
|
||||
int Show_IMG(const char * filename)
|
||||
{
|
||||
@ -35,19 +40,38 @@ int Show_IMG(const char * filename)
|
||||
fprintf(stderr, "Cannot load image \"%s\"\n", filename);
|
||||
return -1;
|
||||
}
|
||||
#if defined(USE_SDL)
|
||||
if(screen == NULL) {
|
||||
screen = SDL_SetVideoMode(image->w, image->h, image->format->BitsPerPixel, 0);
|
||||
}
|
||||
#elif defined(USE_SDL2)
|
||||
if(window == NULL) {
|
||||
window = SDL_CreateWindow(filename, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
|
||||
image->w, image->h, 0);
|
||||
renderer = SDL_CreateRenderer(window, -1, 0);
|
||||
}
|
||||
#endif
|
||||
dest.x = 0;
|
||||
dest.y = 0;
|
||||
dest.w = image->w;
|
||||
dest.h = image->h;
|
||||
#if defined(USE_SDL)
|
||||
if(screen != NULL) {
|
||||
SDL_BlitSurface(image, NULL, screen, &dest);
|
||||
SDL_UpdateRects(screen, 1, &dest);
|
||||
} else {
|
||||
fprintf(stderr, "no SDL screen open\n");
|
||||
}
|
||||
#elif defined(USE_SDL2)
|
||||
if(renderer != NULL) {
|
||||
SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, image);
|
||||
SDL_RenderCopy(renderer, texture, NULL, NULL);
|
||||
SDL_RenderPresent(renderer);
|
||||
SDL_DestroyTexture(texture);
|
||||
} else {
|
||||
fprintf(stderr, "no SDL2 renderer\n");
|
||||
}
|
||||
#endif
|
||||
SDL_FreeSurface(image);
|
||||
return 0;
|
||||
}
|
||||
@ -87,10 +111,18 @@ int main(int argc, char * * argv)
|
||||
}
|
||||
atexit(SDL_Quit);
|
||||
|
||||
#ifdef USE_SDL
|
||||
SDL_WM_SetCaption(filename, filename); /* window caption, icon caption */
|
||||
#endif
|
||||
|
||||
if(Show_IMG(filename) < 0)
|
||||
return 1;
|
||||
Manage_Events();
|
||||
#if defined(USE_SDL2)
|
||||
if(renderer != NULL)
|
||||
SDL_DestroyRenderer(renderer);
|
||||
if(window != NULL)
|
||||
SDL_DestroyWindow(window);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user