Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
libSDL
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PocketInsanity
libSDL
Commits
05ba63bd
Commit
05ba63bd
authored
Feb 09, 2011
by
Sam Lantinga
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added a scaling test program
parent
bc838ec7
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
190 additions
and
0 deletions
+190
-0
Makefile.in
test/Makefile.in
+4
-0
testscale.c
test/testscale.c
+186
-0
No files found.
test/Makefile.in
View file @
05ba63bd
...
...
@@ -43,6 +43,7 @@ TARGETS = \
testplatform
$(EXE)
\
testpower
$(EXE)
\
testresample
$(EXE)
\
testscale
$(EXE)
\
testsem
$(EXE)
\
testshader
$(EXE)
\
testshape
$(EXE)
\
...
...
@@ -153,6 +154,9 @@ testoverlay$(EXE): $(srcdir)/testoverlay.c
testplatform$(EXE)
:
$(srcdir)/testplatform.c
$(CC)
-o
$@
$?
$(CFLAGS)
$(LIBS)
testscale$(EXE)
:
$(srcdir)/testscale.c $(srcdir)/common.c
$(CC)
-o
$@
$(srcdir)
/testscale.c
$(srcdir)
/common.c
$(CFLAGS)
$(LIBS)
testsem$(EXE)
:
$(srcdir)/testsem.c
$(CC)
-o
$@
$?
$(CFLAGS)
$(LIBS)
...
...
test/testscale.c
0 → 100644
View file @
05ba63bd
/* Simple program: Move N sprites around on the screen as fast as possible */
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "SDL.h"
#include "common.h"
#define WINDOW_WIDTH 640
#define WINDOW_HEIGHT 480
static
CommonState
*
state
;
typedef
struct
{
SDL_Window
*
window
;
SDL_Renderer
*
renderer
;
SDL_Texture
*
background
;
SDL_Texture
*
sprite
;
SDL_Rect
sprite_rect
;
int
scale_direction
;
}
DrawState
;
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
static
void
quit
(
int
rc
)
{
CommonQuit
(
state
);
exit
(
rc
);
}
SDL_Texture
*
LoadTexture
(
SDL_Renderer
*
renderer
,
char
*
file
,
SDL_bool
transparent
)
{
SDL_Surface
*
temp
;
SDL_Texture
*
texture
;
/* Load the sprite image */
temp
=
SDL_LoadBMP
(
file
);
if
(
temp
==
NULL
)
{
fprintf
(
stderr
,
"Couldn't load %s: %s"
,
file
,
SDL_GetError
());
return
NULL
;
}
/* Set transparent pixel as the pixel at (0,0) */
if
(
transparent
)
{
if
(
temp
->
format
->
palette
)
{
SDL_SetColorKey
(
temp
,
SDL_TRUE
,
*
(
Uint8
*
)
temp
->
pixels
);
}
else
{
switch
(
temp
->
format
->
BitsPerPixel
)
{
case
15
:
SDL_SetColorKey
(
temp
,
SDL_TRUE
,
(
*
(
Uint16
*
)
temp
->
pixels
)
&
0x00007FFF
);
break
;
case
16
:
SDL_SetColorKey
(
temp
,
SDL_TRUE
,
*
(
Uint16
*
)
temp
->
pixels
);
break
;
case
24
:
SDL_SetColorKey
(
temp
,
SDL_TRUE
,
(
*
(
Uint32
*
)
temp
->
pixels
)
&
0x00FFFFFF
);
break
;
case
32
:
SDL_SetColorKey
(
temp
,
SDL_TRUE
,
*
(
Uint32
*
)
temp
->
pixels
);
break
;
}
}
}
/* Create textures from the image */
texture
=
SDL_CreateTextureFromSurface
(
renderer
,
temp
);
if
(
!
texture
)
{
fprintf
(
stderr
,
"Couldn't create texture: %s
\n
"
,
SDL_GetError
());
SDL_FreeSurface
(
temp
);
return
NULL
;
}
SDL_FreeSurface
(
temp
);
/* We're ready to roll. :) */
return
texture
;
}
void
Draw
(
DrawState
*
s
)
{
int
w
,
h
;
SDL_Rect
rect
;
SDL_GetWindowSize
(
s
->
window
,
&
w
,
&
h
);
/* Draw the background */
SDL_RenderCopy
(
s
->
renderer
,
s
->
background
,
NULL
,
NULL
);
/* Scale and draw the sprite */
s
->
sprite_rect
.
w
+=
s
->
scale_direction
;
s
->
sprite_rect
.
h
+=
s
->
scale_direction
;
if
(
s
->
scale_direction
>
0
)
{
if
(
s
->
sprite_rect
.
w
>=
w
||
s
->
sprite_rect
.
h
>=
h
)
{
s
->
scale_direction
=
-
1
;
}
}
else
{
if
(
s
->
sprite_rect
.
w
<=
1
||
s
->
sprite_rect
.
h
<=
1
)
{
s
->
scale_direction
=
1
;
}
}
s
->
sprite_rect
.
x
=
(
w
-
s
->
sprite_rect
.
w
)
/
2
;
s
->
sprite_rect
.
y
=
(
h
-
s
->
sprite_rect
.
h
)
/
2
;
SDL_RenderCopy
(
s
->
renderer
,
s
->
sprite
,
NULL
,
&
s
->
sprite_rect
);
/* Update the screen! */
SDL_RenderPresent
(
s
->
renderer
);
}
int
main
(
int
argc
,
char
*
argv
[])
{
DrawState
*
drawstates
;
int
i
,
done
;
SDL_Event
event
;
int
frames
;
Uint32
then
,
now
;
/* Initialize test framework */
state
=
CommonCreateState
(
argv
,
SDL_INIT_VIDEO
);
if
(
!
state
)
{
return
1
;
}
for
(
i
=
1
;
i
<
argc
;)
{
int
consumed
;
consumed
=
CommonArg
(
state
,
i
);
if
(
consumed
==
0
)
{
fprintf
(
stderr
,
"Usage: %s %s
\n
"
,
argv
[
0
],
CommonUsage
(
state
));
return
1
;
}
i
+=
consumed
;
}
if
(
!
CommonInit
(
state
))
{
quit
(
2
);
}
drawstates
=
SDL_stack_alloc
(
DrawState
,
state
->
num_windows
);
for
(
i
=
0
;
i
<
state
->
num_windows
;
++
i
)
{
DrawState
*
drawstate
=
&
drawstates
[
i
];
drawstate
->
window
=
state
->
windows
[
i
];
drawstate
->
renderer
=
state
->
renderers
[
i
];
drawstate
->
sprite
=
LoadTexture
(
drawstate
->
renderer
,
"icon.bmp"
,
SDL_TRUE
);
drawstate
->
background
=
LoadTexture
(
drawstate
->
renderer
,
"sample.bmp"
,
SDL_FALSE
);
if
(
!
drawstate
->
sprite
||
!
drawstate
->
background
)
{
quit
(
2
);
}
SDL_QueryTexture
(
drawstate
->
sprite
,
NULL
,
NULL
,
&
drawstate
->
sprite_rect
.
w
,
&
drawstate
->
sprite_rect
.
h
);
drawstate
->
scale_direction
=
1
;
}
/* Main render loop */
frames
=
0
;
then
=
SDL_GetTicks
();
done
=
0
;
while
(
!
done
)
{
/* Check for events */
++
frames
;
while
(
SDL_PollEvent
(
&
event
))
{
CommonEvent
(
state
,
&
event
,
&
done
);
}
for
(
i
=
0
;
i
<
state
->
num_windows
;
++
i
)
{
Draw
(
&
drawstates
[
i
]);
}
}
/* Print out some timing information */
now
=
SDL_GetTicks
();
if
(
now
>
then
)
{
double
fps
=
((
double
)
frames
*
1000
)
/
(
now
-
then
);
printf
(
"%2.2f frames per second
\n
"
,
fps
);
}
SDL_stack_free
(
drawstate
);
quit
(
0
);
return
0
;
}
/* vi: set ts=4 sw=4 expandtab: */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment