-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsdl2_renderer_test.cpp
143 lines (113 loc) · 3.48 KB
/
sdl2_renderer_test.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <cstdio>
#include <sys/time.h>
#include <SDL.h>
#include <SDL_image.h>
SDL_Window* window = NULL;
SDL_Renderer *renderer;
SDL_Texture* texture;
SDL_Texture *WID_loadTexture( SDL_Renderer *renderer, char *name);
int main(int argc, char** argv)
{
if (SDL_Init(SDL_INIT_VIDEO) != 0 )
{
fprintf(stderr,"Failed to initialize SDL (%s)\n",SDL_GetError());
return -1;
}
window = SDL_CreateWindow("test SDL2",SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
800,
600,
SDL_WINDOW_SHOWN);
if( window )
{
renderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED);
if ( renderer )
{
SDL_RendererInfo info;
SDL_GetRendererInfo(renderer, &info);
fprintf(stderr, "name : %s\n", info.name);
fprintf(stderr, "flags : ");
if (info.flags & SDL_RENDERER_SOFTWARE) fprintf(stderr, "SDL_RENDERER_SOFTWARE");
if (info.flags & SDL_RENDERER_ACCELERATED) fprintf(stderr, "SDL_RENDERER_ACCELERATED ");
if (info.flags & SDL_RENDERER_PRESENTVSYNC) fprintf(stderr, "SDL_RENDERER_PRESENTVSYNC ");
if (info.flags & SDL_RENDERER_TARGETTEXTURE) fprintf(stderr, "SDL_RENDERER_TARGETTEXTURE ");
fprintf(stderr, "\nnb textures max : %d\n", info.num_texture_formats);
fprintf(stderr, "texture size max : %d x %d \n", info.max_texture_width, info.max_texture_height);
fprintf(stderr, "current driver : %s\n", SDL_GetCurrentVideoDriver());
if (SDL_SetRenderTarget(renderer, NULL) != 0) {
fprintf(stderr, "SDL_SetRenderTarget error %s\n", SDL_GetError());
}
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
SDL_SetRenderDrawColor(renderer,0,0,0,255);
SDL_RenderClear(renderer);
texture = WID_loadTexture(renderer, (char*)"800_600.png");
SDL_Rect clip = {0,0,200,200};
Uint64 start, end;
start = SDL_GetPerformanceCounter();
SDL_RenderCopy(renderer, texture, NULL, &clip);
end = SDL_GetPerformanceCounter();
printf("RenderCopy 200x100 : %lu\n", (end-start));
SDL_Delay(20);
start = SDL_GetPerformanceCounter();
SDL_RenderPresent(renderer);
end = SDL_GetPerformanceCounter();
printf("RenderPresent : %lu\n", (end-start));
SDL_Delay(20);
start = SDL_GetPerformanceCounter();
SDL_RenderCopy(renderer, texture, NULL, NULL);
end = SDL_GetPerformanceCounter();
printf("RenderCopy 800x600 : %lu\n", (end-start));
SDL_Delay(20);
start = SDL_GetPerformanceCounter();
SDL_RenderPresent(renderer);
end = SDL_GetPerformanceCounter();
printf("RenderPresent : %lu\n", (end-start));
bool loop = true;
while ( loop )
{
SDL_Event event;
SDL_WaitEvent( &event );
if ( event.type == SDL_QUIT )
{
fprintf(stderr, "received SDL_QUIT\n");
loop = false;
}
if ( event.type == SDL_KEYDOWN )
{
if (event.key.keysym.sym == SDLK_q)
loop = false;
}
}
if (texture != NULL) SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
}
else
{
fprintf(stderr,"Fail to create renderer (%s)\n",SDL_GetError());
}
SDL_DestroyWindow(window);
}
else
{
fprintf(stderr,"Fail to create window: %s\n",SDL_GetError());
}
SDL_Quit();
return 0;
}
SDL_Texture *WID_loadTexture( SDL_Renderer *renderer, char *name)
{
SDL_Texture *texture = NULL;
if(name == NULL || renderer == NULL)
return NULL;
SDL_Surface* surface = IMG_Load( name );
if (surface == NULL)
{
fprintf(stderr, "error loading : %s\n", name);
}
else
{
texture = SDL_CreateTextureFromSurface( renderer, surface );
SDL_FreeSurface( surface );
}
return texture;
}