gosu 0.12.1 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gosu/Audio.hpp +23 -25
- data/Gosu/Graphics.hpp +16 -12
- data/Gosu/Image.hpp +3 -0
- data/Gosu/Version.hpp +2 -2
- data/lib/gosu.rb +2 -2
- data/lib/gosu/compat.rb +1 -1
- data/lib/gosu/patches.rb +5 -0
- data/lib/gosu/swig_patches.rb +1 -1
- data/rdoc/gosu.rb +10 -10
- data/src/Audio.cpp +93 -228
- data/src/AudioImpl.cpp +94 -0
- data/src/AudioImpl.hpp +33 -0
- data/src/AudioToolboxFile.hpp +14 -18
- data/src/Bitmap.cpp +36 -30
- data/src/BitmapIO.cpp +14 -23
- data/src/BlockAllocator.cpp +7 -10
- data/src/BlockAllocator.hpp +2 -4
- data/src/Channel.cpp +89 -0
- data/src/Color.cpp +4 -9
- data/src/DirectoriesApple.cpp +13 -13
- data/src/DirectoriesUnix.cpp +8 -7
- data/src/DirectoriesWin.cpp +12 -11
- data/src/EmptyImageData.hpp +54 -0
- data/src/FileUnix.cpp +12 -9
- data/src/FileWin.cpp +8 -7
- data/src/Font.cpp +12 -13
- data/src/FormattedString.cpp +237 -0
- data/src/FormattedString.hpp +14 -265
- data/src/GosuViewController.cpp +2 -5
- data/src/Graphics.cpp +38 -39
- data/src/IO.cpp +11 -10
- data/src/Image.cpp +16 -9
- data/src/Input.cpp +16 -15
- data/src/InputUIKit.cpp +8 -7
- data/src/Macro.cpp +11 -11
- data/src/Math.cpp +9 -8
- data/src/RubyGosu.cxx +129 -99
- data/src/TextApple.cpp +19 -13
- data/src/TextInput.cpp +23 -22
- data/src/TextWin.cpp +17 -19
- data/src/Texture.cpp +15 -10
- data/src/Transform.cpp +13 -17
- data/src/Utility.cpp +3 -2
- data/src/UtilityApple.cpp +10 -11
- data/src/UtilityWin.cpp +2 -1
- data/src/Version.cpp +5 -4
- data/src/WinMain.cpp +3 -3
- data/src/WinUtility.cpp +7 -6
- data/src/Window.cpp +11 -10
- data/src/WindowUIKit.cpp +9 -8
- data/src/stb_image.h +782 -480
- data/src/stb_image_write.h +425 -15
- data/src/stb_vorbis.c +82 -32
- metadata +8 -4
- data/src/ALChannelManagement.hpp +0 -119
data/src/stb_vorbis.c
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
// Ogg Vorbis audio decoder - v1.
|
1
|
+
// Ogg Vorbis audio decoder - v1.11 - public domain
|
2
2
|
// http://nothings.org/stb_vorbis/
|
3
3
|
//
|
4
4
|
// Original version written by Sean Barrett in 2007.
|
@@ -9,12 +9,7 @@
|
|
9
9
|
//
|
10
10
|
// LICENSE
|
11
11
|
//
|
12
|
-
//
|
13
|
-
// license: you are granted a perpetual, irrevocable license to copy, modify,
|
14
|
-
// publish, and distribute this file as you see fit.
|
15
|
-
//
|
16
|
-
// No warranty for any purpose is expressed or implied by the author (nor
|
17
|
-
// by RAD Game Tools). Report bugs and send enhancements to the author.
|
12
|
+
// See end of file for license information.
|
18
13
|
//
|
19
14
|
// Limitations:
|
20
15
|
//
|
@@ -34,9 +29,11 @@
|
|
34
29
|
// Bernhard Wodo Evan Balster alxprd@github
|
35
30
|
// Tom Beaumont Ingo Leitgeb Nicolas Guillemot
|
36
31
|
// Phillip Bennefall Rohit Thiago Goulart
|
37
|
-
// manxorist@github saga musix
|
32
|
+
// manxorist@github saga musix github:infatum
|
38
33
|
//
|
39
34
|
// Partial history:
|
35
|
+
// 1.11 - 2017/07/23 - fix MinGW compilation
|
36
|
+
// 1.10 - 2017/03/03 - more robust seeking; fix negative ilog(); clear error in open_memory
|
40
37
|
// 1.09 - 2016/04/04 - back out 'truncation of last frame' fix from previous version
|
41
38
|
// 1.08 - 2016/04/02 - warnings; setup memory leaks; truncation of last frame
|
42
39
|
// 1.07 - 2015/01/16 - fixes for crashes on invalid files; warning fixes; const
|
@@ -275,7 +272,7 @@ extern int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number);
|
|
275
272
|
// do not need to seek to EXACTLY the target sample when using get_samples_*,
|
276
273
|
// you can also use seek_frame().
|
277
274
|
|
278
|
-
extern
|
275
|
+
extern int stb_vorbis_seek_start(stb_vorbis *f);
|
279
276
|
// this function is equivalent to stb_vorbis_seek(f,0)
|
280
277
|
|
281
278
|
extern unsigned int stb_vorbis_stream_length_in_samples(stb_vorbis *f);
|
@@ -555,7 +552,7 @@ enum STBVorbisError
|
|
555
552
|
#include <math.h>
|
556
553
|
|
557
554
|
// find definition of alloca if it's not in stdlib.h:
|
558
|
-
#
|
555
|
+
#if defined(_MSC_VER) || defined(__MINGW32__)
|
559
556
|
#include <malloc.h>
|
560
557
|
#endif
|
561
558
|
#if defined(__linux__) || defined(__linux) || defined(__EMSCRIPTEN__)
|
@@ -580,6 +577,7 @@ enum STBVorbisError
|
|
580
577
|
#undef __forceinline
|
581
578
|
#endif
|
582
579
|
#define __forceinline
|
580
|
+
#define alloca __builtin_alloca
|
583
581
|
#elif !defined(_MSC_VER)
|
584
582
|
#if __GNUC__
|
585
583
|
#define __forceinline inline
|
@@ -986,17 +984,18 @@ static int ilog(int32 n)
|
|
986
984
|
{
|
987
985
|
static signed char log2_4[16] = { 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4 };
|
988
986
|
|
987
|
+
if (n < 0) return 0; // signed n returns 0
|
988
|
+
|
989
989
|
// 2 compares if n < 16, 3 compares otherwise (4 if signed or n > 1<<29)
|
990
990
|
if (n < (1 << 14))
|
991
|
-
if (n < (1 << 4))
|
992
|
-
else if (n < (1 << 9))
|
991
|
+
if (n < (1 << 4)) return 0 + log2_4[n ];
|
992
|
+
else if (n < (1 << 9)) return 5 + log2_4[n >> 5];
|
993
993
|
else return 10 + log2_4[n >> 10];
|
994
994
|
else if (n < (1 << 24))
|
995
|
-
if (n < (1 << 19))
|
995
|
+
if (n < (1 << 19)) return 15 + log2_4[n >> 15];
|
996
996
|
else return 20 + log2_4[n >> 20];
|
997
|
-
else if (n < (1 << 29))
|
998
|
-
else
|
999
|
-
else return 0; // signed n returns 0
|
997
|
+
else if (n < (1 << 29)) return 25 + log2_4[n >> 25];
|
998
|
+
else return 30 + log2_4[n >> 30];
|
1000
999
|
}
|
1001
1000
|
|
1002
1001
|
#ifndef M_PI
|
@@ -1269,13 +1268,13 @@ static void neighbors(uint16 *x, int n, int *plow, int *phigh)
|
|
1269
1268
|
// this has been repurposed so y is now the original index instead of y
|
1270
1269
|
typedef struct
|
1271
1270
|
{
|
1272
|
-
uint16 x,
|
1273
|
-
}
|
1271
|
+
uint16 x,id;
|
1272
|
+
} stbv__floor_ordering;
|
1274
1273
|
|
1275
1274
|
static int STBV_CDECL point_compare(const void *p, const void *q)
|
1276
1275
|
{
|
1277
|
-
|
1278
|
-
|
1276
|
+
stbv__floor_ordering *a = (stbv__floor_ordering *) p;
|
1277
|
+
stbv__floor_ordering *b = (stbv__floor_ordering *) q;
|
1279
1278
|
return a->x < b->x ? -1 : a->x > b->x;
|
1280
1279
|
}
|
1281
1280
|
|
@@ -3484,11 +3483,13 @@ static int vorbis_finish_frame(stb_vorbis *f, int len, int left, int right)
|
|
3484
3483
|
return right - left;
|
3485
3484
|
}
|
3486
3485
|
|
3487
|
-
static
|
3486
|
+
static int vorbis_pump_first_frame(stb_vorbis *f)
|
3488
3487
|
{
|
3489
|
-
int len, right, left;
|
3490
|
-
|
3488
|
+
int len, right, left, res;
|
3489
|
+
res = vorbis_decode_packet(f, &len, &left, &right);
|
3490
|
+
if (res)
|
3491
3491
|
vorbis_finish_frame(f, len, left, right);
|
3492
|
+
return res;
|
3492
3493
|
}
|
3493
3494
|
|
3494
3495
|
#ifndef STB_VORBIS_NO_PUSHDATA_API
|
@@ -3871,7 +3872,7 @@ static int start_decoder(vorb *f)
|
|
3871
3872
|
g->book_list[j] = get_bits(f,8);
|
3872
3873
|
return error(f, VORBIS_feature_not_supported);
|
3873
3874
|
} else {
|
3874
|
-
|
3875
|
+
stbv__floor_ordering p[31*8+2];
|
3875
3876
|
Floor1 *g = &f->floor_config[i].floor1;
|
3876
3877
|
int max_class = -1;
|
3877
3878
|
g->partitions = get_bits(f, 5);
|
@@ -3907,11 +3908,11 @@ static int start_decoder(vorb *f)
|
|
3907
3908
|
// precompute the sorting
|
3908
3909
|
for (j=0; j < g->values; ++j) {
|
3909
3910
|
p[j].x = g->Xlist[j];
|
3910
|
-
p[j].
|
3911
|
+
p[j].id = j;
|
3911
3912
|
}
|
3912
3913
|
qsort(p, g->values, sizeof(p[0]), point_compare);
|
3913
3914
|
for (j=0; j < g->values; ++j)
|
3914
|
-
g->sorted_order[j] = (uint8) p[j].
|
3915
|
+
g->sorted_order[j] = (uint8) p[j].id;
|
3915
3916
|
// precompute the neighbors
|
3916
3917
|
for (j=2; j < g->values; ++j) {
|
3917
3918
|
int low,hi;
|
@@ -4615,8 +4616,9 @@ static int seek_to_sample_coarse(stb_vorbis *f, uint32 sample_number)
|
|
4615
4616
|
|
4616
4617
|
// starting from the start is handled differently
|
4617
4618
|
if (sample_number <= left.last_decoded_sample) {
|
4618
|
-
stb_vorbis_seek_start(f)
|
4619
|
-
|
4619
|
+
if (stb_vorbis_seek_start(f))
|
4620
|
+
return 1;
|
4621
|
+
return 0;
|
4620
4622
|
}
|
4621
4623
|
|
4622
4624
|
while (left.page_end != right.page_start) {
|
@@ -4717,7 +4719,10 @@ static int seek_to_sample_coarse(stb_vorbis *f, uint32 sample_number)
|
|
4717
4719
|
skip(f, f->segments[i]);
|
4718
4720
|
|
4719
4721
|
// start decoding (optimizable - this frame is generally discarded)
|
4720
|
-
vorbis_pump_first_frame(f)
|
4722
|
+
if (!vorbis_pump_first_frame(f))
|
4723
|
+
return 0;
|
4724
|
+
if (f->current_loc > sample_number)
|
4725
|
+
return error(f, VORBIS_seek_failed);
|
4721
4726
|
return 1;
|
4722
4727
|
|
4723
4728
|
error:
|
@@ -4808,14 +4813,14 @@ int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number)
|
|
4808
4813
|
return 1;
|
4809
4814
|
}
|
4810
4815
|
|
4811
|
-
|
4816
|
+
int stb_vorbis_seek_start(stb_vorbis *f)
|
4812
4817
|
{
|
4813
|
-
if (IS_PUSH_MODE(f)) { error(f, VORBIS_invalid_api_mixing);
|
4818
|
+
if (IS_PUSH_MODE(f)) { return error(f, VORBIS_invalid_api_mixing); }
|
4814
4819
|
set_file_offset(f, f->first_audio_page_offset);
|
4815
4820
|
f->previous_length = 0;
|
4816
4821
|
f->first_decode = TRUE;
|
4817
4822
|
f->next_seg = -1;
|
4818
|
-
vorbis_pump_first_frame(f);
|
4823
|
+
return vorbis_pump_first_frame(f);
|
4819
4824
|
}
|
4820
4825
|
|
4821
4826
|
unsigned int stb_vorbis_stream_length_in_samples(stb_vorbis *f)
|
@@ -4980,6 +4985,7 @@ stb_vorbis * stb_vorbis_open_memory(const unsigned char *data, int len, int *err
|
|
4980
4985
|
if (f) {
|
4981
4986
|
*f = p;
|
4982
4987
|
vorbis_pump_first_frame(f);
|
4988
|
+
if (error) *error = VORBIS__no_error;
|
4983
4989
|
return f;
|
4984
4990
|
}
|
4985
4991
|
}
|
@@ -5345,6 +5351,7 @@ int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, in
|
|
5345
5351
|
#endif // STB_VORBIS_NO_PULLDATA_API
|
5346
5352
|
|
5347
5353
|
/* Version history
|
5354
|
+
1.10 - 2017/03/03 - more robust seeking; fix negative ilog(); clear error in open_memory
|
5348
5355
|
1.09 - 2016/04/04 - back out 'avoid discarding last frame' fix from previous version
|
5349
5356
|
1.08 - 2016/04/02 - fixed multiple warnings; fix setup memory leaks;
|
5350
5357
|
avoid discarding last frame of audio data
|
@@ -5397,3 +5404,46 @@ int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, in
|
|
5397
5404
|
*/
|
5398
5405
|
|
5399
5406
|
#endif // STB_VORBIS_HEADER_ONLY
|
5407
|
+
|
5408
|
+
|
5409
|
+
/*
|
5410
|
+
------------------------------------------------------------------------------
|
5411
|
+
This software is available under 2 licenses -- choose whichever you prefer.
|
5412
|
+
------------------------------------------------------------------------------
|
5413
|
+
ALTERNATIVE A - MIT License
|
5414
|
+
Copyright (c) 2017 Sean Barrett
|
5415
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
5416
|
+
this software and associated documentation files (the "Software"), to deal in
|
5417
|
+
the Software without restriction, including without limitation the rights to
|
5418
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
5419
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
5420
|
+
so, subject to the following conditions:
|
5421
|
+
The above copyright notice and this permission notice shall be included in all
|
5422
|
+
copies or substantial portions of the Software.
|
5423
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
5424
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
5425
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
5426
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
5427
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
5428
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
5429
|
+
SOFTWARE.
|
5430
|
+
------------------------------------------------------------------------------
|
5431
|
+
ALTERNATIVE B - Public Domain (www.unlicense.org)
|
5432
|
+
This is free and unencumbered software released into the public domain.
|
5433
|
+
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
5434
|
+
software, either in source code form or as a compiled binary, for any purpose,
|
5435
|
+
commercial or non-commercial, and by any means.
|
5436
|
+
In jurisdictions that recognize copyright laws, the author or authors of this
|
5437
|
+
software dedicate any and all copyright interest in the software to the public
|
5438
|
+
domain. We make this dedication for the benefit of the public at large and to
|
5439
|
+
the detriment of our heirs and successors. We intend this dedication to be an
|
5440
|
+
overt act of relinquishment in perpetuity of all present and future rights to
|
5441
|
+
this software under copyright law.
|
5442
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
5443
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
5444
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
5445
|
+
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
5446
|
+
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
5447
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
5448
|
+
------------------------------------------------------------------------------
|
5449
|
+
*/
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gosu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julian Raschke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |2
|
14
14
|
2D game development library.
|
@@ -60,14 +60,16 @@ files:
|
|
60
60
|
- lib/gosu/swig_patches.rb
|
61
61
|
- lib/gosu/zen.rb
|
62
62
|
- rdoc/gosu.rb
|
63
|
-
- src/ALChannelManagement.hpp
|
64
63
|
- src/Audio.cpp
|
65
64
|
- src/AudioFile.hpp
|
65
|
+
- src/AudioImpl.cpp
|
66
|
+
- src/AudioImpl.hpp
|
66
67
|
- src/AudioToolboxFile.hpp
|
67
68
|
- src/Bitmap.cpp
|
68
69
|
- src/BitmapIO.cpp
|
69
70
|
- src/BlockAllocator.cpp
|
70
71
|
- src/BlockAllocator.hpp
|
72
|
+
- src/Channel.cpp
|
71
73
|
- src/ClipRectStack.hpp
|
72
74
|
- src/Color.cpp
|
73
75
|
- src/DirectoriesApple.cpp
|
@@ -75,9 +77,11 @@ files:
|
|
75
77
|
- src/DirectoriesWin.cpp
|
76
78
|
- src/DrawOp.hpp
|
77
79
|
- src/DrawOpQueue.hpp
|
80
|
+
- src/EmptyImageData.hpp
|
78
81
|
- src/FileUnix.cpp
|
79
82
|
- src/FileWin.cpp
|
80
83
|
- src/Font.cpp
|
84
|
+
- src/FormattedString.cpp
|
81
85
|
- src/FormattedString.hpp
|
82
86
|
- src/GosuAppDelegate.cpp
|
83
87
|
- src/GosuAppDelegate.h
|
@@ -157,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
161
|
version: '0'
|
158
162
|
requirements: []
|
159
163
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.6.
|
164
|
+
rubygems_version: 2.6.14
|
161
165
|
signing_key:
|
162
166
|
specification_version: 4
|
163
167
|
summary: 2D game development library.
|
data/src/ALChannelManagement.hpp
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
#include <Gosu/Platform.hpp>
|
2
|
-
#include <cstdlib>
|
3
|
-
#include <algorithm>
|
4
|
-
#include <memory>
|
5
|
-
#ifdef GOSU_IS_MAC
|
6
|
-
#include <OpenAL/al.h>
|
7
|
-
#include <OpenAL/alc.h>
|
8
|
-
#else
|
9
|
-
#include <AL/al.h>
|
10
|
-
#include <AL/alc.h>
|
11
|
-
#endif
|
12
|
-
|
13
|
-
namespace Gosu
|
14
|
-
{
|
15
|
-
class ALChannelManagement
|
16
|
-
{
|
17
|
-
ALChannelManagement(const ALChannelManagement&) = delete;
|
18
|
-
ALChannelManagement& operator=(const ALChannelManagement&) = delete;
|
19
|
-
ALChannelManagement(ALChannelManagement&&) = delete;
|
20
|
-
ALChannelManagement& operator=(ALChannelManagement&&) = delete;
|
21
|
-
|
22
|
-
static ALCdevice* al_device;
|
23
|
-
static ALCcontext* al_context;
|
24
|
-
|
25
|
-
#ifdef GOSU_IS_IPHONE
|
26
|
-
// iOS system limit.
|
27
|
-
enum { NUM_SOURCES = 32 };
|
28
|
-
#else
|
29
|
-
enum { NUM_SOURCES = 255 };
|
30
|
-
#endif
|
31
|
-
static ALuint al_sources[NUM_SOURCES];
|
32
|
-
static ALuint current_token;
|
33
|
-
static ALuint current_tokens[NUM_SOURCES];
|
34
|
-
|
35
|
-
public:
|
36
|
-
enum { NO_TOKEN = -1, NO_SOURCE = -1, NO_FREE_CHANNEL = -1 };
|
37
|
-
|
38
|
-
static ALCdevice* device()
|
39
|
-
{
|
40
|
-
return al_device;
|
41
|
-
}
|
42
|
-
|
43
|
-
static ALCcontext* context()
|
44
|
-
{
|
45
|
-
return al_context;
|
46
|
-
}
|
47
|
-
|
48
|
-
ALChannelManagement()
|
49
|
-
{
|
50
|
-
// Open preferred device
|
51
|
-
al_device = alcOpenDevice(0);
|
52
|
-
al_context = alcCreateContext(al_device, 0);
|
53
|
-
alcMakeContextCurrent(al_context);
|
54
|
-
alGenSources(NUM_SOURCES, al_sources);
|
55
|
-
std::fill(current_tokens, current_tokens + NUM_SOURCES, static_cast<ALuint>(NO_TOKEN));
|
56
|
-
}
|
57
|
-
|
58
|
-
~ALChannelManagement()
|
59
|
-
{
|
60
|
-
alDeleteSources(NUM_SOURCES, al_sources);
|
61
|
-
alcMakeContextCurrent(0);
|
62
|
-
alcDestroyContext(al_context);
|
63
|
-
alcCloseDevice(al_device);
|
64
|
-
}
|
65
|
-
|
66
|
-
std::pair<int, int> reserve_channel()
|
67
|
-
{
|
68
|
-
int i;
|
69
|
-
for (i = 1; i <= NUM_SOURCES; ++i) {
|
70
|
-
if (i == NUM_SOURCES) {
|
71
|
-
return std::make_pair<int, int>(NO_FREE_CHANNEL, NO_TOKEN);
|
72
|
-
}
|
73
|
-
if (current_tokens[i] == NO_TOKEN) {
|
74
|
-
break;
|
75
|
-
}
|
76
|
-
ALint state;
|
77
|
-
alGetSourcei(al_sources[i], AL_SOURCE_STATE, &state);
|
78
|
-
if (state != AL_PLAYING && state != AL_PAUSED) {
|
79
|
-
break;
|
80
|
-
}
|
81
|
-
}
|
82
|
-
++current_token;
|
83
|
-
current_tokens[i] = current_token;
|
84
|
-
return std::make_pair(i, int(current_token));
|
85
|
-
}
|
86
|
-
|
87
|
-
int source_if_still_playing(int channel, int token) const
|
88
|
-
{
|
89
|
-
if (channel != NO_FREE_CHANNEL && current_tokens[channel] == token) {
|
90
|
-
return al_sources[channel];
|
91
|
-
}
|
92
|
-
else {
|
93
|
-
return NO_SOURCE;
|
94
|
-
}
|
95
|
-
}
|
96
|
-
|
97
|
-
int source_for_songs() const
|
98
|
-
{
|
99
|
-
return al_sources[0];
|
100
|
-
}
|
101
|
-
};
|
102
|
-
ALCdevice* ALChannelManagement::al_device = 0;
|
103
|
-
ALCcontext* ALChannelManagement::al_context = 0;
|
104
|
-
ALuint ALChannelManagement::al_sources[NUM_SOURCES];
|
105
|
-
ALuint ALChannelManagement::current_token = 0;
|
106
|
-
ALuint ALChannelManagement::current_tokens[NUM_SOURCES];
|
107
|
-
|
108
|
-
std::unique_ptr<ALChannelManagement> al_channel_management;
|
109
|
-
|
110
|
-
void release_all_openal_resources()
|
111
|
-
{
|
112
|
-
al_channel_management.reset();
|
113
|
-
}
|
114
|
-
|
115
|
-
ALCcontext *shared_openal_context()
|
116
|
-
{
|
117
|
-
return ALChannelManagement::context();
|
118
|
-
}
|
119
|
-
}
|