mirror of
https://github.com/godotengine/godot-platform-haiku.git
synced 2026-01-01 17:48:23 +03:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0097a4f49c |
27
SCsub
27
SCsub
@@ -1,25 +1,28 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
Import("env")
|
||||
Import('env')
|
||||
|
||||
common_haiku = [
|
||||
"os_haiku.cpp",
|
||||
"context_gl_haiku.cpp",
|
||||
"haiku_application.cpp",
|
||||
"haiku_direct_window.cpp",
|
||||
"haiku_gl_view.cpp",
|
||||
"key_mapping_haiku.cpp",
|
||||
"audio_driver_media_kit.cpp",
|
||||
'os_haiku.cpp',
|
||||
'context_gl_haiku.cpp',
|
||||
'haiku_application.cpp',
|
||||
'haiku_direct_window.cpp',
|
||||
'haiku_gl_view.cpp',
|
||||
'key_mapping_haiku.cpp',
|
||||
'audio_driver_media_kit.cpp'
|
||||
]
|
||||
|
||||
target = env.add_program("#bin/godot", ["godot_haiku.cpp"] + common_haiku)
|
||||
target = env.add_program(
|
||||
'#bin/godot',
|
||||
['godot_haiku.cpp'] + common_haiku
|
||||
)
|
||||
|
||||
command = env.Command("#bin/godot.rsrc", "#platform/haiku/godot.rdef", ["rc -o $TARGET $SOURCE"])
|
||||
command = env.Command('#bin/godot.rsrc', '#platform/haiku/godot.rdef',
|
||||
['rc -o $TARGET $SOURCE'])
|
||||
|
||||
|
||||
def addResourcesAction(target=None, source=None, env=None):
|
||||
return env.Execute("xres -o " + File(target)[0].path + " bin/godot.rsrc")
|
||||
|
||||
return env.Execute('xres -o ' + File(target)[0].path + ' bin/godot.rsrc')
|
||||
|
||||
env.AddPostAction(target, addResourcesAction)
|
||||
env.Depends(target, command)
|
||||
|
||||
@@ -34,16 +34,16 @@
|
||||
|
||||
#include "core/project_settings.h"
|
||||
|
||||
int32_t *AudioDriverMediaKit::samples_in = nullptr;
|
||||
int32_t *AudioDriverMediaKit::samples_in = NULL;
|
||||
|
||||
Error AudioDriverMediaKit::init() {
|
||||
active = false;
|
||||
|
||||
mix_rate = GLOBAL_GET("audio/mix_rate");
|
||||
mix_rate = GLOBAL_DEF_RST("audio/mix_rate", DEFAULT_MIX_RATE);
|
||||
speaker_mode = SPEAKER_MODE_STEREO;
|
||||
channels = 2;
|
||||
|
||||
int latency = GLOBAL_GET("audio/output_latency");
|
||||
int latency = GLOBAL_DEF_RST("audio/output_latency", DEFAULT_OUTPUT_LATENCY);
|
||||
buffer_size = next_power_of_2(latency * mix_rate / 1000);
|
||||
samples_in = memnew_arr(int32_t, buffer_size * channels);
|
||||
|
||||
@@ -59,14 +59,15 @@ Error AudioDriverMediaKit::init() {
|
||||
&format,
|
||||
"godot_sound_server",
|
||||
AudioDriverMediaKit::PlayBuffer,
|
||||
nullptr,
|
||||
NULL,
|
||||
this);
|
||||
|
||||
if (player->InitCheck() != B_OK) {
|
||||
fprintf(stderr, "MediaKit ERR: can not create a BSoundPlayer instance\n");
|
||||
ERR_FAIL_COND_V(player == nullptr, ERR_CANT_OPEN);
|
||||
ERR_FAIL_COND_V(player == NULL, ERR_CANT_OPEN);
|
||||
}
|
||||
|
||||
mutex = Mutex::create();
|
||||
player->Start();
|
||||
|
||||
return OK;
|
||||
@@ -107,14 +108,14 @@ void AudioDriverMediaKit::lock() {
|
||||
if (!mutex)
|
||||
return;
|
||||
|
||||
mutex.lock();
|
||||
mutex->lock();
|
||||
}
|
||||
|
||||
void AudioDriverMediaKit::unlock() {
|
||||
if (!mutex)
|
||||
return;
|
||||
|
||||
mutex.unlock();
|
||||
mutex->unlock();
|
||||
}
|
||||
|
||||
void AudioDriverMediaKit::finish() {
|
||||
@@ -123,10 +124,16 @@ void AudioDriverMediaKit::finish() {
|
||||
if (samples_in) {
|
||||
memdelete_arr(samples_in);
|
||||
};
|
||||
|
||||
if (mutex) {
|
||||
memdelete(mutex);
|
||||
mutex = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
AudioDriverMediaKit::AudioDriverMediaKit() {
|
||||
player = nullptr;
|
||||
mutex = NULL;
|
||||
player = NULL;
|
||||
}
|
||||
|
||||
AudioDriverMediaKit::~AudioDriverMediaKit() {
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
#include <SoundPlayer.h>
|
||||
|
||||
class AudioDriverMediaKit : public AudioDriver {
|
||||
Mutex mutex;
|
||||
Mutex *mutex;
|
||||
|
||||
BSoundPlayer *player;
|
||||
static int32_t *samples_in;
|
||||
|
||||
140
detect.py
140
detect.py
@@ -12,7 +12,7 @@ def get_name():
|
||||
|
||||
def can_build():
|
||||
|
||||
if os.name != "posix" or sys.platform == "darwin":
|
||||
if (os.name != "posix" or sys.platform == "darwin"):
|
||||
return False
|
||||
|
||||
return True
|
||||
@@ -22,40 +22,41 @@ def get_opts():
|
||||
from SCons.Variables import EnumVariable
|
||||
|
||||
return [
|
||||
EnumVariable("debug_symbols", "Add debugging symbols to release builds", "yes", ("yes", "no", "full")),
|
||||
EnumVariable('debug_symbols', 'Add debugging symbols to release builds', 'yes', ('yes', 'no', 'full')),
|
||||
]
|
||||
|
||||
|
||||
def get_flags():
|
||||
|
||||
return []
|
||||
return [
|
||||
]
|
||||
|
||||
|
||||
def configure(env):
|
||||
|
||||
## Build type
|
||||
|
||||
if env["target"] == "release":
|
||||
env.Prepend(CCFLAGS=["-O3"])
|
||||
if env["debug_symbols"] == "yes":
|
||||
env.Prepend(CCFLAGS=["-g1"])
|
||||
if env["debug_symbols"] == "full":
|
||||
env.Prepend(CCFLAGS=["-g2"])
|
||||
if (env["target"] == "release"):
|
||||
env.Prepend(CCFLAGS=['-O3'])
|
||||
if (env["debug_symbols"] == "yes"):
|
||||
env.Prepend(CCFLAGS=['-g1'])
|
||||
if (env["debug_symbols"] == "full"):
|
||||
env.Prepend(CCFLAGS=['-g2'])
|
||||
|
||||
elif env["target"] == "release_debug":
|
||||
env.Prepend(CCFLAGS=["-O2", "-DDEBUG_ENABLED"])
|
||||
if env["debug_symbols"] == "yes":
|
||||
env.Prepend(CCFLAGS=["-g1"])
|
||||
if env["debug_symbols"] == "full":
|
||||
env.Prepend(CCFLAGS=["-g2"])
|
||||
elif (env["target"] == "release_debug"):
|
||||
env.Prepend(CCFLAGS=['-O2', '-DDEBUG_ENABLED'])
|
||||
if (env["debug_symbols"] == "yes"):
|
||||
env.Prepend(CCFLAGS=['-g1'])
|
||||
if (env["debug_symbols"] == "full"):
|
||||
env.Prepend(CCFLAGS=['-g2'])
|
||||
|
||||
elif env["target"] == "debug":
|
||||
env.Prepend(CCFLAGS=["-g3", "-DDEBUG_ENABLED"])
|
||||
elif (env["target"] == "debug"):
|
||||
env.Prepend(CCFLAGS=['-g3', '-DDEBUG_ENABLED', '-DDEBUG_MEMORY_ENABLED'])
|
||||
|
||||
## Architecture
|
||||
|
||||
is64 = sys.maxsize > 2 ** 32
|
||||
if env["bits"] == "default":
|
||||
is64 = sys.maxsize > 2**32
|
||||
if (env["bits"] == "default"):
|
||||
env["bits"] = "64" if is64 else "32"
|
||||
|
||||
## Compiler configuration
|
||||
@@ -65,94 +66,89 @@ def configure(env):
|
||||
|
||||
## Dependencies
|
||||
|
||||
if not env["builtin_libwebp"]:
|
||||
env.ParseConfig("pkg-config libwebp --cflags --libs")
|
||||
if not env['builtin_libwebp']:
|
||||
env.ParseConfig('pkg-config libwebp --cflags --libs')
|
||||
|
||||
# freetype depends on libpng and zlib, so bundling one of them while keeping others
|
||||
# as shared libraries leads to weird issues
|
||||
if env["builtin_freetype"] or env["builtin_libpng"] or env["builtin_zlib"]:
|
||||
env["builtin_freetype"] = True
|
||||
env["builtin_libpng"] = True
|
||||
env["builtin_zlib"] = True
|
||||
if env['builtin_freetype'] or env['builtin_libpng'] or env['builtin_zlib']:
|
||||
env['builtin_freetype'] = True
|
||||
env['builtin_libpng'] = True
|
||||
env['builtin_zlib'] = True
|
||||
|
||||
if not env["builtin_freetype"]:
|
||||
env.ParseConfig("pkg-config freetype2 --cflags --libs")
|
||||
if not env['builtin_freetype']:
|
||||
env.ParseConfig('pkg-config freetype2 --cflags --libs')
|
||||
|
||||
if not env["builtin_libpng"]:
|
||||
env.ParseConfig("pkg-config libpng16 --cflags --libs")
|
||||
if not env['builtin_libpng']:
|
||||
env.ParseConfig('pkg-config libpng16 --cflags --libs')
|
||||
|
||||
if not env["builtin_bullet"]:
|
||||
if not env['builtin_bullet']:
|
||||
# We need at least version 2.88
|
||||
import subprocess
|
||||
|
||||
bullet_version = subprocess.check_output(["pkg-config", "bullet", "--modversion"]).strip()
|
||||
bullet_version = subprocess.check_output(['pkg-config', 'bullet', '--modversion']).strip()
|
||||
if bullet_version < "2.88":
|
||||
# Abort as system bullet was requested but too old
|
||||
print(
|
||||
"Bullet: System version {0} does not match minimal requirements ({1}). Aborting.".format(
|
||||
bullet_version, "2.88"
|
||||
)
|
||||
)
|
||||
print("Bullet: System version {0} does not match minimal requirements ({1}). Aborting.".format(bullet_version, "2.88"))
|
||||
sys.exit(255)
|
||||
env.ParseConfig("pkg-config bullet --cflags --libs")
|
||||
env.ParseConfig('pkg-config bullet --cflags --libs')
|
||||
|
||||
if not env["builtin_enet"]:
|
||||
env.ParseConfig("pkg-config libenet --cflags --libs")
|
||||
if not env['builtin_enet']:
|
||||
env.ParseConfig('pkg-config libenet --cflags --libs')
|
||||
|
||||
if not env["builtin_squish"]:
|
||||
env.ParseConfig("pkg-config libsquish --cflags --libs")
|
||||
if not env['builtin_squish']:
|
||||
env.ParseConfig('pkg-config libsquish --cflags --libs')
|
||||
|
||||
if not env["builtin_zstd"]:
|
||||
env.ParseConfig("pkg-config libzstd --cflags --libs")
|
||||
if not env['builtin_zstd']:
|
||||
env.ParseConfig('pkg-config libzstd --cflags --libs')
|
||||
|
||||
# Sound and video libraries
|
||||
# Keep the order as it triggers chained dependencies (ogg needed by others, etc.)
|
||||
|
||||
if not env["builtin_libtheora"]:
|
||||
env["builtin_libogg"] = False # Needed to link against system libtheora
|
||||
env["builtin_libvorbis"] = False # Needed to link against system libtheora
|
||||
env.ParseConfig("pkg-config theora theoradec --cflags --libs")
|
||||
if not env['builtin_libtheora']:
|
||||
env['builtin_libogg'] = False # Needed to link against system libtheora
|
||||
env['builtin_libvorbis'] = False # Needed to link against system libtheora
|
||||
env.ParseConfig('pkg-config theora theoradec --cflags --libs')
|
||||
|
||||
if not env["builtin_libvpx"]:
|
||||
env.ParseConfig("pkg-config vpx --cflags --libs")
|
||||
if not env['builtin_libvpx']:
|
||||
env.ParseConfig('pkg-config vpx --cflags --libs')
|
||||
|
||||
if not env["builtin_libvorbis"]:
|
||||
env["builtin_libogg"] = False # Needed to link against system libvorbis
|
||||
env.ParseConfig("pkg-config vorbis vorbisfile --cflags --libs")
|
||||
if not env['builtin_libvorbis']:
|
||||
env['builtin_libogg'] = False # Needed to link against system libvorbis
|
||||
env.ParseConfig('pkg-config vorbis vorbisfile --cflags --libs')
|
||||
|
||||
if not env["builtin_opus"]:
|
||||
env["builtin_libogg"] = False # Needed to link against system opus
|
||||
env.ParseConfig("pkg-config opus opusfile --cflags --libs")
|
||||
if not env['builtin_opus']:
|
||||
env['builtin_libogg'] = False # Needed to link against system opus
|
||||
env.ParseConfig('pkg-config opus opusfile --cflags --libs')
|
||||
|
||||
if not env["builtin_libogg"]:
|
||||
env.ParseConfig("pkg-config ogg --cflags --libs")
|
||||
if not env['builtin_libogg']:
|
||||
env.ParseConfig('pkg-config ogg --cflags --libs')
|
||||
|
||||
if env["builtin_libtheora"]:
|
||||
list_of_x86 = ["x86_64", "x86", "i386", "i586"]
|
||||
if env['builtin_libtheora']:
|
||||
list_of_x86 = ['x86_64', 'x86', 'i386', 'i586']
|
||||
if any(platform.machine() in s for s in list_of_x86):
|
||||
env["x86_libtheora_opt_gcc"] = True
|
||||
|
||||
if not env["builtin_wslay"]:
|
||||
env.ParseConfig("pkg-config libwslay --cflags --libs")
|
||||
if not env['builtin_wslay']:
|
||||
env.ParseConfig('pkg-config libwslay --cflags --libs')
|
||||
|
||||
if not env["builtin_mbedtls"]:
|
||||
if not env['builtin_mbedtls']:
|
||||
# mbedTLS does not provide a pkgconfig config yet. See https://github.com/ARMmbed/mbedtls/issues/228
|
||||
env.Append(LIBS=["mbedtls", "mbedcrypto", "mbedx509"])
|
||||
env.Append(LIBS=['mbedtls', 'mbedcrypto', 'mbedx509'])
|
||||
|
||||
if not env["builtin_miniupnpc"]:
|
||||
if not env['builtin_miniupnpc']:
|
||||
# No pkgconfig file so far, hardcode default paths.
|
||||
env.Prepend(CPPPATH=["/system/develop/headers/x86/miniupnpc"])
|
||||
env.Append(LIBS=["miniupnpc"])
|
||||
|
||||
# On Linux wchar_t should be 32-bits
|
||||
# 16-bit library shouldn't be required due to compiler optimisations
|
||||
if not env["builtin_pcre2"]:
|
||||
env.ParseConfig("pkg-config libpcre2-32 --cflags --libs")
|
||||
if not env['builtin_pcre2']:
|
||||
env.ParseConfig('pkg-config libpcre2-32 --cflags --libs')
|
||||
|
||||
## Flags
|
||||
|
||||
env.Prepend(CPPPATH=["#platform/haiku"])
|
||||
env.Append(CPPDEFINES=["UNIX_ENABLED", "OPENGL_ENABLED", "GLES_ENABLED"])
|
||||
env.Append(CPPDEFINES=["MEDIA_KIT_ENABLED"])
|
||||
env.Append(CPPDEFINES=["PTHREAD_NO_RENAME"]) # TODO: enable when we have pthread_setname_np
|
||||
env.Append(LIBS=["be", "game", "media", "network", "bnetapi", "z", "GL"])
|
||||
env.Prepend(CPPPATH=['#platform/haiku'])
|
||||
env.Append(CPPDEFINES=['UNIX_ENABLED', 'OPENGL_ENABLED', 'GLES_ENABLED'])
|
||||
env.Append(CPPDEFINES=['MEDIA_KIT_ENABLED'])
|
||||
env.Append(CPPDEFINES=['PTHREAD_NO_RENAME']) # TODO: enable when we have pthread_setname_np
|
||||
env.Append(LIBS=['be', 'game', 'media', 'network', 'bnetapi', 'z', 'GL'])
|
||||
|
||||
@@ -42,10 +42,10 @@ HaikuDirectWindow::HaikuDirectWindow(BRect p_frame) :
|
||||
last_button_mask = 0;
|
||||
last_key_modifier_state = 0;
|
||||
|
||||
view = nullptr;
|
||||
update_runner = nullptr;
|
||||
input = nullptr;
|
||||
main_loop = nullptr;
|
||||
view = NULL;
|
||||
update_runner = NULL;
|
||||
input = NULL;
|
||||
main_loop = NULL;
|
||||
}
|
||||
|
||||
HaikuDirectWindow::~HaikuDirectWindow() {
|
||||
@@ -74,7 +74,7 @@ void HaikuDirectWindow::SetMainLoop(MainLoop *p_main_loop) {
|
||||
|
||||
bool HaikuDirectWindow::QuitRequested() {
|
||||
StopMessageRunner();
|
||||
main_loop->notification(NOTIFICATION_WM_CLOSE_REQUEST);
|
||||
main_loop->notification(MainLoop::NOTIFICATION_WM_QUIT_REQUEST);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -273,20 +273,18 @@ void HaikuDirectWindow::HandleKeyboardEvent(BMessage *message) {
|
||||
event.instance();
|
||||
GetKeyModifierState(event, modifiers);
|
||||
event->set_pressed(message->what == B_KEY_DOWN);
|
||||
event->set_keycode(KeyMappingHaiku::get_keysym(raw_char, key));
|
||||
event->set_physical_keycode(KeyMappingHaiku::get_keysym(raw_char, key));
|
||||
event->set_scancode(KeyMappingHaiku::get_keysym(raw_char, key));
|
||||
event->set_echo(message->HasInt32("be:key_repeat"));
|
||||
event->set_unicode(0);
|
||||
|
||||
const char *bytes = nullptr;
|
||||
const char *bytes = NULL;
|
||||
if (message->FindString("bytes", &bytes) == B_OK) {
|
||||
event->set_unicode(BUnicodeChar::FromUTF8(&bytes));
|
||||
}
|
||||
|
||||
//make it consistent across platforms.
|
||||
if (event->get_keycode() == KEY_BACKTAB) {
|
||||
event->set_keycode(KEY_TAB);
|
||||
event->set_physical_keycode(KEY_TAB);
|
||||
if (event->get_scancode() == KEY_BACKTAB) {
|
||||
event->set_scancode(KEY_TAB);
|
||||
event->set_shift(true);
|
||||
}
|
||||
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
|
||||
#include <DirectWindow.h>
|
||||
|
||||
#include "core/input/input.h"
|
||||
#include "core/os/os.h"
|
||||
#include "main/input_default.h"
|
||||
|
||||
#include "haiku_gl_view.h"
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#define KEY_MAPPING_HAIKU_H
|
||||
|
||||
class KeyMappingHaiku {
|
||||
KeyMappingHaiku() {}
|
||||
KeyMappingHaiku(){};
|
||||
|
||||
public:
|
||||
static unsigned int get_keysym(int32 raw_char, int32 key);
|
||||
|
||||
58
os_haiku.cpp
58
os_haiku.cpp
@@ -28,13 +28,14 @@
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
|
||||
#include "drivers/gles3/rasterizer_gles3.h"
|
||||
|
||||
#include "os_haiku.h"
|
||||
|
||||
#include "drivers/gles2/rasterizer_gles2.h"
|
||||
#include "main/main.h"
|
||||
#include "servers/physics_3d/physics_server_3d_sw.h"
|
||||
#include "servers/rendering/rendering_server_raster.h"
|
||||
#include "servers/rendering/rendering_server_wrap_mt.h"
|
||||
#include "servers/physics/physics_server_sw.h"
|
||||
#include "servers/visual/visual_server_raster.h"
|
||||
#include "servers/visual/visual_server_wrap_mt.h"
|
||||
|
||||
#include <Screen.h>
|
||||
|
||||
@@ -77,7 +78,7 @@ int OS_Haiku::get_video_driver_count() const {
|
||||
}
|
||||
|
||||
const char *OS_Haiku::get_video_driver_name(int p_driver) const {
|
||||
return "GLES2";
|
||||
return "GLES3";
|
||||
}
|
||||
|
||||
int OS_Haiku::get_current_video_driver() const {
|
||||
@@ -85,7 +86,7 @@ int OS_Haiku::get_current_video_driver() const {
|
||||
}
|
||||
|
||||
Error OS_Haiku::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) {
|
||||
main_loop = nullptr;
|
||||
main_loop = NULL;
|
||||
current_video_mode = p_desired;
|
||||
|
||||
app = new HaikuApplication();
|
||||
@@ -111,18 +112,18 @@ Error OS_Haiku::initialize(const VideoMode &p_desired, int p_video_driver, int p
|
||||
context_gl->initialize();
|
||||
context_gl->make_current();
|
||||
context_gl->set_use_vsync(current_video_mode.use_vsync);
|
||||
// FIXME: That's not how the rasterizer setup should happen.
|
||||
RasterizerGLES2::register_config();
|
||||
RasterizerGLES2::make_current();
|
||||
RasterizerGLES3::register_config();
|
||||
RasterizerGLES3::make_current();
|
||||
|
||||
#endif
|
||||
|
||||
rendering_server = memnew(RenderingServerRaster);
|
||||
visual_server = memnew(VisualServerRaster);
|
||||
// FIXME: Reimplement threaded rendering
|
||||
if (get_render_thread_mode() != RENDER_THREAD_UNSAFE) {
|
||||
rendering_server = memnew(RenderingServerWrapMT(rendering_server, false));
|
||||
visual_server = memnew(VisualServerWrapMT(visual_server, false));
|
||||
}
|
||||
|
||||
ERR_FAIL_COND_V(!rendering_server, ERR_UNAVAILABLE);
|
||||
ERR_FAIL_COND_V(!visual_server, ERR_UNAVAILABLE);
|
||||
|
||||
video_driver_index = p_video_driver;
|
||||
|
||||
@@ -130,7 +131,7 @@ Error OS_Haiku::initialize(const VideoMode &p_desired, int p_video_driver, int p
|
||||
window->SetInput(input);
|
||||
|
||||
window->Show();
|
||||
rendering_server->init();
|
||||
visual_server->init();
|
||||
|
||||
AudioDriverManager::initialize(p_audio_driver);
|
||||
|
||||
@@ -142,10 +143,10 @@ void OS_Haiku::finalize() {
|
||||
memdelete(main_loop);
|
||||
}
|
||||
|
||||
main_loop = nullptr;
|
||||
main_loop = NULL;
|
||||
|
||||
rendering_server->finish();
|
||||
memdelete(rendering_server);
|
||||
visual_server->finish();
|
||||
memdelete(visual_server);
|
||||
|
||||
memdelete(input);
|
||||
|
||||
@@ -169,8 +170,8 @@ void OS_Haiku::delete_main_loop() {
|
||||
memdelete(main_loop);
|
||||
}
|
||||
|
||||
main_loop = nullptr;
|
||||
window->SetMainLoop(nullptr);
|
||||
main_loop = NULL;
|
||||
window->SetMainLoop(NULL);
|
||||
}
|
||||
|
||||
void OS_Haiku::release_rendering_thread() {
|
||||
@@ -267,7 +268,7 @@ void OS_Haiku::set_window_position(const Point2 &p_position) {
|
||||
void OS_Haiku::set_window_fullscreen(bool p_enabled) {
|
||||
window->SetFullScreen(p_enabled);
|
||||
current_video_mode.fullscreen = p_enabled;
|
||||
rendering_server->init();
|
||||
visual_server->init();
|
||||
}
|
||||
|
||||
bool OS_Haiku::is_window_fullscreen() const {
|
||||
@@ -324,10 +325,12 @@ String OS_Haiku::get_executable_path() const {
|
||||
}
|
||||
|
||||
bool OS_Haiku::_check_internal_feature_support(const String &p_feature) {
|
||||
|
||||
return p_feature == "pc";
|
||||
}
|
||||
|
||||
String OS_Haiku::get_config_path() const {
|
||||
|
||||
if (has_environment("XDG_CONFIG_HOME")) {
|
||||
return get_environment("XDG_CONFIG_HOME");
|
||||
} else if (has_environment("HOME")) {
|
||||
@@ -338,6 +341,7 @@ String OS_Haiku::get_config_path() const {
|
||||
}
|
||||
|
||||
String OS_Haiku::get_data_path() const {
|
||||
|
||||
if (has_environment("XDG_DATA_HOME")) {
|
||||
return get_environment("XDG_DATA_HOME");
|
||||
} else if (has_environment("HOME")) {
|
||||
@@ -348,6 +352,7 @@ String OS_Haiku::get_data_path() const {
|
||||
}
|
||||
|
||||
String OS_Haiku::get_cache_path() const {
|
||||
|
||||
if (has_environment("XDG_CACHE_HOME")) {
|
||||
return get_environment("XDG_CACHE_HOME");
|
||||
} else if (has_environment("HOME")) {
|
||||
@@ -356,3 +361,18 @@ String OS_Haiku::get_cache_path() const {
|
||||
return get_config_path();
|
||||
}
|
||||
}
|
||||
|
||||
OS::PowerState OS_Haiku::get_power_state() {
|
||||
WARN_PRINT("Power management is not implemented on this platform, defaulting to POWERSTATE_UNKNOWN");
|
||||
return OS::POWERSTATE_UNKNOWN;
|
||||
}
|
||||
|
||||
int OS_Haiku::get_power_seconds_left() {
|
||||
WARN_PRINT("Power management is not implemented on this platform, defaulting to -1");
|
||||
return -1;
|
||||
}
|
||||
|
||||
int OS_Haiku::get_power_percent_left() {
|
||||
WARN_PRINT("Power management is not implemented on this platform, defaulting to -1");
|
||||
return -1;
|
||||
}
|
||||
|
||||
10
os_haiku.h
10
os_haiku.h
@@ -33,12 +33,12 @@
|
||||
|
||||
#include "audio_driver_media_kit.h"
|
||||
#include "context_gl_haiku.h"
|
||||
#include "core/input/input.h"
|
||||
#include "drivers/unix/os_unix.h"
|
||||
#include "haiku_application.h"
|
||||
#include "haiku_direct_window.h"
|
||||
#include "main/input_default.h"
|
||||
#include "servers/audio_server.h"
|
||||
#include "servers/rendering_server.h"
|
||||
#include "servers/visual_server.h"
|
||||
|
||||
class OS_Haiku : public OS_Unix {
|
||||
private:
|
||||
@@ -46,7 +46,7 @@ private:
|
||||
HaikuDirectWindow *window;
|
||||
MainLoop *main_loop;
|
||||
InputDefault *input;
|
||||
RenderingServer *rendering_server;
|
||||
VisualServer *visual_server;
|
||||
VideoMode current_video_mode;
|
||||
int video_driver_index;
|
||||
|
||||
@@ -113,6 +113,10 @@ public:
|
||||
virtual void get_fullscreen_mode_list(List<VideoMode> *p_list, int p_screen = 0) const;
|
||||
virtual String get_executable_path() const;
|
||||
|
||||
virtual OS::PowerState get_power_state();
|
||||
virtual int get_power_seconds_left();
|
||||
virtual int get_power_percent_left();
|
||||
|
||||
virtual bool _check_internal_feature_support(const String &p_feature);
|
||||
|
||||
virtual String get_config_path() const;
|
||||
|
||||
@@ -33,4 +33,5 @@
|
||||
// for ifaddrs.h needed in drivers/unix/ip_unix.cpp
|
||||
#define _BSD_SOURCE 1
|
||||
|
||||
#define GLES3_INCLUDE_H "thirdparty/glad/glad/glad.h"
|
||||
#define GLES2_INCLUDE_H "thirdparty/glad/glad/glad.h"
|
||||
|
||||
Reference in New Issue
Block a user