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
ffe479aa
Commit
ffe479aa
authored
Mar 27, 2011
by
Sam Lantinga
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Temporarily removing sprite and sprite2 at Frank's request
parent
3b72fdef
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
0 additions
and
2876 deletions
+0
-2876
Makefile
test/nds-test-progs/sprite/Makefile
+0
-132
common.c
test/nds-test-progs/sprite/source/common.c
+0
-965
common.h
test/nds-test-progs/sprite/source/common.h
+0
-48
testsprite.c
test/nds-test-progs/sprite/source/testsprite.c
+0
-316
Makefile
test/nds-test-progs/sprite2/Makefile
+0
-132
icon.bmp
test/nds-test-progs/sprite2/icon.bmp
+0
-0
common.c
test/nds-test-progs/sprite2/source/common.c
+0
-965
common.h
test/nds-test-progs/sprite2/source/common.h
+0
-48
testsprite2.c
test/nds-test-progs/sprite2/source/testsprite2.c
+0
-270
No files found.
test/nds-test-progs/sprite/Makefile
deleted
100755 → 0
View file @
3b72fdef
#---------------------------------------------------------------------------------
.SUFFIXES
:
#---------------------------------------------------------------------------------
ifeq
($(strip
$(DEVKITARM)),)
$(error
"Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM"
)
endif
include
$(DEVKITARM)/ds_rules
#---------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# INCLUDES is a list of directories containing extra header files
#---------------------------------------------------------------------------------
TARGET
:=
$(
shell
basename
$(CURDIR))
BUILD
:=
build
SOURCES
:=
source
DATA
:=
data
INCLUDES
:=
include
#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
ARCH
:=
-mthumb
-mthumb-interwork
# note: arm9tdmi isn't the correct CPU arch, but anything newer and LD
# *insists* it has a FPU or VFP, and it won't take no for an answer!
CFLAGS
:=
-save-temps
-g
-Wall
-O0
\
-mcpu
=
arm9tdmi
-mtune
=
arm9tdmi
\
$(ARCH)
CFLAGS
+=
$(INCLUDE)
-DARM9
-D__NDS__
CXXFLAGS
:=
$(CFLAGS)
-fno-rtti
-fno-exceptions
-fno-exceptions
-fno-rtti
ASFLAGS
:=
-g
$(ARCH)
LDFLAGS
=
-specs
=
ds_arm9.specs
-g
$(ARCH)
-mno-fpu
-Wl
,-Map,
$
(
notdir
$*
.map
)
#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project
#---------------------------------------------------------------------------------
LIBS
:=
-lSDL
-lfat
-lnds9
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS
:=
$(LIBNDS)
#---------------------------------------------------------------------------------
# no real need to edit anything past this point unless you need to add additional
# rules for different file extensions
#---------------------------------------------------------------------------------
ifneq
($(BUILD),$(notdir
$(CURDIR)))
#---------------------------------------------------------------------------------
export
OUTPUT
:=
$(CURDIR)
/
$(TARGET)
export
VPATH
:=
$
(
foreach
dir
,
$(SOURCES)
,
$(CURDIR)
/
$(dir)
)
\
$
(
foreach
dir
,
$(DATA)
,
$(CURDIR)
/
$(dir)
)
export
DEPSDIR
:=
$(CURDIR)
/
$(BUILD)
CFILES
:=
$
(
foreach
dir
,
$(SOURCES)
,
$
(
notdir
$
(
wildcard
$(dir)
/
*
.c
)))
CPPFILES
:=
$
(
foreach
dir
,
$(SOURCES)
,
$
(
notdir
$
(
wildcard
$(dir)
/
*
.cpp
)))
SFILES
:=
$
(
foreach
dir
,
$(SOURCES)
,
$
(
notdir
$
(
wildcard
$(dir)
/
*
.s
)))
BINFILES
:=
$
(
foreach
dir
,
$(DATA)
,
$
(
notdir
$
(
wildcard
$(dir)
/
*
.
*
)))
#---------------------------------------------------------------------------------
# use CXX for linking C++ projects, CC for standard C
#---------------------------------------------------------------------------------
ifeq
($(strip
$(CPPFILES)),)
#---------------------------------------------------------------------------------
export
LD
:=
$(CC)
#---------------------------------------------------------------------------------
else
#---------------------------------------------------------------------------------
export
LD
:=
$(CXX)
#---------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------
export
OFILES
:=
$
(
addsuffix .o,
$(BINFILES)
)
\
$
(
CPPFILES:.cpp
=
.o
)
$
(
CFILES:.c
=
.o
)
$
(
SFILES:.s
=
.o
)
export
INCLUDE
:=
$
(
foreach
dir
,
$(INCLUDES)
,-I
$(CURDIR)
/
$(dir)
)
\
$
(
foreach
dir
,
$(LIBDIRS)
,-I
$(dir)
/include
)
\
$
(
foreach
dir
,
$(LIBDIRS)
,-I
$(dir)
/include
)
\
-I
$(CURDIR)
/
$(BUILD)
export
LIBPATHS
:=
$
(
foreach
dir
,
$(LIBDIRS)
,-L
$(dir)
/lib
)
.PHONY
:
$(BUILD) clean
#---------------------------------------------------------------------------------
$(BUILD)
:
@
[
-d
$@
]
||
mkdir
-p
$@
@
make
--no-print-directory
-C
$(BUILD)
-f
$(CURDIR)
/Makefile
#---------------------------------------------------------------------------------
clean
:
@
echo
clean ...
@
rm
-fr
$(BUILD)
$(TARGET)
.elf
$(TARGET)
.nds
$(TARGET)
.arm9
$(TARGET)
.ds.gba
#---------------------------------------------------------------------------------
else
DEPENDS
:=
$
(
OFILES:.o
=
.d
)
#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
$(OUTPUT).ds.gba
:
$(OUTPUT).nds
$(OUTPUT).nds
:
$(OUTPUT).arm9
$(OUTPUT).arm9
:
$(OUTPUT).elf
$(OUTPUT).elf
:
$(OFILES)
#---------------------------------------------------------------------------------
%.pcx.o
:
%.pcx
#---------------------------------------------------------------------------------
@echo
$(notdir
$<)
@$(bin2o)
-include
$(DEPENDS)
#---------------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------------
test/nds-test-progs/sprite/source/common.c
deleted
100755 → 0
View file @
3b72fdef
/* A simple test program framework */
#include <stdio.h>
#include "common.h"
#define VIDEO_USAGE \
"[--video driver] [--renderer driver] [--info all|video|modes|render|event] [--display %d] [--fullscreen | --windows N] [--title title] [--center | --position X,Y] [--geometry WxH] [--depth N] [--refresh R] [--vsync] [--noframe] [--resize] [--minimize] [--maximize] [--grab]"
#define AUDIO_USAGE \
"[--rate N] [--format U8|S8|U16|U16LE|U16BE|S16|S16LE|S16BE] [--channels N] [--samples N]"
CommonState
*
CommonCreateState
(
char
**
argv
,
Uint32
flags
)
{
CommonState
*
state
=
SDL_calloc
(
1
,
sizeof
(
*
state
));
if
(
!
state
)
{
SDL_OutOfMemory
();
return
NULL
;
}
/* Initialize some defaults */
state
->
argv
=
argv
;
state
->
flags
=
flags
;
state
->
window_title
=
argv
[
0
];
state
->
window_flags
=
SDL_WINDOW_SHOWN
;
state
->
window_x
=
SDL_WINDOWPOS_UNDEFINED
;
state
->
window_y
=
SDL_WINDOWPOS_UNDEFINED
;
state
->
window_w
=
256
;
state
->
window_h
=
192
;
state
->
num_windows
=
1
;
state
->
audiospec
.
freq
=
22050
;
state
->
audiospec
.
format
=
AUDIO_S16
;
state
->
audiospec
.
channels
=
2
;
state
->
audiospec
.
samples
=
2048
;
return
state
;
}
int
CommonArg
(
CommonState
*
state
,
int
index
)
{
char
**
argv
=
state
->
argv
;
if
(
SDL_strcasecmp
(
argv
[
index
],
"--video"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
videodriver
=
argv
[
index
];
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--renderer"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
renderdriver
=
argv
[
index
];
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--info"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"all"
)
==
0
)
{
state
->
verbose
|=
(
VERBOSE_VIDEO
|
VERBOSE_MODES
|
VERBOSE_RENDER
|
VERBOSE_EVENT
);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"video"
)
==
0
)
{
state
->
verbose
|=
VERBOSE_VIDEO
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"modes"
)
==
0
)
{
state
->
verbose
|=
VERBOSE_MODES
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"render"
)
==
0
)
{
state
->
verbose
|=
VERBOSE_RENDER
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"event"
)
==
0
)
{
state
->
verbose
|=
VERBOSE_EVENT
;
return
2
;
}
return
-
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--display"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
display
=
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--fullscreen"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_FULLSCREEN
;
state
->
num_windows
=
1
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--windows"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
]
||
!
SDL_isdigit
(
*
argv
[
index
]))
{
return
-
1
;
}
if
(
!
(
state
->
window_flags
&
SDL_WINDOW_FULLSCREEN
))
{
state
->
num_windows
=
SDL_atoi
(
argv
[
index
]);
}
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--title"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
window_title
=
argv
[
index
];
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--center"
)
==
0
)
{
state
->
window_x
=
SDL_WINDOWPOS_CENTERED
;
state
->
window_y
=
SDL_WINDOWPOS_CENTERED
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--position"
)
==
0
)
{
char
*
x
,
*
y
;
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
x
=
argv
[
index
];
y
=
argv
[
index
];
while
(
*
y
&&
*
y
!=
','
)
{
++
y
;
}
if
(
!*
y
)
{
return
-
1
;
}
*
y
++
=
'\0'
;
state
->
window_x
=
SDL_atoi
(
x
);
state
->
window_y
=
SDL_atoi
(
y
);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--geometry"
)
==
0
)
{
char
*
w
,
*
h
;
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
w
=
argv
[
index
];
h
=
argv
[
index
];
while
(
*
h
&&
*
h
!=
'x'
)
{
++
h
;
}
if
(
!*
h
)
{
return
-
1
;
}
*
h
++
=
'\0'
;
state
->
window_w
=
SDL_atoi
(
w
);
state
->
window_h
=
SDL_atoi
(
h
);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--depth"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
depth
=
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--refresh"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
refresh_rate
=
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--vsync"
)
==
0
)
{
state
->
render_flags
|=
SDL_RENDERER_PRESENTVSYNC
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--noframe"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_BORDERLESS
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--resize"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_RESIZABLE
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--minimize"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_MINIMIZED
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--maximize"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_MAXIMIZED
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--grab"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_INPUT_GRABBED
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--rate"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
audiospec
.
freq
=
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--format"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"U8"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_U8
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"S8"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_S8
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"U16"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_U16
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"U16LE"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_U16LSB
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"U16BE"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_U16MSB
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"S16"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_S16
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"S16LE"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_S16LSB
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"S16BE"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_S16MSB
;
return
2
;
}
return
-
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--channels"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
audiospec
.
channels
=
(
Uint8
)
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--samples"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
audiospec
.
samples
=
(
Uint16
)
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
((
SDL_strcasecmp
(
argv
[
index
],
"-h"
)
==
0
)
||
(
SDL_strcasecmp
(
argv
[
index
],
"--help"
)
==
0
))
{
/* Print the usage message */
return
-
1
;
}
return
0
;
}
const
char
*
CommonUsage
(
CommonState
*
state
)
{
switch
(
state
->
flags
&
(
SDL_INIT_VIDEO
|
SDL_INIT_AUDIO
))
{
case
SDL_INIT_VIDEO
:
return
VIDEO_USAGE
;
case
SDL_INIT_AUDIO
:
return
AUDIO_USAGE
;
case
(
SDL_INIT_VIDEO
|
SDL_INIT_AUDIO
):
return
VIDEO_USAGE
" "
AUDIO_USAGE
;
default:
return
""
;
}
}
static
void
PrintRendererFlag
(
Uint32
flag
)
{
switch
(
flag
)
{
case
SDL_RENDERER_SINGLEBUFFER
:
fprintf
(
stderr
,
"SingleBuffer"
);
break
;
case
SDL_RENDERER_PRESENTCOPY
:
fprintf
(
stderr
,
"PresentCopy"
);
break
;
case
SDL_RENDERER_PRESENTFLIP2
:
fprintf
(
stderr
,
"PresentFlip2"
);
break
;
case
SDL_RENDERER_PRESENTFLIP3
:
fprintf
(
stderr
,
"PresentFlip3"
);
break
;
case
SDL_RENDERER_PRESENTDISCARD
:
fprintf
(
stderr
,
"PresentDiscard"
);
break
;
case
SDL_RENDERER_PRESENTVSYNC
:
fprintf
(
stderr
,
"PresentVSync"
);
break
;
case
SDL_RENDERER_ACCELERATED
:
fprintf
(
stderr
,
"Accelerated"
);
break
;
default:
fprintf
(
stderr
,
"0x%8.8x"
,
flag
);
break
;
}
}
static
void
PrintBlendMode
(
Uint32
flag
)
{
switch
(
flag
)
{
case
SDL_BLENDMODE_NONE
:
fprintf
(
stderr
,
"None"
);
break
;
case
SDL_BLENDMODE_MASK
:
fprintf
(
stderr
,
"Mask"
);
break
;
case
SDL_BLENDMODE_BLEND
:
fprintf
(
stderr
,
"Blend"
);
break
;
case
SDL_BLENDMODE_ADD
:
fprintf
(
stderr
,
"Add"
);
break
;
case
SDL_BLENDMODE_MOD
:
fprintf
(
stderr
,
"Mod"
);
break
;
default:
fprintf
(
stderr
,
"0x%8.8x"
,
flag
);
break
;
}
}
static
void
PrintScaleMode
(
Uint32
flag
)
{
switch
(
flag
)
{
case
SDL_TEXTURESCALEMODE_NONE
:
fprintf
(
stderr
,
"None"
);
break
;
case
SDL_TEXTURESCALEMODE_FAST
:
fprintf
(
stderr
,
"Fast"
);
break
;
case
SDL_TEXTURESCALEMODE_SLOW
:
fprintf
(
stderr
,
"Slow"
);
break
;
case
SDL_TEXTURESCALEMODE_BEST
:
fprintf
(
stderr
,
"Best"
);
break
;
default:
fprintf
(
stderr
,
"0x%8.8x"
,
flag
);
break
;
}
}
static
void
PrintPixelFormat
(
Uint32
format
)
{
switch
(
format
)
{
case
SDL_PIXELFORMAT_UNKNOWN
:
fprintf
(
stderr
,
"Unknwon"
);
break
;
case
SDL_PIXELFORMAT_INDEX1LSB
:
fprintf
(
stderr
,
"Index1LSB"
);
break
;
case
SDL_PIXELFORMAT_INDEX1MSB
:
fprintf
(
stderr
,
"Index1MSB"
);
break
;
case
SDL_PIXELFORMAT_INDEX4LSB
:
fprintf
(
stderr
,
"Index4LSB"
);
break
;
case
SDL_PIXELFORMAT_INDEX4MSB
:
fprintf
(
stderr
,
"Index4MSB"
);
break
;
case
SDL_PIXELFORMAT_INDEX8
:
fprintf
(
stderr
,
"Index8"
);
break
;
case
SDL_PIXELFORMAT_RGB332
:
fprintf
(
stderr
,
"RGB332"
);
break
;
case
SDL_PIXELFORMAT_RGB444
:
fprintf
(
stderr
,
"RGB444"
);
break
;
case
SDL_PIXELFORMAT_RGB555
:
fprintf
(
stderr
,
"RGB555"
);
break
;
case
SDL_PIXELFORMAT_ARGB4444
:
fprintf
(
stderr
,
"ARGB4444"
);
break
;
case
SDL_PIXELFORMAT_ARGB1555
:
fprintf
(
stderr
,
"ARGB1555"
);
break
;
case
SDL_PIXELFORMAT_RGB565
:
fprintf
(
stderr
,
"RGB565"
);
break
;
case
SDL_PIXELFORMAT_RGB24
:
fprintf
(
stderr
,
"RGB24"
);
break
;
case
SDL_PIXELFORMAT_BGR24
:
fprintf
(
stderr
,
"BGR24"
);
break
;
case
SDL_PIXELFORMAT_RGB888
:
fprintf
(
stderr
,
"RGB888"
);
break
;
case
SDL_PIXELFORMAT_BGR888
:
fprintf
(
stderr
,
"BGR888"
);
break
;
case
SDL_PIXELFORMAT_ARGB8888
:
fprintf
(
stderr
,
"ARGB8888"
);
break
;
case
SDL_PIXELFORMAT_RGBA8888
:
fprintf
(
stderr
,
"RGBA8888"
);
break
;
case
SDL_PIXELFORMAT_ABGR8888
:
fprintf
(
stderr
,
"ABGR8888"
);
break
;
case
SDL_PIXELFORMAT_BGRA8888
:
fprintf
(
stderr
,
"BGRA8888"
);
break
;
case
SDL_PIXELFORMAT_ARGB2101010
:
fprintf
(
stderr
,
"ARGB2101010"
);
break
;
case
SDL_PIXELFORMAT_YV12
:
fprintf
(
stderr
,
"YV12"
);
break
;
case
SDL_PIXELFORMAT_IYUV
:
fprintf
(
stderr
,
"IYUV"
);
break
;
case
SDL_PIXELFORMAT_YUY2
:
fprintf
(
stderr
,
"YUY2"
);
break
;
case
SDL_PIXELFORMAT_UYVY
:
fprintf
(
stderr
,
"UYVY"
);
break
;
case
SDL_PIXELFORMAT_YVYU
:
fprintf
(
stderr
,
"YVYU"
);
break
;
case
SDL_PIXELFORMAT_ABGR1555
:
fprintf
(
stderr
,
"ABGR1555"
);
break
;
case
SDL_PIXELFORMAT_BGR555
:
fprintf
(
stderr
,
"BGR555"
);
break
;
default:
fprintf
(
stderr
,
"0x%8.8x"
,
format
);
break
;
}
}
static
void
PrintRenderer
(
SDL_RendererInfo
*
info
)
{
int
i
,
count
;
fprintf
(
stderr
,
" Renderer %s:
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Flags: 0x%8.8X"
,
info
->
flags
);
fprintf
(
stderr
,
" ("
);
count
=
0
;
for
(
i
=
0
;
i
<
sizeof
(
info
->
flags
)
*
8
;
++
i
)
{
Uint32
flag
=
(
1
<<
i
);
if
(
info
->
flags
&
flag
)
{
if
(
count
>
0
)
{
fprintf
(
stderr
,
" | "
);
}
PrintRendererFlag
(
flag
);
++
count
;
}
}
fprintf
(
stderr
,
")
\n
"
);
fprintf
(
stderr
,
" Blend: 0x%8.8X"
,
info
->
blend_modes
);
fprintf
(
stderr
,
" ("
);
count
=
0
;
for
(
i
=
0
;
i
<
sizeof
(
info
->
blend_modes
)
*
8
;
++
i
)
{
Uint32
flag
=
(
1
<<
i
);
if
(
info
->
blend_modes
&
flag
)
{
if
(
count
>
0
)
{
fprintf
(
stderr
,
" | "
);
}
PrintBlendMode
(
flag
);
++
count
;
}
}
fprintf
(
stderr
,
")
\n
"
);
fprintf
(
stderr
,
" Scale: 0x%8.8X"
,
info
->
scale_modes
);
fprintf
(
stderr
,
" ("
);
count
=
0
;
for
(
i
=
0
;
i
<
sizeof
(
info
->
scale_modes
)
*
8
;
++
i
)
{
Uint32
flag
=
(
1
<<
i
);
if
(
info
->
scale_modes
&
flag
)
{
if
(
count
>
0
)
{
fprintf
(
stderr
,
" | "
);
}
PrintScaleMode
(
flag
);
++
count
;
}
}
fprintf
(
stderr
,
")
\n
"
);
fprintf
(
stderr
,
" Texture formats (%d): "
,
info
->
num_texture_formats
);
for
(
i
=
0
;
i
<
(
int
)
info
->
num_texture_formats
;
++
i
)
{
if
(
i
>
0
)
{
fprintf
(
stderr
,
", "
);
}
PrintPixelFormat
(
info
->
texture_formats
[
i
]);
}
fprintf
(
stderr
,
"
\n
"
);
if
(
info
->
max_texture_width
||
info
->
max_texture_height
)
{
fprintf
(
stderr
,
" Max Texture Size: %dx%d
\n
"
,
info
->
max_texture_width
,
info
->
max_texture_height
);
}
}
SDL_bool
CommonInit
(
CommonState
*
state
)
{
int
i
,
j
,
m
,
n
;
SDL_DisplayMode
fullscreen_mode
;
if
(
state
->
flags
&
SDL_INIT_VIDEO
)
{
if
(
state
->
verbose
&
VERBOSE_VIDEO
)
{
n
=
SDL_GetNumVideoDrivers
();
if
(
n
==
0
)
{
fprintf
(
stderr
,
"No built-in video drivers
\n
"
);
}
else
{
fprintf
(
stderr
,
"Built-in video drivers:"
);
for
(
i
=
0
;
i
<
n
;
++
i
)
{
if
(
i
>
0
)
{
fprintf
(
stderr
,
","
);
}
fprintf
(
stderr
,
" %s"
,
SDL_GetVideoDriver
(
i
));
}
fprintf
(
stderr
,
"
\n
"
);
}
}
if
(
SDL_VideoInit
(
state
->
videodriver
,
0
)
<
0
)
{
fprintf
(
stderr
,
"Couldn't initialize video driver: %s
\n
"
,
SDL_GetError
());
return
SDL_FALSE
;
}
if
(
state
->
verbose
&
VERBOSE_VIDEO
)
{
fprintf
(
stderr
,
"Video driver: %s
\n
"
,
SDL_GetCurrentVideoDriver
());
}
if
(
state
->
verbose
&
VERBOSE_MODES
)
{
SDL_DisplayMode
mode
;
int
bpp
;
Uint32
Rmask
,
Gmask
,
Bmask
,
Amask
;
n
=
SDL_GetNumVideoDisplays
();
fprintf
(
stderr
,
"Number of displays: %d
\n
"
,
n
);
for
(
i
=
0
;
i
<
n
;
++
i
)
{
fprintf
(
stderr
,
"Display %d:
\n
"
,
i
);
SDL_SelectVideoDisplay
(
i
);
SDL_GetDesktopDisplayMode
(
&
mode
);
SDL_PixelFormatEnumToMasks
(
mode
.
format
,
&
bpp
,
&
Rmask
,
&
Gmask
,
&
Bmask
,
&
Amask
);
fprintf
(
stderr
,
" Current mode: %dx%d@%dHz, %d bits-per-pixel
\n
"
,
mode
.
w
,
mode
.
h
,
mode
.
refresh_rate
,
bpp
);
if
(
Rmask
||
Gmask
||
Bmask
)
{
fprintf
(
stderr
,
" Red Mask = 0x%.8x
\n
"
,
Rmask
);
fprintf
(
stderr
,
" Green Mask = 0x%.8x
\n
"
,
Gmask
);
fprintf
(
stderr
,
" Blue Mask = 0x%.8x
\n
"
,
Bmask
);
if
(
Amask
)
fprintf
(
stderr
,
" Alpha Mask = 0x%.8x
\n
"
,
Amask
);
}
/* Print available fullscreen video modes */
m
=
SDL_GetNumDisplayModes
();
if
(
m
==
0
)
{
fprintf
(
stderr
,
"No available fullscreen video modes
\n
"
);
}
else
{
fprintf
(
stderr
,
" Fullscreen video modes:
\n
"
);
for
(
j
=
0
;
j
<
m
;
++
j
)
{
SDL_GetDisplayMode
(
j
,
&
mode
);
SDL_PixelFormatEnumToMasks
(
mode
.
format
,
&
bpp
,
&
Rmask
,
&
Gmask
,
&
Bmask
,
&
Amask
);
fprintf
(
stderr
,
" Mode %d: %dx%d@%dHz, %d bits-per-pixel
\n
"
,
j
,
mode
.
w
,
mode
.
h
,
mode
.
refresh_rate
,
bpp
);
if
(
Rmask
||
Gmask
||
Bmask
)
{
fprintf
(
stderr
,
" Red Mask = 0x%.8x
\n
"
,
Rmask
);
fprintf
(
stderr
,
" Green Mask = 0x%.8x
\n
"
,
Gmask
);
fprintf
(
stderr
,
" Blue Mask = 0x%.8x
\n
"
,
Bmask
);
if
(
Amask
)
fprintf
(
stderr
,
" Alpha Mask = 0x%.8x
\n
"
,
Amask
);
}
}
}
}
}
SDL_SelectVideoDisplay
(
state
->
display
);
if
(
state
->
verbose
&
VERBOSE_RENDER
)
{
SDL_RendererInfo
info
;
n
=
SDL_GetNumRenderDrivers
();
if
(
n
==
0
)
{
fprintf
(
stderr
,
"No built-in render drivers
\n
"
);
}
else
{
fprintf
(
stderr
,
"Built-in render drivers:
\n
"
);
for
(
i
=
0
;
i
<
n
;
++
i
)
{
SDL_GetRenderDriverInfo
(
i
,
&
info
);
PrintRenderer
(
&
info
);
}
}
}
switch
(
state
->
depth
)
{
case
8
:
fullscreen_mode
.
format
=
SDL_PIXELFORMAT_INDEX8
;
break
;
case
15
:
fullscreen_mode
.
format
=
SDL_PIXELFORMAT_BGR555
;
break
;
case
16
:
default:
fullscreen_mode
.
format
=
SDL_PIXELFORMAT_ABGR1555
;
break
;
/* NDS default:
fullscreen_mode.format = SDL_PIXELFORMAT_RGB888;
break;*/
}
fullscreen_mode
.
w
=
state
->
window_w
;
fullscreen_mode
.
h
=
state
->
window_h
;
fullscreen_mode
.
refresh_rate
=
state
->
refresh_rate
;
SDL_SetFullscreenDisplayMode
(
&
fullscreen_mode
);
state
->
windows
=
(
SDL_WindowID
*
)
SDL_malloc
(
state
->
num_windows
*
sizeof
(
*
state
->
windows
));
if
(
!
state
->
windows
)
{
fprintf
(
stderr
,
"Out of memory!
\n
"
);
return
SDL_FALSE
;
}
for
(
i
=
0
;
i
<
state
->
num_windows
;
++
i
)
{
char
title
[
1024
];
if
(
state
->
num_windows
>
1
)
{
SDL_snprintf
(
title
,
SDL_arraysize
(
title
),
"%s %d"
,
state
->
window_title
,
i
+
1
);
}
else
{
SDL_strlcpy
(
title
,
state
->
window_title
,
SDL_arraysize
(
title
));
}
state
->
windows
[
i
]
=
SDL_CreateWindow
(
title
,
state
->
window_x
,
state
->
window_y
,
state
->
window_w
,
state
->
window_h
,
state
->
window_flags
);
if
(
!
state
->
windows
[
i
])
{
fprintf
(
stderr
,
"Couldn't create window: %s
\n
"
,
SDL_GetError
());
return
SDL_FALSE
;
}
if
(
!
state
->
skip_renderer
&&
(
state
->
renderdriver
||
!
(
state
->
window_flags
&
SDL_WINDOW_OPENGL
)))
{
m
=
-
1
;
if
(
state
->
renderdriver
)
{
SDL_RendererInfo
info
;
n
=
SDL_GetNumRenderDrivers
();
for
(
j
=
0
;
j
<
n
;
++
j
)
{
SDL_GetRenderDriverInfo
(
j
,
&
info
);
if
(
SDL_strcasecmp
(
info
.
name
,
state
->
renderdriver
)
==
0
)
{
m
=
j
;
break
;
}
}
if
(
m
==
n
)
{
fprintf
(
stderr
,
"Couldn't find render driver named %s"
,
state
->
renderdriver
);
return
SDL_FALSE
;
}
}
if
(
SDL_CreateRenderer
(
state
->
windows
[
i
],
m
,
state
->
render_flags
)
<
0
)
{
fprintf
(
stderr
,
"Couldn't create renderer: %s
\n
"
,
SDL_GetError
());
return
SDL_FALSE
;
}
if
(
state
->
verbose
&
VERBOSE_RENDER
)
{
SDL_RendererInfo
info
;
fprintf
(
stderr
,
"Current renderer:
\n
"
);
SDL_GetRendererInfo
(
&
info
);
PrintRenderer
(
&
info
);
}
}
}
SDL_SelectRenderer
(
state
->
windows
[
0
]);
}
if
(
state
->
flags
&
SDL_INIT_AUDIO
)
{
if
(
state
->
verbose
&
VERBOSE_AUDIO
)
{
n
=
SDL_GetNumAudioDrivers
();
if
(
n
==
0
)
{
fprintf
(
stderr
,
"No built-in audio drivers
\n
"
);
}
else
{
fprintf
(
stderr
,
"Built-in audio drivers:"
);
for
(
i
=
0
;
i
<
n
;
++
i
)
{
if
(
i
>
0
)
{
fprintf
(
stderr
,
","
);
}
fprintf
(
stderr
,
" %s"
,
SDL_GetAudioDriver
(
i
));
}
fprintf
(
stderr
,
"
\n
"
);
}
}
if
(
SDL_AudioInit
(
state
->
audiodriver
)
<
0
)
{
fprintf
(
stderr
,
"Couldn't initialize audio driver: %s
\n
"
,
SDL_GetError
());
return
SDL_FALSE
;
}
if
(
state
->
verbose
&
VERBOSE_VIDEO
)
{
fprintf
(
stderr
,
"Audio driver: %s
\n
"
,
SDL_GetCurrentAudioDriver
());
}
if
(
SDL_OpenAudio
(
&
state
->
audiospec
,
NULL
)
<
0
)
{
fprintf
(
stderr
,
"Couldn't open audio: %s
\n
"
,
SDL_GetError
());
return
SDL_FALSE
;
}
}
return
SDL_TRUE
;
}
static
void
PrintEvent
(
SDL_Event
*
event
)
{
fprintf
(
stderr
,
"SDL EVENT: "
);
switch
(
event
->
type
)
{
case
SDL_WINDOWEVENT
:
switch
(
event
->
window
.
event
)
{
case
SDL_WINDOWEVENT_SHOWN
:
fprintf
(
stderr
,
"Window %d shown"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_HIDDEN
:
fprintf
(
stderr
,
"Window %d hidden"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_EXPOSED
:
fprintf
(
stderr
,
"Window %d exposed"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_MOVED
:
fprintf
(
stderr
,
"Window %d moved to %d,%d"
,
event
->
window
.
windowID
,
event
->
window
.
data1
,
event
->
window
.
data2
);
break
;
case
SDL_WINDOWEVENT_RESIZED
:
fprintf
(
stderr
,
"Window %d resized to %dx%d"
,
event
->
window
.
windowID
,
event
->
window
.
data1
,
event
->
window
.
data2
);
break
;
case
SDL_WINDOWEVENT_MINIMIZED
:
fprintf
(
stderr
,
"Window %d minimized"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_MAXIMIZED
:
fprintf
(
stderr
,
"Window %d maximized"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_RESTORED
:
fprintf
(
stderr
,
"Window %d restored"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_ENTER
:
fprintf
(
stderr
,
"Mouse entered window %d"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_LEAVE
:
fprintf
(
stderr
,
"Mouse left window %d"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_FOCUS_GAINED
:
fprintf
(
stderr
,
"Window %d gained keyboard focus"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_FOCUS_LOST
:
fprintf
(
stderr
,
"Window %d lost keyboard focus"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_CLOSE
:
fprintf
(
stderr
,
"Window %d closed"
,
event
->
window
.
windowID
);
break
;
default:
fprintf
(
stderr
,
"Window %d got unknown event %d"
,
event
->
window
.
windowID
,
event
->
window
.
event
);
break
;
}
break
;
case
SDL_KEYDOWN
:
fprintf
(
stderr
,
"Keyboard %d: key pressed in window %d: scancode 0x%08X = %s, keycode 0x%08X = %s"
,
event
->
key
.
which
,
event
->
key
.
windowID
,
event
->
key
.
keysym
.
scancode
,
SDL_GetScancodeName
(
event
->
key
.
keysym
.
scancode
),
event
->
key
.
keysym
.
sym
,
SDL_GetKeyName
(
event
->
key
.
keysym
.
sym
));
break
;
case
SDL_KEYUP
:
fprintf
(
stderr
,
"Keyboard %d: key released in window %d: scancode 0x%08X = %s, keycode 0x%08X = %s"
,
event
->
key
.
which
,
event
->
key
.
windowID
,
event
->
key
.
keysym
.
scancode
,
SDL_GetScancodeName
(
event
->
key
.
keysym
.
scancode
),
event
->
key
.
keysym
.
sym
,
SDL_GetKeyName
(
event
->
key
.
keysym
.
sym
));
break
;
case
SDL_TEXTINPUT
:
fprintf
(
stderr
,
"Keyboard %d: text input
\"
%s
\"
in window %d"
,
event
->
text
.
which
,
event
->
text
.
text
,
event
->
text
.
windowID
);
break
;
case
SDL_MOUSEMOTION
:
fprintf
(
stderr
,
"Mouse %d: moved to %d,%d (%d,%d) in window %d"
,
event
->
motion
.
which
,
event
->
motion
.
x
,
event
->
motion
.
y
,
event
->
motion
.
xrel
,
event
->
motion
.
yrel
,
event
->
motion
.
windowID
);
break
;
case
SDL_MOUSEBUTTONDOWN
:
fprintf
(
stderr
,
"Mouse %d: button %d pressed at %d,%d in window %d"
,
event
->
button
.
which
,
event
->
button
.
button
,
event
->
button
.
x
,
event
->
button
.
y
,
event
->
button
.
windowID
);
break
;
case
SDL_MOUSEBUTTONUP
:
fprintf
(
stderr
,
"Mouse %d: button %d released at %d,%d in window %d"
,
event
->
button
.
which
,
event
->
button
.
button
,
event
->
button
.
x
,
event
->
button
.
y
,
event
->
button
.
windowID
);
break
;
case
SDL_MOUSEWHEEL
:
fprintf
(
stderr
,
"Mouse %d: wheel scrolled %d in x and %d in y in window %d"
,
event
->
wheel
.
which
,
event
->
wheel
.
x
,
event
->
wheel
.
y
,
event
->
wheel
.
windowID
);
break
;
case
SDL_JOYBALLMOTION
:
fprintf
(
stderr
,
"Joystick %d: ball %d moved by %d,%d"
,
event
->
jball
.
which
,
event
->
jball
.
ball
,
event
->
jball
.
xrel
,
event
->
jball
.
yrel
);
break
;
case
SDL_JOYHATMOTION
:
fprintf
(
stderr
,
"Joystick %d: hat %d moved to "
,
event
->
jhat
.
which
,
event
->
jhat
.
hat
);
switch
(
event
->
jhat
.
value
)
{
case
SDL_HAT_CENTERED
:
fprintf
(
stderr
,
"CENTER"
);
break
;
case
SDL_HAT_UP
:
fprintf
(
stderr
,
"UP"
);
break
;
case
SDL_HAT_RIGHTUP
:
fprintf
(
stderr
,
"RIGHTUP"
);
break
;
case
SDL_HAT_RIGHT
:
fprintf
(
stderr
,
"RIGHT"
);
break
;
case
SDL_HAT_RIGHTDOWN
:
fprintf
(
stderr
,
"RIGHTDOWN"
);
break
;
case
SDL_HAT_DOWN
:
fprintf
(
stderr
,
"DOWN"
);
break
;
case
SDL_HAT_LEFTDOWN
:
fprintf
(
stderr
,
"LEFTDOWN"
);
break
;
case
SDL_HAT_LEFT
:
fprintf
(
stderr
,
"LEFT"
);
break
;
case
SDL_HAT_LEFTUP
:
fprintf
(
stderr
,
"LEFTUP"
);
break
;
default:
fprintf
(
stderr
,
"UNKNOWN"
);
break
;
}
break
;
case
SDL_JOYBUTTONDOWN
:
fprintf
(
stderr
,
"Joystick %d: button %d pressed"
,
event
->
jbutton
.
which
,
event
->
jbutton
.
button
);
break
;
case
SDL_JOYBUTTONUP
:
fprintf
(
stderr
,
"Joystick %d: button %d released"
,
event
->
jbutton
.
which
,
event
->
jbutton
.
button
);
break
;
case
SDL_QUIT
:
fprintf
(
stderr
,
"Quit requested"
);
break
;
case
SDL_USEREVENT
:
fprintf
(
stderr
,
"User event %d"
,
event
->
user
.
code
);
break
;
default:
fprintf
(
stderr
,
"Unknown event %d"
,
event
->
type
);
break
;
}
fprintf
(
stderr
,
"
\n
"
);
}
void
CommonEvent
(
CommonState
*
state
,
SDL_Event
*
event
,
int
*
done
)
{
if
(
state
->
verbose
&
VERBOSE_EVENT
)
{
PrintEvent
(
event
);
}
switch
(
event
->
type
)
{
case
SDL_WINDOWEVENT
:
switch
(
event
->
window
.
event
)
{
case
SDL_WINDOWEVENT_CLOSE
:
*
done
=
1
;
break
;
}
break
;
case
SDL_KEYDOWN
:
switch
(
event
->
key
.
keysym
.
sym
)
{
/* Add hotkeys here */
case
SDLK_g
:
if
(
event
->
key
.
keysym
.
mod
&
KMOD_CTRL
)
{
/* Ctrl-G toggle grab */
}
break
;
case
SDLK_ESCAPE
:
*
done
=
1
;
break
;
default:
break
;
}
break
;
case
SDL_QUIT
:
*
done
=
1
;
break
;
}
}
void
CommonQuit
(
CommonState
*
state
)
{
if
(
state
->
flags
&
SDL_INIT_VIDEO
)
{
SDL_VideoQuit
();
}
if
(
state
->
flags
&
SDL_INIT_AUDIO
)
{
SDL_AudioQuit
();
}
if
(
state
->
windows
)
{
SDL_free
(
state
->
windows
);
}
SDL_free
(
state
);
}
test/nds-test-progs/sprite/source/common.h
deleted
100755 → 0
View file @
3b72fdef
/* A simple test program framework */
#include <SDL/SDL.h>
#define VERBOSE_VIDEO 0x00000001
#define VERBOSE_MODES 0x00000002
#define VERBOSE_RENDER 0x00000004
#define VERBOSE_EVENT 0x00000008
#define VERBOSE_AUDIO 0x00000010
typedef
struct
{
/* SDL init flags */
char
**
argv
;
Uint32
flags
;
Uint32
verbose
;
/* Video info */
const
char
*
videodriver
;
int
display
;
const
char
*
window_title
;
Uint32
window_flags
;
int
window_x
;
int
window_y
;
int
window_w
;
int
window_h
;
int
depth
;
int
refresh_rate
;
int
num_windows
;
SDL_WindowID
*
windows
;
/* Renderer info */
const
char
*
renderdriver
;
Uint32
render_flags
;
SDL_bool
skip_renderer
;
/* Audio info */
const
char
*
audiodriver
;
SDL_AudioSpec
audiospec
;
}
CommonState
;
extern
CommonState
*
CommonCreateState
(
char
**
argv
,
Uint32
flags
);
extern
int
CommonArg
(
CommonState
*
state
,
int
index
);
extern
const
char
*
CommonUsage
(
CommonState
*
state
);
extern
SDL_bool
CommonInit
(
CommonState
*
state
);
extern
void
CommonEvent
(
CommonState
*
state
,
SDL_Event
*
event
,
int
*
done
);
extern
void
CommonQuit
(
CommonState
*
state
);
test/nds-test-progs/sprite/source/testsprite.c
deleted
100755 → 0
View file @
3b72fdef
/* Simple program: Move N sprites around on the screen as fast as possible */
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <fat.h>
#include <SDL/SDL.h>
#define NUM_SPRITES 10
#define MAX_SPEED 1
SDL_Surface
*
sprite
;
int
numsprites
;
SDL_Rect
*
sprite_rects
;
SDL_Rect
*
positions
;
SDL_Rect
*
velocities
;
int
sprites_visible
;
int
debug_flip
;
Uint16
sprite_w
,
sprite_h
;
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
static
void
quit
(
int
rc
)
{
SDL_Quit
();
exit
(
rc
);
}
int
LoadSprite
(
char
*
file
)
{
SDL_Surface
*
temp
;
/* Load the sprite image */
sprite
=
SDL_LoadBMP
(
file
);
if
(
sprite
==
NULL
)
{
fprintf
(
stderr
,
"Couldn't load %s: %s"
,
file
,
SDL_GetError
());
return
(
-
1
);
}
/* Set transparent pixel as the pixel at (0,0) */
if
(
sprite
->
format
->
palette
)
{
SDL_SetColorKey
(
sprite
,
(
SDL_SRCCOLORKEY
|
SDL_RLEACCEL
),
*
(
Uint8
*
)
sprite
->
pixels
);
}
/* Convert sprite to video format */
temp
=
SDL_DisplayFormat
(
sprite
);
SDL_FreeSurface
(
sprite
);
if
(
temp
==
NULL
)
{
fprintf
(
stderr
,
"Couldn't convert background: %s
\n
"
,
SDL_GetError
());
return
(
-
1
);
}
sprite
=
temp
;
/* We're ready to roll. :) */
return
(
0
);
}
void
MoveSprites
(
SDL_Surface
*
screen
,
Uint32
background
)
{
int
i
,
nupdates
;
SDL_Rect
area
,
*
position
,
*
velocity
;
nupdates
=
0
;
/* Erase all the sprites if necessary */
if
(
sprites_visible
)
{
SDL_FillRect
(
screen
,
NULL
,
background
);
}
/* Move the sprite, bounce at the wall, and draw */
for
(
i
=
0
;
i
<
numsprites
;
++
i
)
{
position
=
&
positions
[
i
];
velocity
=
&
velocities
[
i
];
position
->
x
+=
velocity
->
x
;
if
((
position
->
x
<
0
)
||
(
position
->
x
>=
(
screen
->
w
-
sprite_w
)))
{
velocity
->
x
=
-
velocity
->
x
;
position
->
x
+=
velocity
->
x
;
}
position
->
y
+=
velocity
->
y
;
if
((
position
->
y
<
0
)
||
(
position
->
y
>=
(
screen
->
h
-
sprite_w
)))
{
velocity
->
y
=
-
velocity
->
y
;
position
->
y
+=
velocity
->
y
;
}
/* Blit the sprite onto the screen */
area
=
*
position
;
SDL_BlitSurface
(
sprite
,
NULL
,
screen
,
&
area
);
sprite_rects
[
nupdates
++
]
=
area
;
}
if
(
debug_flip
)
{
if
((
screen
->
flags
&
SDL_DOUBLEBUF
)
==
SDL_DOUBLEBUF
)
{
static
int
t
=
0
;
Uint32
color
=
SDL_MapRGB
(
screen
->
format
,
255
,
0
,
0
);
SDL_Rect
r
;
r
.
x
=
t
;
/* (sin((float) t * 2 * 3.1459) + 1.0) / 2.0 * (screen->w - 20); */
r
.
y
=
0
;
r
.
w
=
20
;
r
.
h
=
screen
->
h
;
SDL_FillRect
(
screen
,
&
r
,
color
);
t
+=
2
;
}
}
/* Update the screen! */
if
((
screen
->
flags
&
SDL_DOUBLEBUF
)
==
SDL_DOUBLEBUF
)
{
SDL_Flip
(
screen
);
}
else
{
SDL_UpdateRects
(
screen
,
nupdates
,
sprite_rects
);
}
sprites_visible
=
1
;
}
/* This is a way of telling whether or not to use hardware surfaces */
Uint32
FastestFlags
(
Uint32
flags
,
int
width
,
int
height
,
int
bpp
)
{
const
SDL_VideoInfo
*
info
;
/* Hardware acceleration is only used in fullscreen mode */
flags
|=
SDL_FULLSCREEN
;
/* Check for various video capabilities */
info
=
SDL_GetVideoInfo
();
if
(
info
->
blit_hw_CC
&&
info
->
blit_fill
)
{
/* We use accelerated colorkeying and color filling */
flags
|=
SDL_HWSURFACE
;
}
/* If we have enough video memory, and will use accelerated
blits directly to it, then use page flipping.
*/
if
((
flags
&
SDL_HWSURFACE
)
==
SDL_HWSURFACE
)
{
/* Direct hardware blitting without double-buffering
causes really bad flickering.
*/
if
(
info
->
video_mem
*
1024
>
(
height
*
width
*
bpp
/
8
))
{
flags
|=
SDL_DOUBLEBUF
;
}
else
{
flags
&=
~
SDL_HWSURFACE
;
}
}
/* Return the flags */
return
(
flags
);
}
int
main
(
int
argc
,
char
*
argv
[])
{
SDL_Surface
*
screen
;
Uint8
*
mem
;
int
width
,
height
;
Uint8
video_bpp
;
Uint32
videoflags
;
Uint32
background
;
int
i
,
done
;
SDL_Event
event
;
Uint32
then
,
now
,
frames
;
consoleDemoInit
();
puts
(
"Hello world! Initializing FAT..."
);
fatInitDefault
();
/* Initialize SDL */
if
(
SDL_Init
(
SDL_INIT_VIDEO
)
<
0
)
{
fprintf
(
stderr
,
"Couldn't initialize SDL: %s
\n
"
,
SDL_GetError
());
return
(
1
);
}
puts
(
"* initialized SDL"
);
numsprites
=
NUM_SPRITES
;
videoflags
=
SDL_SWSURFACE
/*| SDL_ANYFORMAT */
;
width
=
256
;
height
=
192
;
video_bpp
=
15
;
debug_flip
=
0
;
while
(
argc
>
1
)
{
--
argc
;
if
(
strcmp
(
argv
[
argc
-
1
],
"-width"
)
==
0
)
{
width
=
atoi
(
argv
[
argc
]);
--
argc
;
}
else
if
(
strcmp
(
argv
[
argc
-
1
],
"-height"
)
==
0
)
{
height
=
atoi
(
argv
[
argc
]);
--
argc
;
}
else
if
(
strcmp
(
argv
[
argc
-
1
],
"-bpp"
)
==
0
)
{
video_bpp
=
atoi
(
argv
[
argc
]);
videoflags
&=
~
SDL_ANYFORMAT
;
--
argc
;
}
else
if
(
strcmp
(
argv
[
argc
],
"-fast"
)
==
0
)
{
videoflags
=
FastestFlags
(
videoflags
,
width
,
height
,
video_bpp
);
}
else
if
(
strcmp
(
argv
[
argc
],
"-hw"
)
==
0
)
{
videoflags
^=
SDL_HWSURFACE
;
}
else
if
(
strcmp
(
argv
[
argc
],
"-flip"
)
==
0
)
{
videoflags
^=
SDL_DOUBLEBUF
;
}
else
if
(
strcmp
(
argv
[
argc
],
"-debugflip"
)
==
0
)
{
debug_flip
^=
1
;
}
else
if
(
strcmp
(
argv
[
argc
],
"-fullscreen"
)
==
0
)
{
videoflags
^=
SDL_FULLSCREEN
;
}
else
if
(
isdigit
(
argv
[
argc
][
0
]))
{
numsprites
=
atoi
(
argv
[
argc
]);
}
else
{
fprintf
(
stderr
,
"Usage: %s [-bpp N] [-hw] [-flip] [-fast] [-fullscreen] [numsprites]
\n
"
,
argv
[
0
]);
quit
(
1
);
}
}
/* Set video mode */
screen
=
SDL_SetVideoMode
(
width
,
height
,
video_bpp
,
videoflags
);
if
(
!
screen
)
{
fprintf
(
stderr
,
"Couldn't set %dx%d video mode: %s
\n
"
,
width
,
height
,
SDL_GetError
());
quit
(
2
);
}
screen
->
flags
&=
~
SDL_PREALLOC
;
puts
(
"* set video mode"
);
/* Load the sprite */
if
(
LoadSprite
(
"icon.bmp"
)
<
0
)
{
quit
(
1
);
}
puts
(
"* loaded sprite"
);
/* Allocate memory for the sprite info */
mem
=
(
Uint8
*
)
malloc
(
4
*
sizeof
(
SDL_Rect
)
*
numsprites
);
if
(
mem
==
NULL
)
{
SDL_FreeSurface
(
sprite
);
fprintf
(
stderr
,
"Out of memory!
\n
"
);
quit
(
2
);
}
sprite_rects
=
(
SDL_Rect
*
)
mem
;
positions
=
sprite_rects
;
sprite_rects
+=
numsprites
;
velocities
=
sprite_rects
;
sprite_rects
+=
numsprites
;
sprite_w
=
sprite
->
w
;
sprite_h
=
sprite
->
h
;
srand
(
time
(
NULL
));
for
(
i
=
0
;
i
<
numsprites
;
++
i
)
{
positions
[
i
].
x
=
rand
()
%
(
screen
->
w
-
sprite_w
);
positions
[
i
].
y
=
rand
()
%
(
screen
->
h
-
sprite_h
);
positions
[
i
].
w
=
sprite
->
w
;
positions
[
i
].
h
=
sprite
->
h
;
velocities
[
i
].
x
=
0
;
velocities
[
i
].
y
=
0
;
while
(
!
velocities
[
i
].
x
&&
!
velocities
[
i
].
y
)
{
velocities
[
i
].
x
=
(
rand
()
%
(
MAX_SPEED
*
2
+
1
))
-
MAX_SPEED
;
velocities
[
i
].
y
=
(
rand
()
%
(
MAX_SPEED
*
2
+
1
))
-
MAX_SPEED
;
}
}
background
=
SDL_MapRGB
(
screen
->
format
,
0x00
,
0x00
,
0x00
);
/* Print out information about our surfaces */
printf
(
"Screen is at %d bits per pixel
\n
"
,
screen
->
format
->
BitsPerPixel
);
if
((
screen
->
flags
&
SDL_HWSURFACE
)
==
SDL_HWSURFACE
)
{
printf
(
"Screen is in video memory
\n
"
);
}
else
{
printf
(
"Screen is in system memory
\n
"
);
}
if
((
screen
->
flags
&
SDL_DOUBLEBUF
)
==
SDL_DOUBLEBUF
)
{
printf
(
"Screen has double-buffering enabled
\n
"
);
}
if
((
sprite
->
flags
&
SDL_HWSURFACE
)
==
SDL_HWSURFACE
)
{
printf
(
"Sprite is in video memory
\n
"
);
}
else
{
printf
(
"Sprite is in system memory
\n
"
);
}
/* Run a sample blit to trigger blit acceleration */
{
SDL_Rect
dst
;
dst
.
x
=
0
;
dst
.
y
=
0
;
dst
.
w
=
sprite
->
w
;
dst
.
h
=
sprite
->
h
;
SDL_BlitSurface
(
sprite
,
NULL
,
screen
,
&
dst
);
SDL_FillRect
(
screen
,
&
dst
,
background
);
}
if
((
sprite
->
flags
&
SDL_HWACCEL
)
==
SDL_HWACCEL
)
{
printf
(
"Sprite blit uses hardware acceleration
\n
"
);
}
if
((
sprite
->
flags
&
SDL_RLEACCEL
)
==
SDL_RLEACCEL
)
{
printf
(
"Sprite blit uses RLE acceleration
\n
"
);
}
/* Loop, blitting sprites and waiting for a keystroke */
frames
=
0
;
then
=
SDL_GetTicks
();
done
=
0
;
sprites_visible
=
0
;
puts
(
"hello!"
);
while
(
!
done
)
{
/* Check for events */
++
frames
;
printf
(
"."
);
swiWaitForVBlank
();
MoveSprites
(
screen
,
background
);
}
puts
(
"goodbye!"
);
SDL_FreeSurface
(
sprite
);
free
(
mem
);
/* Print out some timing information */
now
=
SDL_GetTicks
();
if
(
now
>
then
)
{
printf
(
"%2.2f frames per second
\n
"
,
((
double
)
frames
*
1000
)
/
(
now
-
then
));
}
SDL_Quit
();
return
(
0
);
}
test/nds-test-progs/sprite2/Makefile
deleted
100755 → 0
View file @
3b72fdef
#---------------------------------------------------------------------------------
.SUFFIXES
:
#---------------------------------------------------------------------------------
ifeq
($(strip
$(DEVKITARM)),)
$(error
"Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM"
)
endif
include
$(DEVKITARM)/ds_rules
#---------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# INCLUDES is a list of directories containing extra header files
#---------------------------------------------------------------------------------
TARGET
:=
$(
shell
basename
$(CURDIR))
BUILD
:=
build
SOURCES
:=
source
DATA
:=
data
INCLUDES
:=
include
#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
ARCH
:=
-mthumb
-mthumb-interwork
# note: arm9tdmi isn't the correct CPU arch, but anything newer and LD
# *insists* it has a FPU or VFP, and it won't take no for an answer!
CFLAGS
:=
-save-temps
-g
-Wall
-O0
\
-mcpu
=
arm9tdmi
-mtune
=
arm9tdmi
\
$(ARCH)
CFLAGS
+=
$(INCLUDE)
-DARM9
-D__NDS__
CXXFLAGS
:=
$(CFLAGS)
-fno-rtti
-fno-exceptions
-fno-exceptions
-fno-rtti
ASFLAGS
:=
-g
$(ARCH)
LDFLAGS
=
-specs
=
ds_arm9.specs
-g
$(ARCH)
-mno-fpu
-Wl
,-Map,
$
(
notdir
$*
.map
)
#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project
#---------------------------------------------------------------------------------
LIBS
:=
-lSDL
-lfat
-lnds9
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS
:=
$(LIBNDS)
#---------------------------------------------------------------------------------
# no real need to edit anything past this point unless you need to add additional
# rules for different file extensions
#---------------------------------------------------------------------------------
ifneq
($(BUILD),$(notdir
$(CURDIR)))
#---------------------------------------------------------------------------------
export
OUTPUT
:=
$(CURDIR)
/
$(TARGET)
export
VPATH
:=
$
(
foreach
dir
,
$(SOURCES)
,
$(CURDIR)
/
$(dir)
)
\
$
(
foreach
dir
,
$(DATA)
,
$(CURDIR)
/
$(dir)
)
export
DEPSDIR
:=
$(CURDIR)
/
$(BUILD)
CFILES
:=
$
(
foreach
dir
,
$(SOURCES)
,
$
(
notdir
$
(
wildcard
$(dir)
/
*
.c
)))
CPPFILES
:=
$
(
foreach
dir
,
$(SOURCES)
,
$
(
notdir
$
(
wildcard
$(dir)
/
*
.cpp
)))
SFILES
:=
$
(
foreach
dir
,
$(SOURCES)
,
$
(
notdir
$
(
wildcard
$(dir)
/
*
.s
)))
BINFILES
:=
$
(
foreach
dir
,
$(DATA)
,
$
(
notdir
$
(
wildcard
$(dir)
/
*
.
*
)))
#---------------------------------------------------------------------------------
# use CXX for linking C++ projects, CC for standard C
#---------------------------------------------------------------------------------
ifeq
($(strip
$(CPPFILES)),)
#---------------------------------------------------------------------------------
export
LD
:=
$(CC)
#---------------------------------------------------------------------------------
else
#---------------------------------------------------------------------------------
export
LD
:=
$(CXX)
#---------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------
export
OFILES
:=
$
(
addsuffix .o,
$(BINFILES)
)
\
$
(
CPPFILES:.cpp
=
.o
)
$
(
CFILES:.c
=
.o
)
$
(
SFILES:.s
=
.o
)
export
INCLUDE
:=
$
(
foreach
dir
,
$(INCLUDES)
,-I
$(CURDIR)
/
$(dir)
)
\
$
(
foreach
dir
,
$(LIBDIRS)
,-I
$(dir)
/include
)
\
$
(
foreach
dir
,
$(LIBDIRS)
,-I
$(dir)
/include
)
\
-I
$(CURDIR)
/
$(BUILD)
export
LIBPATHS
:=
$
(
foreach
dir
,
$(LIBDIRS)
,-L
$(dir)
/lib
)
.PHONY
:
$(BUILD) clean
#---------------------------------------------------------------------------------
$(BUILD)
:
@
[
-d
$@
]
||
mkdir
-p
$@
@
make
--no-print-directory
-C
$(BUILD)
-f
$(CURDIR)
/Makefile
#---------------------------------------------------------------------------------
clean
:
@
echo
clean ...
@
rm
-fr
$(BUILD)
$(TARGET)
.elf
$(TARGET)
.nds
$(TARGET)
.arm9
$(TARGET)
.ds.gba
#---------------------------------------------------------------------------------
else
DEPENDS
:=
$
(
OFILES:.o
=
.d
)
#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
$(OUTPUT).ds.gba
:
$(OUTPUT).nds
$(OUTPUT).nds
:
$(OUTPUT).arm9
$(OUTPUT).arm9
:
$(OUTPUT).elf
$(OUTPUT).elf
:
$(OFILES)
#---------------------------------------------------------------------------------
%.bin.o
:
%.bin
#---------------------------------------------------------------------------------
@echo
$(notdir
$<)
@$(bin2o)
-include
$(DEPENDS)
#---------------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------------
test/nds-test-progs/sprite2/icon.bmp
deleted
100644 → 0
View file @
3b72fdef
578 Bytes
test/nds-test-progs/sprite2/source/common.c
deleted
100755 → 0
View file @
3b72fdef
/* A simple test program framework */
#include <stdio.h>
#include "common.h"
#define VIDEO_USAGE \
"[--video driver] [--renderer driver] [--info all|video|modes|render|event] [--display %d] [--fullscreen | --windows N] [--title title] [--center | --position X,Y] [--geometry WxH] [--depth N] [--refresh R] [--vsync] [--noframe] [--resize] [--minimize] [--maximize] [--grab]"
#define AUDIO_USAGE \
"[--rate N] [--format U8|S8|U16|U16LE|U16BE|S16|S16LE|S16BE] [--channels N] [--samples N]"
CommonState
*
CommonCreateState
(
char
**
argv
,
Uint32
flags
)
{
CommonState
*
state
=
SDL_calloc
(
1
,
sizeof
(
*
state
));
if
(
!
state
)
{
SDL_OutOfMemory
();
return
NULL
;
}
/* Initialize some defaults */
state
->
argv
=
argv
;
state
->
flags
=
flags
;
state
->
window_title
=
argv
[
0
];
state
->
window_flags
=
SDL_WINDOW_SHOWN
;
state
->
window_x
=
SDL_WINDOWPOS_UNDEFINED
;
state
->
window_y
=
SDL_WINDOWPOS_UNDEFINED
;
state
->
window_w
=
256
;
state
->
window_h
=
192
;
state
->
num_windows
=
1
;
state
->
audiospec
.
freq
=
22050
;
state
->
audiospec
.
format
=
AUDIO_S16
;
state
->
audiospec
.
channels
=
2
;
state
->
audiospec
.
samples
=
2048
;
return
state
;
}
int
CommonArg
(
CommonState
*
state
,
int
index
)
{
char
**
argv
=
state
->
argv
;
if
(
SDL_strcasecmp
(
argv
[
index
],
"--video"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
videodriver
=
argv
[
index
];
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--renderer"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
renderdriver
=
argv
[
index
];
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--info"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"all"
)
==
0
)
{
state
->
verbose
|=
(
VERBOSE_VIDEO
|
VERBOSE_MODES
|
VERBOSE_RENDER
|
VERBOSE_EVENT
);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"video"
)
==
0
)
{
state
->
verbose
|=
VERBOSE_VIDEO
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"modes"
)
==
0
)
{
state
->
verbose
|=
VERBOSE_MODES
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"render"
)
==
0
)
{
state
->
verbose
|=
VERBOSE_RENDER
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"event"
)
==
0
)
{
state
->
verbose
|=
VERBOSE_EVENT
;
return
2
;
}
return
-
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--display"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
display
=
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--fullscreen"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_FULLSCREEN
;
state
->
num_windows
=
1
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--windows"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
]
||
!
SDL_isdigit
(
*
argv
[
index
]))
{
return
-
1
;
}
if
(
!
(
state
->
window_flags
&
SDL_WINDOW_FULLSCREEN
))
{
state
->
num_windows
=
SDL_atoi
(
argv
[
index
]);
}
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--title"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
window_title
=
argv
[
index
];
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--center"
)
==
0
)
{
state
->
window_x
=
SDL_WINDOWPOS_CENTERED
;
state
->
window_y
=
SDL_WINDOWPOS_CENTERED
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--position"
)
==
0
)
{
char
*
x
,
*
y
;
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
x
=
argv
[
index
];
y
=
argv
[
index
];
while
(
*
y
&&
*
y
!=
','
)
{
++
y
;
}
if
(
!*
y
)
{
return
-
1
;
}
*
y
++
=
'\0'
;
state
->
window_x
=
SDL_atoi
(
x
);
state
->
window_y
=
SDL_atoi
(
y
);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--geometry"
)
==
0
)
{
char
*
w
,
*
h
;
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
w
=
argv
[
index
];
h
=
argv
[
index
];
while
(
*
h
&&
*
h
!=
'x'
)
{
++
h
;
}
if
(
!*
h
)
{
return
-
1
;
}
*
h
++
=
'\0'
;
state
->
window_w
=
SDL_atoi
(
w
);
state
->
window_h
=
SDL_atoi
(
h
);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--depth"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
depth
=
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--refresh"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
refresh_rate
=
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--vsync"
)
==
0
)
{
state
->
render_flags
|=
SDL_RENDERER_PRESENTVSYNC
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--noframe"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_BORDERLESS
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--resize"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_RESIZABLE
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--minimize"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_MINIMIZED
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--maximize"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_MAXIMIZED
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--grab"
)
==
0
)
{
state
->
window_flags
|=
SDL_WINDOW_INPUT_GRABBED
;
return
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--rate"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
audiospec
.
freq
=
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--format"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"U8"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_U8
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"S8"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_S8
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"U16"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_U16
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"U16LE"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_U16LSB
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"U16BE"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_U16MSB
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"S16"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_S16
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"S16LE"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_S16LSB
;
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"S16BE"
)
==
0
)
{
state
->
audiospec
.
format
=
AUDIO_S16MSB
;
return
2
;
}
return
-
1
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--channels"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
audiospec
.
channels
=
(
Uint8
)
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
(
SDL_strcasecmp
(
argv
[
index
],
"--samples"
)
==
0
)
{
++
index
;
if
(
!
argv
[
index
])
{
return
-
1
;
}
state
->
audiospec
.
samples
=
(
Uint16
)
SDL_atoi
(
argv
[
index
]);
return
2
;
}
if
((
SDL_strcasecmp
(
argv
[
index
],
"-h"
)
==
0
)
||
(
SDL_strcasecmp
(
argv
[
index
],
"--help"
)
==
0
))
{
/* Print the usage message */
return
-
1
;
}
return
0
;
}
const
char
*
CommonUsage
(
CommonState
*
state
)
{
switch
(
state
->
flags
&
(
SDL_INIT_VIDEO
|
SDL_INIT_AUDIO
))
{
case
SDL_INIT_VIDEO
:
return
VIDEO_USAGE
;
case
SDL_INIT_AUDIO
:
return
AUDIO_USAGE
;
case
(
SDL_INIT_VIDEO
|
SDL_INIT_AUDIO
):
return
VIDEO_USAGE
" "
AUDIO_USAGE
;
default:
return
""
;
}
}
static
void
PrintRendererFlag
(
Uint32
flag
)
{
switch
(
flag
)
{
case
SDL_RENDERER_SINGLEBUFFER
:
fprintf
(
stderr
,
"SingleBuffer"
);
break
;
case
SDL_RENDERER_PRESENTCOPY
:
fprintf
(
stderr
,
"PresentCopy"
);
break
;
case
SDL_RENDERER_PRESENTFLIP2
:
fprintf
(
stderr
,
"PresentFlip2"
);
break
;
case
SDL_RENDERER_PRESENTFLIP3
:
fprintf
(
stderr
,
"PresentFlip3"
);
break
;
case
SDL_RENDERER_PRESENTDISCARD
:
fprintf
(
stderr
,
"PresentDiscard"
);
break
;
case
SDL_RENDERER_PRESENTVSYNC
:
fprintf
(
stderr
,
"PresentVSync"
);
break
;
case
SDL_RENDERER_ACCELERATED
:
fprintf
(
stderr
,
"Accelerated"
);
break
;
default:
fprintf
(
stderr
,
"0x%8.8x"
,
flag
);
break
;
}
}
static
void
PrintBlendMode
(
Uint32
flag
)
{
switch
(
flag
)
{
case
SDL_BLENDMODE_NONE
:
fprintf
(
stderr
,
"None"
);
break
;
case
SDL_BLENDMODE_MASK
:
fprintf
(
stderr
,
"Mask"
);
break
;
case
SDL_BLENDMODE_BLEND
:
fprintf
(
stderr
,
"Blend"
);
break
;
case
SDL_BLENDMODE_ADD
:
fprintf
(
stderr
,
"Add"
);
break
;
case
SDL_BLENDMODE_MOD
:
fprintf
(
stderr
,
"Mod"
);
break
;
default:
fprintf
(
stderr
,
"0x%8.8x"
,
flag
);
break
;
}
}
static
void
PrintScaleMode
(
Uint32
flag
)
{
switch
(
flag
)
{
case
SDL_TEXTURESCALEMODE_NONE
:
fprintf
(
stderr
,
"None"
);
break
;
case
SDL_TEXTURESCALEMODE_FAST
:
fprintf
(
stderr
,
"Fast"
);
break
;
case
SDL_TEXTURESCALEMODE_SLOW
:
fprintf
(
stderr
,
"Slow"
);
break
;
case
SDL_TEXTURESCALEMODE_BEST
:
fprintf
(
stderr
,
"Best"
);
break
;
default:
fprintf
(
stderr
,
"0x%8.8x"
,
flag
);
break
;
}
}
static
void
PrintPixelFormat
(
Uint32
format
)
{
switch
(
format
)
{
case
SDL_PIXELFORMAT_UNKNOWN
:
fprintf
(
stderr
,
"Unknwon"
);
break
;
case
SDL_PIXELFORMAT_INDEX1LSB
:
fprintf
(
stderr
,
"Index1LSB"
);
break
;
case
SDL_PIXELFORMAT_INDEX1MSB
:
fprintf
(
stderr
,
"Index1MSB"
);
break
;
case
SDL_PIXELFORMAT_INDEX4LSB
:
fprintf
(
stderr
,
"Index4LSB"
);
break
;
case
SDL_PIXELFORMAT_INDEX4MSB
:
fprintf
(
stderr
,
"Index4MSB"
);
break
;
case
SDL_PIXELFORMAT_INDEX8
:
fprintf
(
stderr
,
"Index8"
);
break
;
case
SDL_PIXELFORMAT_RGB332
:
fprintf
(
stderr
,
"RGB332"
);
break
;
case
SDL_PIXELFORMAT_RGB444
:
fprintf
(
stderr
,
"RGB444"
);
break
;
case
SDL_PIXELFORMAT_RGB555
:
fprintf
(
stderr
,
"RGB555"
);
break
;
case
SDL_PIXELFORMAT_ARGB4444
:
fprintf
(
stderr
,
"ARGB4444"
);
break
;
case
SDL_PIXELFORMAT_ARGB1555
:
fprintf
(
stderr
,
"ARGB1555"
);
break
;
case
SDL_PIXELFORMAT_RGB565
:
fprintf
(
stderr
,
"RGB565"
);
break
;
case
SDL_PIXELFORMAT_RGB24
:
fprintf
(
stderr
,
"RGB24"
);
break
;
case
SDL_PIXELFORMAT_BGR24
:
fprintf
(
stderr
,
"BGR24"
);
break
;
case
SDL_PIXELFORMAT_RGB888
:
fprintf
(
stderr
,
"RGB888"
);
break
;
case
SDL_PIXELFORMAT_BGR888
:
fprintf
(
stderr
,
"BGR888"
);
break
;
case
SDL_PIXELFORMAT_ARGB8888
:
fprintf
(
stderr
,
"ARGB8888"
);
break
;
case
SDL_PIXELFORMAT_RGBA8888
:
fprintf
(
stderr
,
"RGBA8888"
);
break
;
case
SDL_PIXELFORMAT_ABGR8888
:
fprintf
(
stderr
,
"ABGR8888"
);
break
;
case
SDL_PIXELFORMAT_BGRA8888
:
fprintf
(
stderr
,
"BGRA8888"
);
break
;
case
SDL_PIXELFORMAT_ARGB2101010
:
fprintf
(
stderr
,
"ARGB2101010"
);
break
;
case
SDL_PIXELFORMAT_YV12
:
fprintf
(
stderr
,
"YV12"
);
break
;
case
SDL_PIXELFORMAT_IYUV
:
fprintf
(
stderr
,
"IYUV"
);
break
;
case
SDL_PIXELFORMAT_YUY2
:
fprintf
(
stderr
,
"YUY2"
);
break
;
case
SDL_PIXELFORMAT_UYVY
:
fprintf
(
stderr
,
"UYVY"
);
break
;
case
SDL_PIXELFORMAT_YVYU
:
fprintf
(
stderr
,
"YVYU"
);
break
;
case
SDL_PIXELFORMAT_ABGR1555
:
fprintf
(
stderr
,
"ABGR1555"
);
break
;
case
SDL_PIXELFORMAT_BGR555
:
fprintf
(
stderr
,
"BGR555"
);
break
;
default:
fprintf
(
stderr
,
"0x%8.8x"
,
format
);
break
;
}
}
static
void
PrintRenderer
(
SDL_RendererInfo
*
info
)
{
int
i
,
count
;
fprintf
(
stderr
,
" Renderer %s:
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Flags: 0x%8.8X"
,
info
->
flags
);
fprintf
(
stderr
,
" ("
);
count
=
0
;
for
(
i
=
0
;
i
<
sizeof
(
info
->
flags
)
*
8
;
++
i
)
{
Uint32
flag
=
(
1
<<
i
);
if
(
info
->
flags
&
flag
)
{
if
(
count
>
0
)
{
fprintf
(
stderr
,
" | "
);
}
PrintRendererFlag
(
flag
);
++
count
;
}
}
fprintf
(
stderr
,
")
\n
"
);
fprintf
(
stderr
,
" Blend: 0x%8.8X"
,
info
->
blend_modes
);
fprintf
(
stderr
,
" ("
);
count
=
0
;
for
(
i
=
0
;
i
<
sizeof
(
info
->
blend_modes
)
*
8
;
++
i
)
{
Uint32
flag
=
(
1
<<
i
);
if
(
info
->
blend_modes
&
flag
)
{
if
(
count
>
0
)
{
fprintf
(
stderr
,
" | "
);
}
PrintBlendMode
(
flag
);
++
count
;
}
}
fprintf
(
stderr
,
")
\n
"
);
fprintf
(
stderr
,
" Scale: 0x%8.8X"
,
info
->
scale_modes
);
fprintf
(
stderr
,
" ("
);
count
=
0
;
for
(
i
=
0
;
i
<
sizeof
(
info
->
scale_modes
)
*
8
;
++
i
)
{
Uint32
flag
=
(
1
<<
i
);
if
(
info
->
scale_modes
&
flag
)
{
if
(
count
>
0
)
{
fprintf
(
stderr
,
" | "
);
}
PrintScaleMode
(
flag
);
++
count
;
}
}
fprintf
(
stderr
,
")
\n
"
);
fprintf
(
stderr
,
" Texture formats (%d): "
,
info
->
num_texture_formats
);
for
(
i
=
0
;
i
<
(
int
)
info
->
num_texture_formats
;
++
i
)
{
if
(
i
>
0
)
{
fprintf
(
stderr
,
", "
);
}
PrintPixelFormat
(
info
->
texture_formats
[
i
]);
}
fprintf
(
stderr
,
"
\n
"
);
if
(
info
->
max_texture_width
||
info
->
max_texture_height
)
{
fprintf
(
stderr
,
" Max Texture Size: %dx%d
\n
"
,
info
->
max_texture_width
,
info
->
max_texture_height
);
}
}
SDL_bool
CommonInit
(
CommonState
*
state
)
{
int
i
,
j
,
m
,
n
;
SDL_DisplayMode
fullscreen_mode
;
if
(
state
->
flags
&
SDL_INIT_VIDEO
)
{
if
(
state
->
verbose
&
VERBOSE_VIDEO
)
{
n
=
SDL_GetNumVideoDrivers
();
if
(
n
==
0
)
{
fprintf
(
stderr
,
"No built-in video drivers
\n
"
);
}
else
{
fprintf
(
stderr
,
"Built-in video drivers:"
);
for
(
i
=
0
;
i
<
n
;
++
i
)
{
if
(
i
>
0
)
{
fprintf
(
stderr
,
","
);
}
fprintf
(
stderr
,
" %s"
,
SDL_GetVideoDriver
(
i
));
}
fprintf
(
stderr
,
"
\n
"
);
}
}
if
(
SDL_VideoInit
(
state
->
videodriver
,
0
)
<
0
)
{
fprintf
(
stderr
,
"Couldn't initialize video driver: %s
\n
"
,
SDL_GetError
());
return
SDL_FALSE
;
}
if
(
state
->
verbose
&
VERBOSE_VIDEO
)
{
fprintf
(
stderr
,
"Video driver: %s
\n
"
,
SDL_GetCurrentVideoDriver
());
}
if
(
state
->
verbose
&
VERBOSE_MODES
)
{
SDL_DisplayMode
mode
;
int
bpp
;
Uint32
Rmask
,
Gmask
,
Bmask
,
Amask
;
n
=
SDL_GetNumVideoDisplays
();
fprintf
(
stderr
,
"Number of displays: %d
\n
"
,
n
);
for
(
i
=
0
;
i
<
n
;
++
i
)
{
fprintf
(
stderr
,
"Display %d:
\n
"
,
i
);
SDL_SelectVideoDisplay
(
i
);
SDL_GetDesktopDisplayMode
(
&
mode
);
SDL_PixelFormatEnumToMasks
(
mode
.
format
,
&
bpp
,
&
Rmask
,
&
Gmask
,
&
Bmask
,
&
Amask
);
fprintf
(
stderr
,
" Current mode: %dx%d@%dHz, %d bits-per-pixel
\n
"
,
mode
.
w
,
mode
.
h
,
mode
.
refresh_rate
,
bpp
);
if
(
Rmask
||
Gmask
||
Bmask
)
{
fprintf
(
stderr
,
" Red Mask = 0x%.8x
\n
"
,
Rmask
);
fprintf
(
stderr
,
" Green Mask = 0x%.8x
\n
"
,
Gmask
);
fprintf
(
stderr
,
" Blue Mask = 0x%.8x
\n
"
,
Bmask
);
if
(
Amask
)
fprintf
(
stderr
,
" Alpha Mask = 0x%.8x
\n
"
,
Amask
);
}
/* Print available fullscreen video modes */
m
=
SDL_GetNumDisplayModes
();
if
(
m
==
0
)
{
fprintf
(
stderr
,
"No available fullscreen video modes
\n
"
);
}
else
{
fprintf
(
stderr
,
" Fullscreen video modes:
\n
"
);
for
(
j
=
0
;
j
<
m
;
++
j
)
{
SDL_GetDisplayMode
(
j
,
&
mode
);
SDL_PixelFormatEnumToMasks
(
mode
.
format
,
&
bpp
,
&
Rmask
,
&
Gmask
,
&
Bmask
,
&
Amask
);
fprintf
(
stderr
,
" Mode %d: %dx%d@%dHz, %d bits-per-pixel
\n
"
,
j
,
mode
.
w
,
mode
.
h
,
mode
.
refresh_rate
,
bpp
);
if
(
Rmask
||
Gmask
||
Bmask
)
{
fprintf
(
stderr
,
" Red Mask = 0x%.8x
\n
"
,
Rmask
);
fprintf
(
stderr
,
" Green Mask = 0x%.8x
\n
"
,
Gmask
);
fprintf
(
stderr
,
" Blue Mask = 0x%.8x
\n
"
,
Bmask
);
if
(
Amask
)
fprintf
(
stderr
,
" Alpha Mask = 0x%.8x
\n
"
,
Amask
);
}
}
}
}
}
SDL_SelectVideoDisplay
(
state
->
display
);
if
(
state
->
verbose
&
VERBOSE_RENDER
)
{
SDL_RendererInfo
info
;
n
=
SDL_GetNumRenderDrivers
();
if
(
n
==
0
)
{
fprintf
(
stderr
,
"No built-in render drivers
\n
"
);
}
else
{
fprintf
(
stderr
,
"Built-in render drivers:
\n
"
);
for
(
i
=
0
;
i
<
n
;
++
i
)
{
SDL_GetRenderDriverInfo
(
i
,
&
info
);
PrintRenderer
(
&
info
);
}
}
}
switch
(
state
->
depth
)
{
case
8
:
fullscreen_mode
.
format
=
SDL_PIXELFORMAT_INDEX8
;
break
;
case
15
:
fullscreen_mode
.
format
=
SDL_PIXELFORMAT_BGR555
;
break
;
case
16
:
default:
fullscreen_mode
.
format
=
SDL_PIXELFORMAT_ABGR1555
;
break
;
/* NDS default:
fullscreen_mode.format = SDL_PIXELFORMAT_RGB888;
break;*/
}
fullscreen_mode
.
w
=
state
->
window_w
;
fullscreen_mode
.
h
=
state
->
window_h
;
fullscreen_mode
.
refresh_rate
=
state
->
refresh_rate
;
SDL_SetFullscreenDisplayMode
(
&
fullscreen_mode
);
state
->
windows
=
(
SDL_WindowID
*
)
SDL_malloc
(
state
->
num_windows
*
sizeof
(
*
state
->
windows
));
if
(
!
state
->
windows
)
{
fprintf
(
stderr
,
"Out of memory!
\n
"
);
return
SDL_FALSE
;
}
for
(
i
=
0
;
i
<
state
->
num_windows
;
++
i
)
{
char
title
[
1024
];
if
(
state
->
num_windows
>
1
)
{
SDL_snprintf
(
title
,
SDL_arraysize
(
title
),
"%s %d"
,
state
->
window_title
,
i
+
1
);
}
else
{
SDL_strlcpy
(
title
,
state
->
window_title
,
SDL_arraysize
(
title
));
}
state
->
windows
[
i
]
=
SDL_CreateWindow
(
title
,
state
->
window_x
,
state
->
window_y
,
state
->
window_w
,
state
->
window_h
,
state
->
window_flags
);
if
(
!
state
->
windows
[
i
])
{
fprintf
(
stderr
,
"Couldn't create window: %s
\n
"
,
SDL_GetError
());
return
SDL_FALSE
;
}
if
(
!
state
->
skip_renderer
&&
(
state
->
renderdriver
||
!
(
state
->
window_flags
&
SDL_WINDOW_OPENGL
)))
{
m
=
-
1
;
if
(
state
->
renderdriver
)
{
SDL_RendererInfo
info
;
n
=
SDL_GetNumRenderDrivers
();
for
(
j
=
0
;
j
<
n
;
++
j
)
{
SDL_GetRenderDriverInfo
(
j
,
&
info
);
if
(
SDL_strcasecmp
(
info
.
name
,
state
->
renderdriver
)
==
0
)
{
m
=
j
;
break
;
}
}
if
(
m
==
n
)
{
fprintf
(
stderr
,
"Couldn't find render driver named %s"
,
state
->
renderdriver
);
return
SDL_FALSE
;
}
}
if
(
SDL_CreateRenderer
(
state
->
windows
[
i
],
m
,
state
->
render_flags
)
<
0
)
{
fprintf
(
stderr
,
"Couldn't create renderer: %s
\n
"
,
SDL_GetError
());
return
SDL_FALSE
;
}
if
(
state
->
verbose
&
VERBOSE_RENDER
)
{
SDL_RendererInfo
info
;
fprintf
(
stderr
,
"Current renderer:
\n
"
);
SDL_GetRendererInfo
(
&
info
);
PrintRenderer
(
&
info
);
}
}
}
SDL_SelectRenderer
(
state
->
windows
[
0
]);
}
if
(
state
->
flags
&
SDL_INIT_AUDIO
)
{
if
(
state
->
verbose
&
VERBOSE_AUDIO
)
{
n
=
SDL_GetNumAudioDrivers
();
if
(
n
==
0
)
{
fprintf
(
stderr
,
"No built-in audio drivers
\n
"
);
}
else
{
fprintf
(
stderr
,
"Built-in audio drivers:"
);
for
(
i
=
0
;
i
<
n
;
++
i
)
{
if
(
i
>
0
)
{
fprintf
(
stderr
,
","
);
}
fprintf
(
stderr
,
" %s"
,
SDL_GetAudioDriver
(
i
));
}
fprintf
(
stderr
,
"
\n
"
);
}
}
if
(
SDL_AudioInit
(
state
->
audiodriver
)
<
0
)
{
fprintf
(
stderr
,
"Couldn't initialize audio driver: %s
\n
"
,
SDL_GetError
());
return
SDL_FALSE
;
}
if
(
state
->
verbose
&
VERBOSE_VIDEO
)
{
fprintf
(
stderr
,
"Audio driver: %s
\n
"
,
SDL_GetCurrentAudioDriver
());
}
if
(
SDL_OpenAudio
(
&
state
->
audiospec
,
NULL
)
<
0
)
{
fprintf
(
stderr
,
"Couldn't open audio: %s
\n
"
,
SDL_GetError
());
return
SDL_FALSE
;
}
}
return
SDL_TRUE
;
}
static
void
PrintEvent
(
SDL_Event
*
event
)
{
fprintf
(
stderr
,
"SDL EVENT: "
);
switch
(
event
->
type
)
{
case
SDL_WINDOWEVENT
:
switch
(
event
->
window
.
event
)
{
case
SDL_WINDOWEVENT_SHOWN
:
fprintf
(
stderr
,
"Window %d shown"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_HIDDEN
:
fprintf
(
stderr
,
"Window %d hidden"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_EXPOSED
:
fprintf
(
stderr
,
"Window %d exposed"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_MOVED
:
fprintf
(
stderr
,
"Window %d moved to %d,%d"
,
event
->
window
.
windowID
,
event
->
window
.
data1
,
event
->
window
.
data2
);
break
;
case
SDL_WINDOWEVENT_RESIZED
:
fprintf
(
stderr
,
"Window %d resized to %dx%d"
,
event
->
window
.
windowID
,
event
->
window
.
data1
,
event
->
window
.
data2
);
break
;
case
SDL_WINDOWEVENT_MINIMIZED
:
fprintf
(
stderr
,
"Window %d minimized"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_MAXIMIZED
:
fprintf
(
stderr
,
"Window %d maximized"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_RESTORED
:
fprintf
(
stderr
,
"Window %d restored"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_ENTER
:
fprintf
(
stderr
,
"Mouse entered window %d"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_LEAVE
:
fprintf
(
stderr
,
"Mouse left window %d"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_FOCUS_GAINED
:
fprintf
(
stderr
,
"Window %d gained keyboard focus"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_FOCUS_LOST
:
fprintf
(
stderr
,
"Window %d lost keyboard focus"
,
event
->
window
.
windowID
);
break
;
case
SDL_WINDOWEVENT_CLOSE
:
fprintf
(
stderr
,
"Window %d closed"
,
event
->
window
.
windowID
);
break
;
default:
fprintf
(
stderr
,
"Window %d got unknown event %d"
,
event
->
window
.
windowID
,
event
->
window
.
event
);
break
;
}
break
;
case
SDL_KEYDOWN
:
fprintf
(
stderr
,
"Keyboard %d: key pressed in window %d: scancode 0x%08X = %s, keycode 0x%08X = %s"
,
event
->
key
.
which
,
event
->
key
.
windowID
,
event
->
key
.
keysym
.
scancode
,
SDL_GetScancodeName
(
event
->
key
.
keysym
.
scancode
),
event
->
key
.
keysym
.
sym
,
SDL_GetKeyName
(
event
->
key
.
keysym
.
sym
));
break
;
case
SDL_KEYUP
:
fprintf
(
stderr
,
"Keyboard %d: key released in window %d: scancode 0x%08X = %s, keycode 0x%08X = %s"
,
event
->
key
.
which
,
event
->
key
.
windowID
,
event
->
key
.
keysym
.
scancode
,
SDL_GetScancodeName
(
event
->
key
.
keysym
.
scancode
),
event
->
key
.
keysym
.
sym
,
SDL_GetKeyName
(
event
->
key
.
keysym
.
sym
));
break
;
case
SDL_TEXTINPUT
:
fprintf
(
stderr
,
"Keyboard %d: text input
\"
%s
\"
in window %d"
,
event
->
text
.
which
,
event
->
text
.
text
,
event
->
text
.
windowID
);
break
;
case
SDL_MOUSEMOTION
:
fprintf
(
stderr
,
"Mouse %d: moved to %d,%d (%d,%d) in window %d"
,
event
->
motion
.
which
,
event
->
motion
.
x
,
event
->
motion
.
y
,
event
->
motion
.
xrel
,
event
->
motion
.
yrel
,
event
->
motion
.
windowID
);
break
;
case
SDL_MOUSEBUTTONDOWN
:
fprintf
(
stderr
,
"Mouse %d: button %d pressed at %d,%d in window %d"
,
event
->
button
.
which
,
event
->
button
.
button
,
event
->
button
.
x
,
event
->
button
.
y
,
event
->
button
.
windowID
);
break
;
case
SDL_MOUSEBUTTONUP
:
fprintf
(
stderr
,
"Mouse %d: button %d released at %d,%d in window %d"
,
event
->
button
.
which
,
event
->
button
.
button
,
event
->
button
.
x
,
event
->
button
.
y
,
event
->
button
.
windowID
);
break
;
case
SDL_MOUSEWHEEL
:
fprintf
(
stderr
,
"Mouse %d: wheel scrolled %d in x and %d in y in window %d"
,
event
->
wheel
.
which
,
event
->
wheel
.
x
,
event
->
wheel
.
y
,
event
->
wheel
.
windowID
);
break
;
case
SDL_JOYBALLMOTION
:
fprintf
(
stderr
,
"Joystick %d: ball %d moved by %d,%d"
,
event
->
jball
.
which
,
event
->
jball
.
ball
,
event
->
jball
.
xrel
,
event
->
jball
.
yrel
);
break
;
case
SDL_JOYHATMOTION
:
fprintf
(
stderr
,
"Joystick %d: hat %d moved to "
,
event
->
jhat
.
which
,
event
->
jhat
.
hat
);
switch
(
event
->
jhat
.
value
)
{
case
SDL_HAT_CENTERED
:
fprintf
(
stderr
,
"CENTER"
);
break
;
case
SDL_HAT_UP
:
fprintf
(
stderr
,
"UP"
);
break
;
case
SDL_HAT_RIGHTUP
:
fprintf
(
stderr
,
"RIGHTUP"
);
break
;
case
SDL_HAT_RIGHT
:
fprintf
(
stderr
,
"RIGHT"
);
break
;
case
SDL_HAT_RIGHTDOWN
:
fprintf
(
stderr
,
"RIGHTDOWN"
);
break
;
case
SDL_HAT_DOWN
:
fprintf
(
stderr
,
"DOWN"
);
break
;
case
SDL_HAT_LEFTDOWN
:
fprintf
(
stderr
,
"LEFTDOWN"
);
break
;
case
SDL_HAT_LEFT
:
fprintf
(
stderr
,
"LEFT"
);
break
;
case
SDL_HAT_LEFTUP
:
fprintf
(
stderr
,
"LEFTUP"
);
break
;
default:
fprintf
(
stderr
,
"UNKNOWN"
);
break
;
}
break
;
case
SDL_JOYBUTTONDOWN
:
fprintf
(
stderr
,
"Joystick %d: button %d pressed"
,
event
->
jbutton
.
which
,
event
->
jbutton
.
button
);
break
;
case
SDL_JOYBUTTONUP
:
fprintf
(
stderr
,
"Joystick %d: button %d released"
,
event
->
jbutton
.
which
,
event
->
jbutton
.
button
);
break
;
case
SDL_QUIT
:
fprintf
(
stderr
,
"Quit requested"
);
break
;
case
SDL_USEREVENT
:
fprintf
(
stderr
,
"User event %d"
,
event
->
user
.
code
);
break
;
default:
fprintf
(
stderr
,
"Unknown event %d"
,
event
->
type
);
break
;
}
fprintf
(
stderr
,
"
\n
"
);
}
void
CommonEvent
(
CommonState
*
state
,
SDL_Event
*
event
,
int
*
done
)
{
if
(
state
->
verbose
&
VERBOSE_EVENT
)
{
PrintEvent
(
event
);
}
switch
(
event
->
type
)
{
case
SDL_WINDOWEVENT
:
switch
(
event
->
window
.
event
)
{
case
SDL_WINDOWEVENT_CLOSE
:
*
done
=
1
;
break
;
}
break
;
case
SDL_KEYDOWN
:
switch
(
event
->
key
.
keysym
.
sym
)
{
/* Add hotkeys here */
case
SDLK_g
:
if
(
event
->
key
.
keysym
.
mod
&
KMOD_CTRL
)
{
/* Ctrl-G toggle grab */
}
break
;
case
SDLK_ESCAPE
:
*
done
=
1
;
break
;
default:
break
;
}
break
;
case
SDL_QUIT
:
*
done
=
1
;
break
;
}
}
void
CommonQuit
(
CommonState
*
state
)
{
if
(
state
->
flags
&
SDL_INIT_VIDEO
)
{
SDL_VideoQuit
();
}
if
(
state
->
flags
&
SDL_INIT_AUDIO
)
{
SDL_AudioQuit
();
}
if
(
state
->
windows
)
{
SDL_free
(
state
->
windows
);
}
SDL_free
(
state
);
}
test/nds-test-progs/sprite2/source/common.h
deleted
100755 → 0
View file @
3b72fdef
/* A simple test program framework */
#include <SDL/SDL.h>
#define VERBOSE_VIDEO 0x00000001
#define VERBOSE_MODES 0x00000002
#define VERBOSE_RENDER 0x00000004
#define VERBOSE_EVENT 0x00000008
#define VERBOSE_AUDIO 0x00000010
typedef
struct
{
/* SDL init flags */
char
**
argv
;
Uint32
flags
;
Uint32
verbose
;
/* Video info */
const
char
*
videodriver
;
int
display
;
const
char
*
window_title
;
Uint32
window_flags
;
int
window_x
;
int
window_y
;
int
window_w
;
int
window_h
;
int
depth
;
int
refresh_rate
;
int
num_windows
;
SDL_WindowID
*
windows
;
/* Renderer info */
const
char
*
renderdriver
;
Uint32
render_flags
;
SDL_bool
skip_renderer
;
/* Audio info */
const
char
*
audiodriver
;
SDL_AudioSpec
audiospec
;
}
CommonState
;
extern
CommonState
*
CommonCreateState
(
char
**
argv
,
Uint32
flags
);
extern
int
CommonArg
(
CommonState
*
state
,
int
index
);
extern
const
char
*
CommonUsage
(
CommonState
*
state
);
extern
SDL_bool
CommonInit
(
CommonState
*
state
);
extern
void
CommonEvent
(
CommonState
*
state
,
SDL_Event
*
event
,
int
*
done
);
extern
void
CommonQuit
(
CommonState
*
state
);
test/nds-test-progs/sprite2/source/testsprite2.c
deleted
100755 → 0
View file @
3b72fdef
/* Simple program: Move N sprites around on the screen as fast as possible */
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <nds.h>
#include <fat.h>
#include "common.h"
#define NUM_SPRITES 10
#define MAX_SPEED 1
static
CommonState
*
state
;
static
int
num_sprites
;
static
SDL_TextureID
*
sprites
;
static
SDL_bool
cycle_color
;
static
SDL_bool
cycle_alpha
;
static
int
cycle_direction
=
1
;
static
int
current_alpha
=
0
;
static
int
current_color
=
0
;
static
SDL_Rect
*
positions
;
static
SDL_Rect
*
velocities
;
static
int
sprite_w
,
sprite_h
;
static
SDL_BlendMode
blendMode
=
SDL_BLENDMODE_MASK
;
static
SDL_TextureScaleMode
scaleMode
=
SDL_TEXTURESCALEMODE_NONE
;
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
static
void
quit
(
int
rc
)
{
if
(
sprites
)
{
SDL_free
(
sprites
);
}
if
(
positions
)
{
SDL_free
(
positions
);
}
if
(
velocities
)
{
SDL_free
(
velocities
);
}
CommonQuit
(
state
);
exit
(
rc
);
}
int
LoadSprite
(
char
*
file
)
{
int
i
;
SDL_Surface
*
temp
;
/* Load the sprite image */
temp
=
SDL_LoadBMP
(
file
);
if
(
temp
==
NULL
)
{
fprintf
(
stderr
,
"Couldn't load %s: %s"
,
file
,
SDL_GetError
());
return
(
-
1
);
}
sprite_w
=
temp
->
w
;
sprite_h
=
temp
->
h
;
/* Set transparent pixel as the pixel at (0,0) */
if
(
temp
->
format
->
palette
)
{
SDL_SetColorKey
(
temp
,
SDL_SRCCOLORKEY
,
*
(
Uint8
*
)
temp
->
pixels
);
}
/* Create textures from the image */
for
(
i
=
0
;
i
<
state
->
num_windows
;
++
i
)
{
SDL_SelectRenderer
(
state
->
windows
[
i
]);
sprites
[
i
]
=
SDL_CreateTextureFromSurface
(
0
,
temp
);
if
(
!
sprites
[
i
])
{
fprintf
(
stderr
,
"Couldn't create texture: %s
\n
"
,
SDL_GetError
());
SDL_FreeSurface
(
temp
);
return
(
-
1
);
}
SDL_SetTextureBlendMode
(
sprites
[
i
],
blendMode
);
SDL_SetTextureScaleMode
(
sprites
[
i
],
scaleMode
);
}
SDL_FreeSurface
(
temp
);
/* We're ready to roll. :) */
return
(
0
);
}
int
LoadSprite2
(
const
u8
*
ptr
,
int
size
)
{
int
i
;
SDL_Rect
r
=
{
0
,
0
,
32
,
32
};
for
(
i
=
0
;
i
<
state
->
num_windows
;
++
i
)
{
SDL_SelectRenderer
(
state
->
windows
[
i
]);
sprites
[
i
]
=
SDL_CreateTexture
(
SDL_PIXELFORMAT_ABGR1555
,
SDL_TEXTUREACCESS_STATIC
,
r
.
w
,
r
.
h
);
if
(
!
sprites
[
i
])
{
fprintf
(
stderr
,
"Couldn't create texture: %s
\n
"
,
SDL_GetError
());
return
-
1
;
}
SDL_UpdateTexture
(
sprites
[
i
],
&
r
,
ptr
,
r
.
w
*
2
);
SDL_SetTextureBlendMode
(
sprites
[
i
],
blendMode
);
SDL_SetTextureScaleMode
(
sprites
[
i
],
scaleMode
);
}
return
0
;
}
void
MoveSprites
(
SDL_WindowID
window
,
SDL_TextureID
sprite
)
{
int
i
,
n
;
int
window_w
,
window_h
;
SDL_Rect
area
,
*
position
,
*
velocity
;
SDL_SelectRenderer
(
window
);
/* Query the sizes */
SDL_GetWindowSize
(
window
,
&
window_w
,
&
window_h
);
/* Cycle the color and alpha, if desired */
if
(
cycle_color
)
{
current_color
+=
cycle_direction
;
if
(
current_color
<
0
)
{
current_color
=
0
;
cycle_direction
=
-
cycle_direction
;
}
if
(
current_color
>
255
)
{
current_color
=
255
;
cycle_direction
=
-
cycle_direction
;
}
SDL_SetTextureColorMod
(
sprite
,
255
,
(
Uint8
)
current_color
,
(
Uint8
)
current_color
);
}
if
(
cycle_alpha
)
{
current_alpha
+=
cycle_direction
;
if
(
current_alpha
<
0
)
{
current_alpha
=
0
;
cycle_direction
=
-
cycle_direction
;
}
if
(
current_alpha
>
255
)
{
current_alpha
=
255
;
cycle_direction
=
-
cycle_direction
;
}
SDL_SetTextureAlphaMod
(
sprite
,
(
Uint8
)
current_alpha
);
}
/* Move the sprite, bounce at the wall, and draw */
n
=
0
;
SDL_RenderFill
(
0xA0
,
0xA0
,
0xA0
,
0xFF
,
NULL
);
for
(
i
=
0
;
i
<
num_sprites
;
++
i
)
{
position
=
&
positions
[
i
];
velocity
=
&
velocities
[
i
];
position
->
x
+=
velocity
->
x
;
if
((
position
->
x
<
0
)
||
(
position
->
x
>=
(
window_w
-
sprite_w
)))
{
velocity
->
x
=
-
velocity
->
x
;
position
->
x
+=
velocity
->
x
;
}
position
->
y
+=
velocity
->
y
;
if
((
position
->
y
<
0
)
||
(
position
->
y
>=
(
window_h
-
sprite_w
)))
{
velocity
->
y
=
-
velocity
->
y
;
position
->
y
+=
velocity
->
y
;
}
/* Blit the sprite onto the screen */
SDL_RenderCopy
(
sprite
,
NULL
,
position
);
}
/* Update the screen! */
SDL_RenderPresent
();
}
int
main
(
int
argc
,
char
*
argv
[])
{
int
i
,
done
;
SDL_Event
event
;
Uint32
then
,
now
,
frames
;
consoleDemoInit
();
puts
(
"Hello world! Initializing FAT..."
);
fatInitDefault
();
/* Initialize parameters */
num_sprites
=
NUM_SPRITES
;
/* Initialize test framework */
state
=
CommonCreateState
(
argv
,
SDL_INIT_VIDEO
);
if
(
!
state
)
{
return
1
;
}
if
(
!
CommonInit
(
state
))
{
quit
(
2
);
}
/* Create the windows, initialize the renderers, and load the textures */
sprites
=
(
SDL_TextureID
*
)
SDL_malloc
(
state
->
num_windows
*
sizeof
(
*
sprites
));
if
(
!
sprites
)
{
fprintf
(
stderr
,
"Out of memory!
\n
"
);
quit
(
2
);
}
for
(
i
=
0
;
i
<
state
->
num_windows
;
++
i
)
{
SDL_SelectRenderer
(
state
->
windows
[
i
]);
SDL_RenderFill
(
0xA0
,
0xA0
,
0xA0
,
0xFF
,
NULL
);
}
if
(
LoadSprite
(
"icon.bmp"
)
<
0
)
{
printf
(
"
\n
errored.
\n
"
);
while
(
1
);
quit
(
2
);
}
/* Allocate memory for the sprite info */
positions
=
(
SDL_Rect
*
)
SDL_malloc
(
num_sprites
*
sizeof
(
SDL_Rect
));
velocities
=
(
SDL_Rect
*
)
SDL_malloc
(
num_sprites
*
sizeof
(
SDL_Rect
));
if
(
!
positions
||
!
velocities
)
{
fprintf
(
stderr
,
"Out of memory!
\n
"
);
quit
(
2
);
}
srand
(
time
(
NULL
));
if
(
scaleMode
!=
SDL_TEXTURESCALEMODE_NONE
)
{
sprite_w
+=
sprite_w
/
2
;
sprite_h
+=
sprite_h
/
2
;
}
for
(
i
=
0
;
i
<
num_sprites
;
++
i
)
{
positions
[
i
].
x
=
rand
()
%
(
state
->
window_w
-
sprite_w
);
positions
[
i
].
y
=
rand
()
%
(
state
->
window_h
-
sprite_h
);
positions
[
i
].
w
=
sprite_w
;
positions
[
i
].
h
=
sprite_h
;
velocities
[
i
].
x
=
0
;
velocities
[
i
].
y
=
0
;
while
(
!
velocities
[
i
].
x
&&
!
velocities
[
i
].
y
)
{
velocities
[
i
].
x
=
(
rand
()
%
(
MAX_SPEED
*
2
+
1
))
-
MAX_SPEED
;
velocities
[
i
].
y
=
(
rand
()
%
(
MAX_SPEED
*
2
+
1
))
-
MAX_SPEED
;
}
}
/* Main render loop */
frames
=
0
;
then
=
SDL_GetTicks
();
done
=
0
;
while
(
!
done
)
{
/* Check for events */
++
frames
;
while
(
SDL_PollEvent
(
&
event
))
{
CommonEvent
(
state
,
&
event
,
&
done
);
switch
(
event
.
type
)
{
case
SDL_WINDOWEVENT
:
switch
(
event
.
window
.
event
)
{
case
SDL_WINDOWEVENT_EXPOSED
:
SDL_SelectRenderer
(
event
.
window
.
windowID
);
SDL_RenderFill
(
0xA0
,
0xA0
,
0xA0
,
0xFF
,
NULL
);
break
;
}
break
;
default:
break
;
}
}
for
(
i
=
0
;
i
<
state
->
num_windows
;
++
i
)
{
MoveSprites
(
state
->
windows
[
i
],
sprites
[
i
]);
}
}
/* Print out some timing information */
now
=
SDL_GetTicks
();
if
(
now
>
then
)
{
printf
(
"%2.2f frames per second
\n
"
,
((
double
)
frames
*
1000
)
/
(
now
-
then
));
}
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