mirror of
https://github.com/libSDL2pp/libSDL2pp.git
synced 2025-08-03 19:05:59 -04:00
Fix #134
This commit is contained in:
parent
d50e7365da
commit
e538ba15bf
@ -30,34 +30,34 @@
|
|||||||
|
|
||||||
using namespace SDL2pp;
|
using namespace SDL2pp;
|
||||||
|
|
||||||
int main(int, char*[]) try {
|
int main(int, char*[]) {
|
||||||
SDL sdl(SDL_INIT_AUDIO);
|
try {
|
||||||
|
SDL sdl(SDL_INIT_AUDIO);
|
||||||
|
|
||||||
// XXX: these should be constexpr and not captured in lambda
|
// XXX: these should be constexpr and not captured in lambda
|
||||||
// below, but that fails on microsoft crapiler
|
// below, but that fails on microsoft crapiler
|
||||||
int samplerate = 48000;
|
int samplerate = 48000;
|
||||||
float frequency = 2093.00f; // C7 tone
|
float frequency = 2093.00f; // C7 tone
|
||||||
int64_t nsample = 0;
|
int64_t nsample = 0;
|
||||||
|
|
||||||
// Setup audio device, and provide callback which plays sine wave with specified frequency
|
// Setup audio device, and provide callback which plays sine wave with specified frequency
|
||||||
AudioSpec spec(samplerate, AUDIO_S16SYS, 1, 4096);
|
AudioSpec spec(samplerate, AUDIO_S16SYS, 1, 4096);
|
||||||
|
|
||||||
// Open audio device
|
// Open audio device
|
||||||
AudioDevice dev(NullOpt, 0, spec, [&nsample, samplerate, frequency](Uint8* stream, int len) {
|
AudioDevice dev(NullOpt, 0, spec, [&nsample, samplerate, frequency](Uint8* stream, int len) {
|
||||||
// fill provided buffer with sine wave
|
// fill provided buffer with sine wave
|
||||||
for (Uint8* ptr = stream; ptr < stream + len; ptr += 2)
|
for (Uint8* ptr = stream; ptr < stream + len; ptr += 2)
|
||||||
*(Uint16*)ptr = (Uint16)(32766.0f * sin(nsample++ / (float)samplerate * frequency));
|
*(Uint16*)ptr = (Uint16)(32766.0f * sin(nsample++ / (float)samplerate * frequency));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// Sound plays after this call
|
// Sound plays after this call
|
||||||
dev.Pause(false);
|
dev.Pause(false);
|
||||||
|
|
||||||
// Play for 1 second, after which everything is stopped and closed
|
// Play for 1 second, after which everything is stopped and closed
|
||||||
SDL_Delay(1000);
|
SDL_Delay(1000);
|
||||||
|
} catch (std::exception& e) {
|
||||||
return 0;
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
} catch (std::exception& e) {
|
return 1;
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
@ -32,40 +32,40 @@
|
|||||||
|
|
||||||
using namespace SDL2pp;
|
using namespace SDL2pp;
|
||||||
|
|
||||||
int main(int, char*[]) try {
|
int main(int, char*[]) {
|
||||||
SDL sdl(SDL_INIT_AUDIO);
|
try {
|
||||||
|
SDL sdl(SDL_INIT_AUDIO);
|
||||||
|
|
||||||
Wav wav(TESTDATA_DIR "/test.wav");
|
Wav wav(TESTDATA_DIR "/test.wav");
|
||||||
Uint8* wav_pos = wav.GetBuffer();
|
Uint8* wav_pos = wav.GetBuffer();
|
||||||
|
|
||||||
// Open audio device
|
// Open audio device
|
||||||
AudioDevice dev(NullOpt, 0, wav.GetSpec(), [&wav, &wav_pos](Uint8* stream, int len) {
|
AudioDevice dev(NullOpt, 0, wav.GetSpec(), [&wav, &wav_pos](Uint8* stream, int len) {
|
||||||
// Fill provided buffer with wave contents
|
// Fill provided buffer with wave contents
|
||||||
Uint8* stream_pos = stream;
|
Uint8* stream_pos = stream;
|
||||||
Uint8* stream_end = stream + len;
|
Uint8* stream_end = stream + len;
|
||||||
|
|
||||||
while (stream_pos < stream_end) {
|
while (stream_pos < stream_end) {
|
||||||
Uint8* wav_end = wav.GetBuffer() + wav.GetLength();
|
Uint8* wav_end = wav.GetBuffer() + wav.GetLength();
|
||||||
|
|
||||||
size_t copylen = std::min(wav_end - wav_pos, stream_end - stream_pos);
|
size_t copylen = std::min(wav_end - wav_pos, stream_end - stream_pos);
|
||||||
|
|
||||||
std::copy(wav_pos, wav_pos + copylen, stream_pos);
|
std::copy(wav_pos, wav_pos + copylen, stream_pos);
|
||||||
stream_pos += copylen;
|
stream_pos += copylen;
|
||||||
wav_pos += copylen;
|
wav_pos += copylen;
|
||||||
if (wav_pos >= wav_end)
|
if (wav_pos >= wav_end)
|
||||||
wav_pos = wav.GetBuffer();
|
wav_pos = wav.GetBuffer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
);
|
||||||
);
|
|
||||||
|
|
||||||
// Sound plays after this call
|
// Sound plays after this call
|
||||||
dev.Pause(false);
|
dev.Pause(false);
|
||||||
|
|
||||||
// Play for 5 seconds, after which everything is stopped and closed
|
// Play for 5 seconds, after which everything is stopped and closed
|
||||||
SDL_Delay(5000);
|
SDL_Delay(5000);
|
||||||
|
} catch (std::exception& e) {
|
||||||
return 0;
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
} catch (std::exception& e) {
|
return 1;
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
@ -36,50 +36,50 @@ using namespace SDL2pp;
|
|||||||
|
|
||||||
static const float pi = 3.14159265358979323846f;
|
static const float pi = 3.14159265358979323846f;
|
||||||
|
|
||||||
int main(int, char*[]) try {
|
int main(int, char*[]) {
|
||||||
SDL sdl(SDL_INIT_VIDEO);
|
try {
|
||||||
SDLImage image(IMG_INIT_PNG); // optional
|
SDL sdl(SDL_INIT_VIDEO);
|
||||||
Window window("libSDL2pp demo: loading", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_RESIZABLE);
|
SDLImage image(IMG_INIT_PNG); // optional
|
||||||
Renderer render(window, -1, SDL_RENDERER_ACCELERATED);
|
Window window("libSDL2pp demo: loading", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_RESIZABLE);
|
||||||
|
Renderer render(window, -1, SDL_RENDERER_ACCELERATED);
|
||||||
|
|
||||||
// Load sprite texture; sprite1 and sprite2 are actually the same
|
// Load sprite texture; sprite1 and sprite2 are actually the same
|
||||||
// however first one is loaded directly into texture, and second
|
// however first one is loaded directly into texture, and second
|
||||||
// one is loaded through an intermediary surface
|
// one is loaded through an intermediary surface
|
||||||
Surface surf(TESTDATA_DIR "/test.png");
|
Surface surf(TESTDATA_DIR "/test.png");
|
||||||
|
|
||||||
Texture sprite1(render, TESTDATA_DIR "/test.png");
|
Texture sprite1(render, TESTDATA_DIR "/test.png");
|
||||||
Texture sprite2(render, surf);
|
Texture sprite2(render, surf);
|
||||||
|
|
||||||
sprite1.SetBlendMode(SDL_BLENDMODE_BLEND);
|
sprite1.SetBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
sprite2.SetBlendMode(SDL_BLENDMODE_BLEND);
|
sprite2.SetBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
render.SetDrawBlendMode(SDL_BLENDMODE_BLEND);
|
render.SetDrawBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
// Process input
|
// Process input
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent(&event))
|
while (SDL_PollEvent(&event))
|
||||||
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q)))
|
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// Clear screen
|
// Clear screen
|
||||||
render.SetDrawColor(255, 255, 255);
|
render.SetDrawColor(255, 255, 255);
|
||||||
render.Clear();
|
render.Clear();
|
||||||
|
|
||||||
// Simple copy
|
// Simple copy
|
||||||
float angle = SDL_GetTicks() / 5000.0f * 2.0f * pi;
|
float angle = SDL_GetTicks() / 5000.0f * 2.0f * pi;
|
||||||
render.Copy(sprite1, NullOpt, Rect(320 - 64, 240 - 64, 128, 128), angle / pi * 180.0f);
|
render.Copy(sprite1, NullOpt, Rect(320 - 64, 240 - 64, 128, 128), angle / pi * 180.0f);
|
||||||
render.Copy(sprite1, NullOpt, Rect(320 - 32 + (int)(std::sin(angle) * 40.0f), 240 - 32 + (int)(std::cos(angle) * 40.0f), 64, 64));
|
render.Copy(sprite1, NullOpt, Rect(320 - 32 + (int)(std::sin(angle) * 40.0f), 240 - 32 + (int)(std::cos(angle) * 40.0f), 64, 64));
|
||||||
render.Copy(sprite2, NullOpt, Rect(320 - 32 - (int)(std::sin(angle) * 40.0f), 240 - 32 - (int)(std::cos(angle) * 40.0f), 64, 64));
|
render.Copy(sprite2, NullOpt, Rect(320 - 32 - (int)(std::sin(angle) * 40.0f), 240 - 32 - (int)(std::cos(angle) * 40.0f), 64, 64));
|
||||||
|
|
||||||
render.Present();
|
render.Present();
|
||||||
|
|
||||||
// Frame limiter
|
// Frame limiter
|
||||||
SDL_Delay(1);
|
SDL_Delay(1);
|
||||||
|
}
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
} catch (std::exception& e) {
|
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
@ -29,66 +29,66 @@
|
|||||||
|
|
||||||
using namespace SDL2pp;
|
using namespace SDL2pp;
|
||||||
|
|
||||||
int main(int, char*[]) try {
|
int main(int, char*[]) {
|
||||||
SDL sdl(SDL_INIT_VIDEO);
|
try {
|
||||||
Window window("libSDL2pp demo: sprites", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_RESIZABLE);
|
SDL sdl(SDL_INIT_VIDEO);
|
||||||
Renderer render(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
Window window("libSDL2pp demo: sprites", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_RESIZABLE);
|
||||||
|
Renderer render(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
||||||
|
|
||||||
render.SetDrawBlendMode(SDL_BLENDMODE_BLEND);
|
render.SetDrawBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
// Process input
|
// Process input
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent(&event))
|
while (SDL_PollEvent(&event))
|
||||||
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q)))
|
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// Clear screen
|
// Clear screen
|
||||||
render.SetDrawColor(0, 32, 32);
|
render.SetDrawColor(0, 32, 32);
|
||||||
render.Clear();
|
render.Clear();
|
||||||
|
|
||||||
// Render lines
|
// Render lines
|
||||||
render.SetDrawColor(255, 0, 0);
|
render.SetDrawColor(255, 0, 0);
|
||||||
render.DrawLine(10, 10, 630, 10);
|
render.DrawLine(10, 10, 630, 10);
|
||||||
render.SetDrawColor(0, 255, 0);
|
render.SetDrawColor(0, 255, 0);
|
||||||
render.DrawLine(630, 10, 630, 470);
|
render.DrawLine(630, 10, 630, 470);
|
||||||
render.SetDrawColor(0, 0, 255);
|
render.SetDrawColor(0, 0, 255);
|
||||||
render.DrawLine(630, 470, 10, 470);
|
render.DrawLine(630, 470, 10, 470);
|
||||||
render.SetDrawColor(255, 255, 255);
|
render.SetDrawColor(255, 255, 255);
|
||||||
render.DrawLine(10, 470, 10, 10);
|
render.DrawLine(10, 470, 10, 10);
|
||||||
|
|
||||||
render.SetDrawColor(255, 255, 255, 127);
|
render.SetDrawColor(255, 255, 255, 127);
|
||||||
render.FillRect(0, 0, 20, 20);
|
render.FillRect(0, 0, 20, 20);
|
||||||
render.SetDrawColor(255, 255, 255);
|
render.SetDrawColor(255, 255, 255);
|
||||||
render.DrawRect(0, 0, 20, 20);
|
render.DrawRect(0, 0, 20, 20);
|
||||||
|
|
||||||
// Pixel-perfectness test
|
// Pixel-perfectness test
|
||||||
render.SetDrawColor(192, 192, 192);
|
render.SetDrawColor(192, 192, 192);
|
||||||
render.DrawLine(6, 2, 6, 10);
|
render.DrawLine(6, 2, 6, 10);
|
||||||
render.DrawLine(2, 6, 10, 6);
|
render.DrawLine(2, 6, 10, 6);
|
||||||
|
|
||||||
render.SetDrawColor(255, 255, 255);
|
render.SetDrawColor(255, 255, 255);
|
||||||
render.DrawRect(5, 5, 7, 7);
|
render.DrawRect(5, 5, 7, 7);
|
||||||
render.DrawRect(3, 3, 9, 9);
|
render.DrawRect(3, 3, 9, 9);
|
||||||
|
|
||||||
// Rect corner test
|
// Rect corner test
|
||||||
// This may show diagonal lines:
|
// This may show diagonal lines:
|
||||||
// - bright ones indicate that pixels are overdrawn
|
// - bright ones indicate that pixels are overdrawn
|
||||||
// - dark ones indicate that some corner pixels are missing
|
// - dark ones indicate that some corner pixels are missing
|
||||||
// Unfortunately, on most implementations some of
|
// Unfortunately, on most implementations some of
|
||||||
// these problems exist
|
// these problems exist
|
||||||
render.SetDrawColor(255, 255, 255, 32);
|
render.SetDrawColor(255, 255, 255, 32);
|
||||||
for (int i = 0; i < 50; i++)
|
for (int i = 0; i < 50; i++)
|
||||||
render.DrawRect(100+i, 100+i, 200-i, 200-i);
|
render.DrawRect(100+i, 100+i, 200-i, 200-i);
|
||||||
|
|
||||||
render.Present();
|
render.Present();
|
||||||
|
|
||||||
// Frame limiter
|
// Frame limiter
|
||||||
SDL_Delay(1);
|
SDL_Delay(1);
|
||||||
|
}
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
} catch (std::exception& e) {
|
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
@ -31,49 +31,49 @@
|
|||||||
|
|
||||||
using namespace SDL2pp;
|
using namespace SDL2pp;
|
||||||
|
|
||||||
int main(int, char*[]) try {
|
int main(int, char*[]) {
|
||||||
SDL sdl(SDL_INIT_AUDIO);
|
try {
|
||||||
Mixer mixer(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 4096);
|
SDL sdl(SDL_INIT_AUDIO);
|
||||||
|
Mixer mixer(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 4096);
|
||||||
|
|
||||||
Chunk sound(TESTDATA_DIR "/test.ogg");
|
Chunk sound(TESTDATA_DIR "/test.ogg");
|
||||||
|
|
||||||
mixer.SetChannelFinishedHandler([](int channel){
|
mixer.SetChannelFinishedHandler([](int channel){
|
||||||
std::cerr << "Channel " << channel << " finished playback" << std::endl;
|
std::cerr << "Channel " << channel << " finished playback" << std::endl;
|
||||||
});
|
});
|
||||||
|
|
||||||
int chan;
|
int chan;
|
||||||
|
|
||||||
// Fade in
|
// Fade in
|
||||||
chan = mixer.FadeInChannel(-1, sound, 0, 1000);
|
chan = mixer.FadeInChannel(-1, sound, 0, 1000);
|
||||||
std::cerr << "Fading sound in on channel " << chan << "\n";
|
std::cerr << "Fading sound in on channel " << chan << "\n";
|
||||||
|
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
|
|
||||||
// Mix 3 sounds
|
// Mix 3 sounds
|
||||||
chan = mixer.PlayChannel(-1, sound);
|
chan = mixer.PlayChannel(-1, sound);
|
||||||
std::cerr << "Playing sound on channel " << chan << "\n";
|
std::cerr << "Playing sound on channel " << chan << "\n";
|
||||||
|
|
||||||
SDL_Delay(250);
|
SDL_Delay(250);
|
||||||
|
|
||||||
chan = mixer.PlayChannel(-1, sound);
|
chan = mixer.PlayChannel(-1, sound);
|
||||||
std::cerr << "Playing sound on channel " << chan << "\n";
|
std::cerr << "Playing sound on channel " << chan << "\n";
|
||||||
|
|
||||||
SDL_Delay(250);
|
SDL_Delay(250);
|
||||||
|
|
||||||
chan = mixer.PlayChannel(-1, sound);
|
chan = mixer.PlayChannel(-1, sound);
|
||||||
std::cerr << "Playing sound on channel " << chan << "\n";
|
std::cerr << "Playing sound on channel " << chan << "\n";
|
||||||
|
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
|
|
||||||
// Fade out
|
// Fade out
|
||||||
chan = mixer.PlayChannel(-1, sound);
|
chan = mixer.PlayChannel(-1, sound);
|
||||||
std::cerr << "Fading out sound on channel " << chan << "\n";
|
std::cerr << "Fading out sound on channel " << chan << "\n";
|
||||||
mixer.FadeOutChannel(chan, 2000);
|
mixer.FadeOutChannel(chan, 2000);
|
||||||
|
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
|
} catch (std::exception& e) {
|
||||||
return 0;
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
} catch (std::exception& e) {
|
return 1;
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
@ -31,87 +31,87 @@
|
|||||||
|
|
||||||
using namespace SDL2pp;
|
using namespace SDL2pp;
|
||||||
|
|
||||||
int main(int, char*[]) try {
|
int main(int, char*[]) {
|
||||||
SDL sdl(SDL_INIT_AUDIO);
|
try {
|
||||||
Mixer mixer(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 4096);
|
SDL sdl(SDL_INIT_AUDIO);
|
||||||
|
Mixer mixer(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 4096);
|
||||||
|
|
||||||
Chunk sound(TESTDATA_DIR "/test.ogg");
|
Chunk sound(TESTDATA_DIR "/test.ogg");
|
||||||
|
|
||||||
// Panning
|
// Panning
|
||||||
std::cerr << "Panning: left" << std::endl;
|
std::cerr << "Panning: left" << std::endl;
|
||||||
mixer.SetPanning(MIX_CHANNEL_POST, 255, 0);
|
mixer.SetPanning(MIX_CHANNEL_POST, 255, 0);
|
||||||
mixer.PlayChannel(-1, sound);
|
mixer.PlayChannel(-1, sound);
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
mixer.HaltChannel(-1);
|
mixer.HaltChannel(-1);
|
||||||
|
|
||||||
std::cerr << "Panning: right" << std::endl;
|
std::cerr << "Panning: right" << std::endl;
|
||||||
mixer.SetPanning(MIX_CHANNEL_POST, 0, 255);
|
mixer.SetPanning(MIX_CHANNEL_POST, 0, 255);
|
||||||
mixer.PlayChannel(-1, sound);
|
mixer.PlayChannel(-1, sound);
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
mixer.HaltChannel(-1);
|
mixer.HaltChannel(-1);
|
||||||
|
|
||||||
mixer.UnsetPanning(MIX_CHANNEL_POST);
|
mixer.UnsetPanning(MIX_CHANNEL_POST);
|
||||||
|
|
||||||
// Distance
|
// Distance
|
||||||
std::cerr << "Distance: somewhat far" << std::endl;
|
std::cerr << "Distance: somewhat far" << std::endl;
|
||||||
mixer.SetDistance(MIX_CHANNEL_POST, 128);
|
mixer.SetDistance(MIX_CHANNEL_POST, 128);
|
||||||
mixer.PlayChannel(-1, sound);
|
mixer.PlayChannel(-1, sound);
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
mixer.HaltChannel(-1);
|
mixer.HaltChannel(-1);
|
||||||
|
|
||||||
std::cerr << "Distance: further" << std::endl;
|
std::cerr << "Distance: further" << std::endl;
|
||||||
mixer.SetDistance(MIX_CHANNEL_POST, 192);
|
mixer.SetDistance(MIX_CHANNEL_POST, 192);
|
||||||
mixer.PlayChannel(-1, sound);
|
mixer.PlayChannel(-1, sound);
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
mixer.HaltChannel(-1);
|
mixer.HaltChannel(-1);
|
||||||
|
|
||||||
std::cerr << "Distance: even further" << std::endl;
|
std::cerr << "Distance: even further" << std::endl;
|
||||||
mixer.SetDistance(MIX_CHANNEL_POST, 224);
|
mixer.SetDistance(MIX_CHANNEL_POST, 224);
|
||||||
mixer.PlayChannel(-1, sound);
|
mixer.PlayChannel(-1, sound);
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
mixer.HaltChannel(-1);
|
mixer.HaltChannel(-1);
|
||||||
|
|
||||||
mixer.UnsetDistance(MIX_CHANNEL_POST);
|
mixer.UnsetDistance(MIX_CHANNEL_POST);
|
||||||
|
|
||||||
// Position
|
// Position
|
||||||
std::cerr << "Position: closest left" << std::endl;
|
std::cerr << "Position: closest left" << std::endl;
|
||||||
mixer.SetPosition(MIX_CHANNEL_POST, 270, 0);
|
mixer.SetPosition(MIX_CHANNEL_POST, 270, 0);
|
||||||
mixer.PlayChannel(-1, sound);
|
mixer.PlayChannel(-1, sound);
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
mixer.HaltChannel(-1);
|
mixer.HaltChannel(-1);
|
||||||
|
|
||||||
std::cerr << "Position: somewhat far front" << std::endl;
|
std::cerr << "Position: somewhat far front" << std::endl;
|
||||||
mixer.SetPosition(MIX_CHANNEL_POST, 0, 128);
|
mixer.SetPosition(MIX_CHANNEL_POST, 0, 128);
|
||||||
mixer.PlayChannel(-1, sound);
|
mixer.PlayChannel(-1, sound);
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
mixer.HaltChannel(-1);
|
mixer.HaltChannel(-1);
|
||||||
|
|
||||||
std::cerr << "Position: further right" << std::endl;
|
std::cerr << "Position: further right" << std::endl;
|
||||||
mixer.SetPosition(MIX_CHANNEL_POST, 90, 192);
|
mixer.SetPosition(MIX_CHANNEL_POST, 90, 192);
|
||||||
mixer.PlayChannel(-1, sound);
|
mixer.PlayChannel(-1, sound);
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
mixer.HaltChannel(-1);
|
mixer.HaltChannel(-1);
|
||||||
|
|
||||||
std::cerr << "Position: even further back" << std::endl;
|
std::cerr << "Position: even further back" << std::endl;
|
||||||
mixer.SetPosition(MIX_CHANNEL_POST, 180, 224);
|
mixer.SetPosition(MIX_CHANNEL_POST, 180, 224);
|
||||||
mixer.PlayChannel(-1, sound);
|
mixer.PlayChannel(-1, sound);
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
mixer.HaltChannel(-1);
|
mixer.HaltChannel(-1);
|
||||||
|
|
||||||
mixer.UnsetPosition(MIX_CHANNEL_POST);
|
mixer.UnsetPosition(MIX_CHANNEL_POST);
|
||||||
|
|
||||||
// Position
|
// Position
|
||||||
std::cerr << "Reverse stereo" << std::endl;
|
std::cerr << "Reverse stereo" << std::endl;
|
||||||
|
|
||||||
mixer.SetReverseStereo(MIX_CHANNEL_POST);
|
mixer.SetReverseStereo(MIX_CHANNEL_POST);
|
||||||
mixer.PlayChannel(-1, sound);
|
mixer.PlayChannel(-1, sound);
|
||||||
SDL_Delay(2000);
|
SDL_Delay(2000);
|
||||||
mixer.HaltChannel(-1);
|
mixer.HaltChannel(-1);
|
||||||
|
|
||||||
mixer.UnsetReverseStereo(MIX_CHANNEL_POST);
|
mixer.UnsetReverseStereo(MIX_CHANNEL_POST);
|
||||||
|
} catch (std::exception& e) {
|
||||||
return 0;
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
} catch (std::exception& e) {
|
return 1;
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
@ -31,18 +31,18 @@
|
|||||||
|
|
||||||
using namespace SDL2pp;
|
using namespace SDL2pp;
|
||||||
|
|
||||||
int main(int, char*[]) try {
|
int main(int, char*[]) {
|
||||||
SDL sdl(SDL_INIT_AUDIO);
|
try {
|
||||||
Mixer mixer(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 4096);
|
SDL sdl(SDL_INIT_AUDIO);
|
||||||
|
Mixer mixer(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 4096);
|
||||||
|
|
||||||
Music music(TESTDATA_DIR "/test.ogg");
|
Music music(TESTDATA_DIR "/test.ogg");
|
||||||
|
|
||||||
mixer.FadeInMusic(music, -1, 2000);
|
mixer.FadeInMusic(music, -1, 2000);
|
||||||
|
|
||||||
SDL_Delay(5000);
|
SDL_Delay(5000);
|
||||||
|
} catch (std::exception& e) {
|
||||||
return 0;
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
} catch (std::exception& e) {
|
return 1;
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
@ -29,28 +29,28 @@
|
|||||||
|
|
||||||
using namespace SDL2pp;
|
using namespace SDL2pp;
|
||||||
|
|
||||||
int main(int, char*[]) try {
|
int main(int, char*[]) {
|
||||||
SDL sdl(SDL_INIT_AUDIO);
|
try {
|
||||||
Mixer mixer(MIX_DEFAULT_FREQUENCY, AUDIO_S16SYS, 1, 4096);
|
SDL sdl(SDL_INIT_AUDIO);
|
||||||
|
Mixer mixer(MIX_DEFAULT_FREQUENCY, AUDIO_S16SYS, 1, 4096);
|
||||||
|
|
||||||
// XXX: this should be constexpr and not captured in lambda
|
// XXX: this should be constexpr and not captured in lambda
|
||||||
// below, but that fails on microsoft crapiler
|
// below, but that fails on microsoft crapiler
|
||||||
float frequency = 2093.00f; // C7 tone
|
float frequency = 2093.00f; // C7 tone
|
||||||
int64_t nsample = 0;
|
int64_t nsample = 0;
|
||||||
|
|
||||||
// Set custom music hook which generates a sine wave
|
// Set custom music hook which generates a sine wave
|
||||||
mixer.SetMusicHook([&nsample, frequency](Uint8* stream, int len) {
|
mixer.SetMusicHook([&nsample, frequency](Uint8* stream, int len) {
|
||||||
// fill provided buffer with sine wave
|
// fill provided buffer with sine wave
|
||||||
for (Uint8* ptr = stream; ptr < stream + len; ptr += 2)
|
for (Uint8* ptr = stream; ptr < stream + len; ptr += 2)
|
||||||
*(Uint16*)ptr = (Uint16)(32766.0f * sin(nsample++ / (float)MIX_DEFAULT_FREQUENCY * frequency));
|
*(Uint16*)ptr = (Uint16)(32766.0f * sin(nsample++ / (float)MIX_DEFAULT_FREQUENCY * frequency));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// Play for 1 second, after which everything is stopped and closed
|
// Play for 1 second, after which everything is stopped and closed
|
||||||
SDL_Delay(1000);
|
SDL_Delay(1000);
|
||||||
|
} catch (std::exception& e) {
|
||||||
return 0;
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
} catch (std::exception& e) {
|
return 1;
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
@ -45,76 +45,76 @@ enum {
|
|||||||
MY_RENDERTARGET_SIZE = 512,
|
MY_RENDERTARGET_SIZE = 512,
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(int, char*[]) try {
|
int main(int, char*[]) {
|
||||||
SDL sdl(SDL_INIT_VIDEO);
|
try {
|
||||||
Window window("libSDL2pp demo: sprites", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, MY_SCREEN_WIDTH, MY_SCREEN_HEIGHT, SDL_WINDOW_RESIZABLE);
|
SDL sdl(SDL_INIT_VIDEO);
|
||||||
Renderer render(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
Window window("libSDL2pp demo: sprites", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, MY_SCREEN_WIDTH, MY_SCREEN_HEIGHT, SDL_WINDOW_RESIZABLE);
|
||||||
render.SetDrawBlendMode(SDL_BLENDMODE_BLEND);
|
Renderer render(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
|
||||||
|
render.SetDrawBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
// Necessary checks according to SDL docs
|
// Necessary checks according to SDL docs
|
||||||
SDL_RendererInfo ri;
|
SDL_RendererInfo ri;
|
||||||
render.GetInfo(ri);
|
render.GetInfo(ri);
|
||||||
|
|
||||||
if (!(ri.flags & SDL_RENDERER_TARGETTEXTURE)) {
|
if (!(ri.flags & SDL_RENDERER_TARGETTEXTURE)) {
|
||||||
std::cerr << "Sorry, your renderer doesn't support texture targets" << std::endl;
|
std::cerr << "Sorry, your renderer doesn't support texture targets" << std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
|
|
||||||
// Sprite data
|
|
||||||
Texture sprite(render, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, MY_SPRITE_SIZE, MY_SPRITE_SIZE);
|
|
||||||
|
|
||||||
sprite.Update(NullOpt, pixels, MY_SPRITE_SIZE * MY_SPRITE_SIZE);
|
|
||||||
sprite.SetBlendMode(SDL_BLENDMODE_BLEND);
|
|
||||||
|
|
||||||
// Two render target textures
|
|
||||||
Texture target1(render, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, MY_RENDERTARGET_SIZE, MY_RENDERTARGET_SIZE);
|
|
||||||
target1.SetBlendMode(SDL_BLENDMODE_BLEND);
|
|
||||||
|
|
||||||
Texture target2(render, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, MY_RENDERTARGET_SIZE, MY_RENDERTARGET_SIZE);
|
|
||||||
target2.SetBlendMode(SDL_BLENDMODE_BLEND);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
// Process input
|
|
||||||
SDL_Event event;
|
|
||||||
while (SDL_PollEvent(&event))
|
|
||||||
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q)))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
// Note we fill with transparent color, not black
|
|
||||||
render.SetDrawColor(0, 0, 0, 0);
|
|
||||||
|
|
||||||
// Fill base texture with sprite texture
|
|
||||||
render.SetTarget(target1);
|
|
||||||
render.Clear();
|
|
||||||
render.Copy(sprite);
|
|
||||||
|
|
||||||
// Repeat several cycles of flip-flop tiling
|
|
||||||
for (int i = 0; i < 4; i++) {
|
|
||||||
render.SetTarget(target2);
|
|
||||||
render.Clear();
|
|
||||||
render.Copy(target1, NullOpt, Rect(0, 0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0);
|
|
||||||
render.Copy(target1, NullOpt, Rect(MY_RENDERTARGET_SIZE / 2, 0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0);
|
|
||||||
render.Copy(target1, NullOpt, Rect(0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0);
|
|
||||||
render.Copy(target1, NullOpt, Rect(MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0);
|
|
||||||
|
|
||||||
// Swap textures to copy recursively
|
|
||||||
std::swap(target1, target2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw result to screen
|
// Sprite data
|
||||||
render.SetTarget();
|
Texture sprite(render, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, MY_SPRITE_SIZE, MY_SPRITE_SIZE);
|
||||||
render.Clear();
|
|
||||||
|
|
||||||
render.Copy(target1, NullOpt, Rect((MY_SCREEN_WIDTH - MY_SCREEN_HEIGHT) / 2, 0, MY_SCREEN_HEIGHT, MY_SCREEN_HEIGHT), SDL_GetTicks() / 10000.0 * 360.0);
|
sprite.Update(NullOpt, pixels, MY_SPRITE_SIZE * MY_SPRITE_SIZE);
|
||||||
|
sprite.SetBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
render.Present();
|
// Two render target textures
|
||||||
|
Texture target1(render, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, MY_RENDERTARGET_SIZE, MY_RENDERTARGET_SIZE);
|
||||||
|
target1.SetBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
// Frame limiter
|
Texture target2(render, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, MY_RENDERTARGET_SIZE, MY_RENDERTARGET_SIZE);
|
||||||
SDL_Delay(1);
|
target2.SetBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
// Process input
|
||||||
|
SDL_Event event;
|
||||||
|
while (SDL_PollEvent(&event))
|
||||||
|
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// Note we fill with transparent color, not black
|
||||||
|
render.SetDrawColor(0, 0, 0, 0);
|
||||||
|
|
||||||
|
// Fill base texture with sprite texture
|
||||||
|
render.SetTarget(target1);
|
||||||
|
render.Clear();
|
||||||
|
render.Copy(sprite);
|
||||||
|
|
||||||
|
// Repeat several cycles of flip-flop tiling
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
render.SetTarget(target2);
|
||||||
|
render.Clear();
|
||||||
|
render.Copy(target1, NullOpt, Rect(0, 0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0);
|
||||||
|
render.Copy(target1, NullOpt, Rect(MY_RENDERTARGET_SIZE / 2, 0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0);
|
||||||
|
render.Copy(target1, NullOpt, Rect(0, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0);
|
||||||
|
render.Copy(target1, NullOpt, Rect(MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0);
|
||||||
|
|
||||||
|
// Swap textures to copy recursively
|
||||||
|
std::swap(target1, target2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw result to screen
|
||||||
|
render.SetTarget();
|
||||||
|
render.Clear();
|
||||||
|
|
||||||
|
render.Copy(target1, NullOpt, Rect((MY_SCREEN_WIDTH - MY_SCREEN_HEIGHT) / 2, 0, MY_SCREEN_HEIGHT, MY_SCREEN_HEIGHT), SDL_GetTicks() / 10000.0 * 360.0);
|
||||||
|
|
||||||
|
render.Present();
|
||||||
|
|
||||||
|
// Frame limiter
|
||||||
|
SDL_Delay(1);
|
||||||
|
}
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
} catch (std::exception& e) {
|
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
@ -38,56 +38,56 @@ static const unsigned char pixels[4 * 4 * 4] = {
|
|||||||
RGBA(0x80, 0x00, 0xff, 0xff), RGBA(0x00, 0x00, 0xff, 0xff), RGBA(0x00, 0x80, 0xff, 0xff), RGBA(0x00, 0xff, 0xff, 0xff),
|
RGBA(0x80, 0x00, 0xff, 0xff), RGBA(0x00, 0x00, 0xff, 0xff), RGBA(0x00, 0x80, 0xff, 0xff), RGBA(0x00, 0xff, 0xff, 0xff),
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(int, char*[]) try {
|
int main(int, char*[]) {
|
||||||
SDL sdl(SDL_INIT_VIDEO);
|
try {
|
||||||
Window window("libSDL2pp demo: sprites", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_RESIZABLE);
|
SDL sdl(SDL_INIT_VIDEO);
|
||||||
Renderer render(window, -1, SDL_RENDERER_ACCELERATED);
|
Window window("libSDL2pp demo: sprites", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_RESIZABLE);
|
||||||
|
Renderer render(window, -1, SDL_RENDERER_ACCELERATED);
|
||||||
|
|
||||||
// Load sprite texture
|
// Load sprite texture
|
||||||
Texture sprite(render, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, 4, 4);
|
Texture sprite(render, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STATIC, 4, 4);
|
||||||
sprite.Update(NullOpt, pixels, 4 * 4);
|
sprite.Update(NullOpt, pixels, 4 * 4);
|
||||||
sprite.SetBlendMode(SDL_BLENDMODE_BLEND);
|
sprite.SetBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
render.SetDrawBlendMode(SDL_BLENDMODE_BLEND);
|
render.SetDrawBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
// Process input
|
// Process input
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent(&event))
|
while (SDL_PollEvent(&event))
|
||||||
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q)))
|
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// Clear screen
|
// Clear screen
|
||||||
render.SetDrawColor(0, 32, 32);
|
render.SetDrawColor(0, 32, 32);
|
||||||
render.Clear();
|
render.Clear();
|
||||||
|
|
||||||
// Simple copy
|
// Simple copy
|
||||||
render.Copy(sprite, NullOpt, Rect(80, 0, 240, 240));
|
render.Copy(sprite, NullOpt, Rect(80, 0, 240, 240));
|
||||||
|
|
||||||
// Copy with modulation
|
// Copy with modulation
|
||||||
render.Copy(sprite, NullOpt, Rect(400, 0, 120, 120));
|
render.Copy(sprite, NullOpt, Rect(400, 0, 120, 120));
|
||||||
sprite.SetAlphaMod(92);
|
sprite.SetAlphaMod(92);
|
||||||
render.Copy(sprite, NullOpt, Rect(400 + 120, 0, 120, 120));
|
render.Copy(sprite, NullOpt, Rect(400 + 120, 0, 120, 120));
|
||||||
sprite.SetColorMod(255, 0, 0);
|
sprite.SetColorMod(255, 0, 0);
|
||||||
render.Copy(sprite, NullOpt, Rect(400, 0 + 120, 120, 120));
|
render.Copy(sprite, NullOpt, Rect(400, 0 + 120, 120, 120));
|
||||||
sprite.SetAlphaMod();
|
sprite.SetAlphaMod();
|
||||||
render.Copy(sprite, NullOpt, Rect(400 + 120, 0 + 120, 120, 120));
|
render.Copy(sprite, NullOpt, Rect(400 + 120, 0 + 120, 120, 120));
|
||||||
sprite.SetColorMod();
|
sprite.SetColorMod();
|
||||||
|
|
||||||
// Copy with rotation
|
// Copy with rotation
|
||||||
render.Copy(sprite, NullOpt, Rect(80, 240, 240, 240), -1.0 * SDL_GetTicks() / 5000.0 * 360.0, NullOpt, SDL_FLIP_NONE);
|
render.Copy(sprite, NullOpt, Rect(80, 240, 240, 240), -1.0 * SDL_GetTicks() / 5000.0 * 360.0, NullOpt, SDL_FLIP_NONE);
|
||||||
|
|
||||||
// Rotation around another point
|
// Rotation around another point
|
||||||
render.Copy(sprite, NullOpt, Rect(520, 360, 120, 120), -1.0 * SDL_GetTicks() / 5000.0 * 360.0, Point(0, 0), SDL_FLIP_HORIZONTAL | SDL_FLIP_VERTICAL);
|
render.Copy(sprite, NullOpt, Rect(520, 360, 120, 120), -1.0 * SDL_GetTicks() / 5000.0 * 360.0, Point(0, 0), SDL_FLIP_HORIZONTAL | SDL_FLIP_VERTICAL);
|
||||||
|
|
||||||
render.Present();
|
render.Present();
|
||||||
|
|
||||||
// Frame limiter
|
// Frame limiter
|
||||||
SDL_Delay(1);
|
SDL_Delay(1);
|
||||||
|
}
|
||||||
|
} catch (std::exception& e) {
|
||||||
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
} catch (std::exception& e) {
|
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
102
examples/ttf.cc
102
examples/ttf.cc
@ -33,67 +33,67 @@
|
|||||||
|
|
||||||
using namespace SDL2pp;
|
using namespace SDL2pp;
|
||||||
|
|
||||||
int main(int, char*[]) try {
|
int main(int, char*[]) {
|
||||||
SDL sdl(SDL_INIT_VIDEO);
|
try {
|
||||||
SDLTTF ttf;
|
SDL sdl(SDL_INIT_VIDEO);
|
||||||
Window window("libSDL2pp demo: font", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_RESIZABLE);
|
SDLTTF ttf;
|
||||||
Renderer render(window, -1, SDL_RENDERER_ACCELERATED);
|
Window window("libSDL2pp demo: font", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_RESIZABLE);
|
||||||
|
Renderer render(window, -1, SDL_RENDERER_ACCELERATED);
|
||||||
|
|
||||||
Font font(TESTDATA_DIR "/Vera.ttf", 30);
|
Font font(TESTDATA_DIR "/Vera.ttf", 30);
|
||||||
|
|
||||||
std::vector<Texture> textures;
|
std::vector<Texture> textures;
|
||||||
|
|
||||||
textures.emplace_back(render,
|
textures.emplace_back(render,
|
||||||
font.RenderText_Solid("Hello, world! (solid mode)", SDL_Color{255, 255, 255, 255})
|
font.RenderText_Solid("Hello, world! (solid mode)", SDL_Color{255, 255, 255, 255})
|
||||||
);
|
);
|
||||||
textures.emplace_back(render,
|
textures.emplace_back(render,
|
||||||
font.RenderText_Shaded("Hello, world! (shaded mode)", SDL_Color{255, 255, 255, 255}, SDL_Color{127, 127, 127, 255})
|
font.RenderText_Shaded("Hello, world! (shaded mode)", SDL_Color{255, 255, 255, 255}, SDL_Color{127, 127, 127, 255})
|
||||||
);
|
);
|
||||||
textures.emplace_back(render,
|
textures.emplace_back(render,
|
||||||
font.RenderText_Blended("Hello, world! (blended mode)", SDL_Color{255, 255, 255, 255})
|
font.RenderText_Blended("Hello, world! (blended mode)", SDL_Color{255, 255, 255, 255})
|
||||||
);
|
);
|
||||||
|
|
||||||
font.SetOutline(1);
|
font.SetOutline(1);
|
||||||
|
|
||||||
textures.emplace_back(render,
|
textures.emplace_back(render,
|
||||||
font.RenderText_Blended("Hello, world! (blended + outline)", SDL_Color{255, 255, 255, 255})
|
font.RenderText_Blended("Hello, world! (blended + outline)", SDL_Color{255, 255, 255, 255})
|
||||||
);
|
);
|
||||||
|
|
||||||
font.SetOutline(0);
|
font.SetOutline(0);
|
||||||
|
|
||||||
textures.emplace_back(render,
|
textures.emplace_back(render,
|
||||||
font.RenderUTF8_Blended(u8"Hello, world! «¼½¾» (UTF-8 support)", SDL_Color{255, 255, 255, 255})
|
font.RenderUTF8_Blended(u8"Hello, world! «¼½¾» (UTF-8 support)", SDL_Color{255, 255, 255, 255})
|
||||||
);
|
);
|
||||||
textures.emplace_back(render,
|
textures.emplace_back(render,
|
||||||
font.RenderUNICODE_Blended(u"Hello, world! «¼½¾» (UTF-16 support)", SDL_Color{255, 255, 255, 255})
|
font.RenderUNICODE_Blended(u"Hello, world! «¼½¾» (UTF-16 support)", SDL_Color{255, 255, 255, 255})
|
||||||
);
|
);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
// Process input
|
// Process input
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent(&event))
|
while (SDL_PollEvent(&event))
|
||||||
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q)))
|
if (event.type == SDL_QUIT || (event.type == SDL_KEYDOWN && (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_q)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// Clear screen
|
// Clear screen
|
||||||
render.SetDrawColor(0, 63, 63);
|
render.SetDrawColor(0, 63, 63);
|
||||||
render.Clear();
|
render.Clear();
|
||||||
|
|
||||||
// Render all strings
|
// Render all strings
|
||||||
int h = 0;
|
int h = 0;
|
||||||
for (auto& texture: textures) {
|
for (auto& texture: textures) {
|
||||||
render.Copy(texture, NullOpt, Rect(0, h, texture.GetWidth(), texture.GetHeight()));
|
render.Copy(texture, NullOpt, Rect(0, h, texture.GetWidth(), texture.GetHeight()));
|
||||||
h += texture.GetHeight();
|
h += texture.GetHeight();
|
||||||
|
}
|
||||||
|
|
||||||
|
render.Present();
|
||||||
|
|
||||||
|
// Frame limiter
|
||||||
|
SDL_Delay(1);
|
||||||
}
|
}
|
||||||
|
} catch (std::exception& e) {
|
||||||
render.Present();
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
|
return 1;
|
||||||
// Frame limiter
|
|
||||||
SDL_Delay(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
} catch (std::exception& e) {
|
|
||||||
std::cerr << "Error: " << e.what() << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user