mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-10-05 23:21:34 +02:00
Update to v094r22 release.
byuu says: I fixed the hiro layout enable bug, so when you go to assign joypad input, the window disables itself so your input doesn't mess with the controls. I added "reset" to the hotkeys, in case you feel like clearing all of them at once. I added device selection support and the ability to disable audio synchronization (run > 60fps) to the ruby/OSS driver. This is exposed in tomoko's configuration file. I added checks to stringify so that assigning null char* strings to nall::string won't cause crashes anymore (technically the crash was in strlen(), which doesn't check for null strings, but whatever ... I'll do the check myself.) I hooked up BrowserDialog::folderSelect() to loading slotted media for now. Tested it by loading a Game Boy game successfully through the Super Game Boy. Definitely want to write a custom window for this though, that looks more like the library dialog. Remaining issues: - finish slotted cart loader (SGB, BSX, ST) - add DIP switch selection window (NSS) [I may end up punting this one to v096] - add more configuration panels (video, audio, timing)
This commit is contained in:
@@ -19,20 +19,20 @@ using namespace nall;
|
||||
|
||||
#define DeclareVideo(Name) \
|
||||
struct Video##Name : Video { \
|
||||
bool cap(const string& name) { return p.cap(name); } \
|
||||
any get(const string& name) { return p.get(name); } \
|
||||
bool set(const string& name, const any& value) { return p.set(name, value); } \
|
||||
\
|
||||
bool lock(uint32_t*& data, unsigned& pitch, unsigned width, unsigned height) { return p.lock(data, pitch, width, height); } \
|
||||
void unlock() { p.unlock(); } \
|
||||
\
|
||||
void clear() { p.clear(); } \
|
||||
void refresh() { p.refresh(); } \
|
||||
bool init() { return p.init(); } \
|
||||
void term() { p.term(); } \
|
||||
\
|
||||
Video##Name() : p(*new pVideo##Name) {} \
|
||||
~Video##Name() { delete &p; } \
|
||||
\
|
||||
auto cap(const string& name) -> bool { return p.cap(name); } \
|
||||
auto get(const string& name) -> any { return p.get(name); } \
|
||||
auto set(const string& name, const any& value) -> bool { return p.set(name, value); } \
|
||||
\
|
||||
auto lock(uint32_t*& data, unsigned& pitch, unsigned width, unsigned height) -> bool { return p.lock(data, pitch, width, height); } \
|
||||
auto unlock() -> void { p.unlock(); } \
|
||||
auto clear() -> void { p.clear(); } \
|
||||
auto refresh() -> void { p.refresh(); } \
|
||||
\
|
||||
auto init() -> bool { return p.init(); } \
|
||||
auto term() -> void { p.term(); } \
|
||||
\
|
||||
private: \
|
||||
pVideo##Name& p; \
|
||||
@@ -78,17 +78,18 @@ using namespace nall;
|
||||
|
||||
#define DeclareAudio(Name) \
|
||||
struct Audio##Name : Audio { \
|
||||
bool cap(const string& name) { return p.cap(name); } \
|
||||
any get(const string& name) { return p.get(name); } \
|
||||
bool set(const string& name, const any& value) { return p.set(name, value); } \
|
||||
\
|
||||
void sample(uint16_t left, uint16_t right) { p.sample(left, right); } \
|
||||
void clear() { p.clear(); } \
|
||||
bool init() { return p.init(); } \
|
||||
void term() { p.term(); } \
|
||||
\
|
||||
Audio##Name() : p(*new pAudio##Name) {} \
|
||||
~Audio##Name() { delete &p; } \
|
||||
\
|
||||
auto cap(const string& name) -> bool { return p.cap(name); } \
|
||||
auto get(const string& name) -> any { return p.get(name); } \
|
||||
auto set(const string& name, const any& value) -> bool { return p.set(name, value); } \
|
||||
\
|
||||
auto sample(uint16_t left, uint16_t right) -> void { p.sample(left, right); } \
|
||||
auto clear() -> void { p.clear(); } \
|
||||
\
|
||||
auto init() -> bool { return p.init(); } \
|
||||
auto term() -> void { p.term(); } \
|
||||
\
|
||||
private: \
|
||||
pAudio##Name& p; \
|
||||
@@ -140,9 +141,9 @@ using namespace nall;
|
||||
auto acquire() -> bool { return p.acquire(); } \
|
||||
auto unacquire() -> bool { return p.unacquire(); } \
|
||||
auto acquired() -> bool { return p.acquired(); } \
|
||||
\
|
||||
auto poll() -> vector<shared_pointer<HID::Device>> { return p.poll(); } \
|
||||
auto rumble(uint64_t id, bool enable) -> bool { return p.rumble(id, enable); } \
|
||||
\
|
||||
auto init() -> bool { return p.init(); } \
|
||||
auto term() -> void { p.term(); } \
|
||||
\
|
||||
|
Reference in New Issue
Block a user