Skip to content

Commit f1b7047

Browse files
committed
Use a rendertarget for smooth scaling (Fix #20)
Increase version number
1 parent 3ad49c5 commit f1b7047

File tree

8 files changed

+36
-10
lines changed

8 files changed

+36
-10
lines changed

src/drawing.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ void statusbar (SDL_Renderer *renderer,SDL_Texture *tiles,int room,int lifes,int
116116
SDL_Rect srcnumbers = {0,460,10,10};
117117
SDL_Rect desnumbers = {18,178,10,10};
118118
SDL_Rect srctext = {0,0,140,20};
119-
SDL_Rect destext = {115,176,136,18};
119+
SDL_Rect destext = {115,174,140,20};
120120

121121
/* Show heart and crosses sprites */
122122
if (changetiles == 1)

src/ending.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include "ending.h"
44
#include "loading.h"
5+
#include "main.h"
56

67
void ending (SDL_Window *screen,uint8_t *state) {
78

@@ -34,7 +35,7 @@ void ending (SDL_Window *screen,uint8_t *state) {
3435
SDL_RenderCopy(renderer,tiles,&srcdoor,&desdoor);
3536

3637
/* Flip */
37-
SDL_RenderPresent(renderer);
38+
renderpresent(renderer);
3839

3940
}
4041

src/game.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ void game(SDL_Window *screen,uint8_t *state,uint8_t *grapset,uint8_t *fullscreen
240240
blueparchment (renderer,&jean);
241241

242242
/* Flip ! */
243-
SDL_RenderPresent(renderer);
243+
renderpresent(renderer);
244244

245245
if (parchment > 0) {
246246
Mix_PlayChannel(-1, fx[2], 0);

src/gameover.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include "gameover.h"
44
#include "loading.h"
5+
#include "main.h"
56

67
void gameover (SDL_Window *screen,uint8_t *state) {
78

@@ -12,7 +13,7 @@ void gameover (SDL_Window *screen,uint8_t *state) {
1213
SDL_RenderCopy(renderer,gameover,NULL,NULL);
1314

1415
/* Flip */
15-
SDL_RenderPresent(renderer);
16+
renderpresent(renderer);
1617
Mix_PlayMusic(bso, 0);
1718

1819
/* Wait */

src/history.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include "history.h"
44
#include "loading.h"
5+
#include "main.h"
56

67
void history(SDL_Window *screen,uint8_t *state,uint8_t *grapset,uint8_t *fullscreen) {
78

@@ -119,7 +120,7 @@ void history(SDL_Window *screen,uint8_t *state,uint8_t *grapset,uint8_t *fullscr
119120
}
120121

121122
/* Flip ! */
122-
SDL_RenderPresent(renderer);
123+
renderpresent(renderer);
123124

124125
}
125126

src/main.c

+24-3
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,22 @@ int main (int argc, char** argv) {
4141
/* Creating window */
4242
SDL_Window *screen = SDL_CreateWindow(GAME_TITLE,
4343
SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,SCREEN_W * 3,SCREEN_H * 3,
44-
fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
44+
fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : SDL_WINDOW_RESIZABLE);
4545

4646
/* Create renderer (with VSync, nice !) */
47-
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
48-
renderer = SDL_CreateRenderer(screen, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
47+
renderer = SDL_CreateRenderer(screen, -1,
48+
SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
4949
SDL_RenderSetLogicalSize(renderer, SCREEN_W, SCREEN_H);
50+
51+
/* Create a render target for smooth scaling */
52+
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
53+
SDL_Texture *target = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888,
54+
SDL_TEXTUREACCESS_TARGET, SCREEN_W, SCREEN_H);
55+
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "nearest");
56+
SDL_SetRenderTarget(renderer, target);
57+
5058
SDL_SetRenderDrawColor(renderer,0,0,0,255);
59+
SDL_RenderClear(renderer);
5160

5261
/* Init joystick if there's one connected */
5362
SDL_Joystick *joystick = NULL;
@@ -93,6 +102,7 @@ int main (int argc, char** argv) {
93102

94103
/* Cleaning */
95104
SDL_JoystickClose(joystick);
105+
SDL_DestroyTexture(target);
96106
SDL_DestroyRenderer(renderer);
97107
SDL_DestroyWindow(screen);
98108
SDL_Quit();
@@ -151,3 +161,14 @@ void update_title(SDL_Window *screen, const char* title) {
151161
}
152162
SDL_SetWindowTitle(screen, buf);
153163
}
164+
165+
void renderpresent(SDL_Renderer *renderer) {
166+
SDL_Texture *target = SDL_GetRenderTarget(renderer);
167+
SDL_SetRenderTarget(renderer, NULL);
168+
169+
SDL_RenderClear(renderer);
170+
SDL_RenderCopy(renderer, target, NULL, NULL);
171+
SDL_RenderPresent(renderer);
172+
173+
SDL_SetRenderTarget(renderer, target);
174+
}

src/main.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@
66

77
int check_data();
88
void update_title(SDL_Window *screen, const char* title);
9+
void renderpresent(SDL_Renderer *renderer);
910

10-
#define GAME_TITLE "Abbaye des Morts v2.0.3"
11+
#define GAME_TITLE "Abbaye des Morts v2.0.4"

src/startscreen.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include "startscreen.h"
44
#include "loading.h"
5+
#include "main.h"
56

67
void startscreen(SDL_Window *screen,uint8_t *state,uint8_t *grapset,uint8_t *fullscreen) {
78

@@ -35,7 +36,7 @@ void startscreen(SDL_Window *screen,uint8_t *state,uint8_t *grapset,uint8_t *ful
3536
SDL_RenderCopy(renderer, intromd, &srcintro, &desintro);
3637

3738
/* Flip ! */
38-
SDL_RenderPresent(renderer);
39+
renderpresent(renderer);
3940

4041
change = 0;
4142

0 commit comments

Comments
 (0)