From f72f2a57dfd33f6df0e722b9bd306a82974a5f1c Mon Sep 17 00:00:00 2001 From: Relintai Date: Thu, 18 Jan 2024 01:43:47 +0100 Subject: [PATCH] Fixed build on windows + mingw. --- .gitignore | 1 + compile_windows.sh | 141 ++++++++++++++++++++++++++++++++++++ sfw/core/dir_access.cpp | 138 +++++++++++++++++------------------ sfw/core/dir_access.h | 1 + sfw/core/file_access.cpp | 52 ++++++------- sfw/core/file_access.h | 4 + sfw/core/inet_address.cpp | 0 sfw/core/inet_address.h | 2 +- sfw/core/sfw_time.cpp | 6 ++ sfw/core/socket.cpp | 0 sfw/core/socket.h | 0 sfw/render_core/3rd_glfw3.h | 46 ++++++------ sfw/render_core/image.cpp | 4 + 13 files changed, 273 insertions(+), 122 deletions(-) create mode 100644 compile_windows.sh mode change 100755 => 100644 sfw/core/inet_address.cpp mode change 100755 => 100644 sfw/core/inet_address.h mode change 100755 => 100644 sfw/core/socket.cpp mode change 100755 => 100644 sfw/core/socket.h diff --git a/.gitignore b/.gitignore index 9cd14cc..82b163b 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,5 @@ compile_commands.json *.o game +game.exe diff --git a/compile_windows.sh b/compile_windows.sh new file mode 100644 index 0000000..666a10a --- /dev/null +++ b/compile_windows.sh @@ -0,0 +1,141 @@ + + +#clang++ main.cpp -Wall -o3 -o ./bin/game -Ilibs/SDL2-linux/include -Llibs/SDL2-linux/lib -lSDL2 -lSDL2main + +#g++ main.cpp -Wall -o3 -o ./bin/game -Ilibs/SDL2-linux/include -Llibs/SDL2-linux/lib -lSDL2 -lSDL2main + +#g++ main.cpp shader.cpp material.cpp mesh.cpp mesh_instance.cpp mesh_utils.cpp texture.cpp camera.cpp render_core.cpp scene.cpp game_scene.cpp object_2d.cpp tile_map.cpp sprite.cpp \ +# -g -Wall -o3 -o ./bin/game $(pkg-config --cflags --libs sdl2 glew) + +#g++ -Wall -fexceptions -I/usr/include/SDL2 -D_REENTRANT -g -Isfw -c sfw/core/aabb.cpp -o sfw/core/aabb.o + + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/aabb.cpp -o sfw/core/aabb.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/basis.cpp -o sfw/core/basis.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/color.cpp -o sfw/core/color.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/face3.cpp -o sfw/core/face3.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/logger.cpp -o sfw/core/logger.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/math_funcs.cpp -o sfw/core/math_funcs.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/memory.cpp -o sfw/core/memory.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/pcg.cpp -o sfw/core/pcg.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/plane.cpp -o sfw/core/plane.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/projection.cpp -o sfw/core/projection.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/quaternion.cpp -o sfw/core/quaternion.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/random_pcg.cpp -o sfw/core/random_pcg.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/rect2.cpp -o sfw/core/rect2.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/rect2i.cpp -o sfw/core/rect2i.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/safe_refcount.cpp -o sfw/core/safe_refcount.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/transform_2d.cpp -o sfw/core/transform_2d.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/transform.cpp -o sfw/core/transform.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/ustring.cpp -o sfw/core/ustring.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/string_name.cpp -o sfw/core/string_name.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/vector2.cpp -o sfw/core/vector2.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/vector2i.cpp -o sfw/core/vector2i.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/vector3.cpp -o sfw/core/vector3.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/vector3i.cpp -o sfw/core/vector3i.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/vector4.cpp -o sfw/core/vector4.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/vector4i.cpp -o sfw/core/vector4i.o + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/file_access.cpp -o sfw/core/file_access.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/dir_access.cpp -o sfw/core/dir_access.o + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/pool_vector.cpp -o sfw/core/pool_vector.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/pool_allocator.cpp -o sfw/core/pool_allocator.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/mutex.cpp -o sfw/core/mutex.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/sfw_time.cpp -o sfw/core/SFWTime.o + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/core/sfw_core.cpp -o sfw/core/sfw_core.o + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/object/object.cpp -o sfw/object/object.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/object/reference.cpp -o sfw/object/reference.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/object/core_string_names.cpp -o sfw/object/core_string_names.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/object/variant.cpp -o sfw/object/variant.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/object/variant_op.cpp -o sfw/object/variant_op.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/object/psignal.cpp -o sfw/object/psignal.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/object/array.cpp -o sfw/object/array.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/object/dictionary.cpp -o sfw/object/dictionary.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/object/ref_ptr.cpp -o sfw/object/ref_ptr.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/object/resource.cpp -o sfw/object/resource.o + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/application.cpp -o sfw/render_core/application.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/scene.cpp -o sfw/render_core/scene.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/app_window.cpp -o sfw/render_core/window.o + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/shader.cpp -o sfw/render_core/shader.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/material.cpp -o sfw/render_core/material.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/mesh.cpp -o sfw/render_core/mesh.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/mesh_utils.cpp -o sfw/render_core/mesh_utils.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/texture.cpp -o sfw/render_core/texture.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/image.cpp -o sfw/render_core/image.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/render_state.cpp -o sfw/render_core/render_state.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/keyboard.cpp -o sfw/render_core/keyboard.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/input_event.cpp -o sfw/render_core/input_event.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/input_map.cpp -o sfw/render_core/input_map.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/input.cpp -o sfw/render_core/input.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/shortcut.cpp -o sfw/render_core/shortcut.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/font.cpp -o sfw/render_core/font.o + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/color_material_2d.cpp -o sfw/render_core/color_material_2d.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/color_material.cpp -o sfw/render_core/color_material.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/colored_material.cpp -o sfw/render_core/colored_material.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/font_material.cpp -o sfw/render_core/font_material.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/texture_material_2d.cpp -o sfw/render_core/texture_material_2d.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/texture_material.cpp -o sfw/render_core/texture_material.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/transparent_texture_material.cpp -o sfw/render_core/transparent_texture_material.o + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_immediate/renderer.cpp -o sfw/render_immediate/renderer.o + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/camera_3d.cpp -o sfw/render_objects/camera_3d.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/object_3d.cpp -o sfw/render_objects/object_3d.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/mesh_instance_3d.cpp -o sfw/render_objects/mesh_instance_3d.o + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/camera_2d.cpp -o sfw/render_objects/camera_2d.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/mesh_instance_2d.cpp -o sfw/render_objects/mesh_instance_2d.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/object_2d.cpp -o sfw/render_objects/object_2d.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/sprite.cpp -o sfw/render_objects/sprite.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/tile_map.cpp -o sfw/render_objects/tile_map.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/text_2d.cpp -o sfw/render_objects/text_2d.o + +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/game_scene.cpp -o sfw/game_scene.o +ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/main.cpp -o sfw/main.o + + +ccache g++ -Wall \ + -D_REENTRANT -g sfw/core/aabb.o sfw/core/basis.o sfw/core/color.o \ + sfw/core/face3.o sfw/core/logger.o sfw/core/math_funcs.o \ + sfw/core/memory.o sfw/core/pcg.o sfw/core/plane.o sfw/core/projection.o sfw/core/quaternion.o sfw/core/random_pcg.o \ + sfw/core/rect2.o sfw/core/rect2i.o sfw/core/safe_refcount.o sfw/core/transform_2d.o sfw/core/transform.o \ + sfw/core/ustring.o sfw/core/string_name.o \ + sfw/core/vector2.o sfw/core/vector2i.o sfw/core/vector3.o \ + sfw/core/vector3i.o sfw/core/vector4.o sfw/core/vector4i.o \ + sfw/core/pool_vector.o sfw/core/pool_allocator.o sfw/core/mutex.o sfw/core/SFWTime.o \ + sfw/core/dir_access.o sfw/core/file_access.o \ + sfw/core/sfw_core.o \ + sfw/object/object.o sfw/object/reference.o sfw/object/core_string_names.o \ + sfw/object/variant.o sfw/object/variant_op.o sfw/object/psignal.o \ + sfw/object/array.o sfw/object/dictionary.o sfw/object/ref_ptr.o \ + sfw/object/resource.o \ + sfw/render_core/image.o sfw/render_core/render_state.o \ + sfw/render_core/application.o sfw/render_core/scene.o sfw/render_core/window.o \ + sfw/render_core/shader.o sfw/render_core/material.o sfw/render_core/mesh.o \ + sfw/render_core/mesh_utils.o sfw/render_core/texture.o \ + sfw/render_core/input_event.o sfw/render_core/input_map.o \ + sfw/render_core/input.o sfw/render_core/shortcut.o \ + sfw/render_core/keyboard.o sfw/render_core/font.o \ + sfw/render_core/color_material_2d.o sfw/render_core/color_material.o \ + sfw/render_core/colored_material.o sfw/render_core/font_material.o \ + sfw/render_core/texture_material_2d.o sfw/render_core/texture_material.o \ + sfw/render_core/transparent_texture_material.o \ + sfw/render_immediate/renderer.o \ + sfw/render_objects/camera_3d.o sfw/render_objects/object_3d.o sfw/render_objects/mesh_instance_3d.o \ + sfw/render_objects/object_2d.o \ + sfw/render_objects/sprite.o sfw/render_objects/tile_map.o \ + sfw/render_objects/camera_2d.o sfw/render_objects/mesh_instance_2d.o \ + sfw/render_objects/text_2d.o \ + sfw/game_scene.o sfw/main.o \ + -lm -lpthread -lwinmm -lopengl32 -lkernel32 -lole32 -loleaut32 -luser32 \ + -lgdi32 -lIPHLPAPI -lShlwapi -lwsock32 -lWs2_32 -lshell32 -ladvapi32 -ldinput8 -ldxguid \ + -limm32 -lbcrypt -lAvrt -ldwmapi \ + -o game + +#export args="-lm -ldl -lpthread -lX11 -w -Iengine/ $args" \ No newline at end of file diff --git a/sfw/core/dir_access.cpp b/sfw/core/dir_access.cpp index 4104bb6..7266752 100644 --- a/sfw/core/dir_access.cpp +++ b/sfw/core/dir_access.cpp @@ -78,9 +78,10 @@ struct DirAccessWindowsPrivate { // CreateFolderAsync -Error DirAccessWindows::list_dir_begin() { +Error DirAccess::list_dir_begin(bool skip_specials) { _cisdir = false; _cishidden = false; + _skip_specials = skip_specials; list_dir_end(); p->h = FindFirstFileExW((LPCWSTR)(String(current_dir + "\\*").utf16().get_data()), FindExInfoStandard, &p->fu, FindExSearchNameMatch, NULL, 0); @@ -88,7 +89,7 @@ Error DirAccessWindows::list_dir_begin() { return (p->h == INVALID_HANDLE_VALUE) ? ERR_CANT_OPEN : OK; } -String DirAccessWindows::get_next() { +String DirAccess::get_next() { if (p->h == INVALID_HANDLE_VALUE) { return ""; } @@ -106,24 +107,32 @@ String DirAccessWindows::get_next() { return name; } -bool DirAccessWindows::current_is_dir() const { +bool DirAccess::current_is_dir() const { return _cisdir; } -bool DirAccessWindows::current_is_hidden() const { +bool DirAccess::current_is_hidden() const { return _cishidden; } -void DirAccessWindows::list_dir_end() { +bool DirAccess::current_is_file() const { + return !_cisdir; +} + +bool DirAccess::current_is_special_dir() const { + return _cisspecial; +} + +void DirAccess::list_dir_end() { if (p->h != INVALID_HANDLE_VALUE) { FindClose(p->h); p->h = INVALID_HANDLE_VALUE; } } -int DirAccessWindows::get_drive_count() { +int DirAccess::get_drive_count() { return drive_count; } -String DirAccessWindows::get_drive(int p_drive) { +String DirAccess::get_drive(int p_drive) { if (p_drive < 0 || p_drive >= drive_count) { return ""; } @@ -131,11 +140,9 @@ String DirAccessWindows::get_drive(int p_drive) { return String::chr(drives[p_drive]) + ":"; } -Error DirAccessWindows::change_dir(String p_dir) { +Error DirAccess::change_dir(String p_dir) { GLOBAL_LOCK_FUNCTION - p_dir = fix_path(p_dir); - WCHAR real_current_dir_name[2048]; GetCurrentDirectoryW(2048, real_current_dir_name); String prev_dir = String::utf16((const char16_t *)real_current_dir_name); @@ -143,7 +150,7 @@ Error DirAccessWindows::change_dir(String p_dir) { SetCurrentDirectoryW((LPCWSTR)(current_dir.utf16().get_data())); bool worked = (SetCurrentDirectoryW((LPCWSTR)(p_dir.utf16().get_data())) != 0); - String base = _get_root_path(); + String base; if (base != "") { GetCurrentDirectoryW(2048, real_current_dir_name); String new_dir = String::utf16((const char16_t *)real_current_dir_name).replace("\\", "/"); @@ -163,11 +170,9 @@ Error DirAccessWindows::change_dir(String p_dir) { return worked ? OK : ERR_INVALID_PARAMETER; } -Error DirAccessWindows::make_dir(String p_dir) { +Error DirAccess::make_dir(String p_dir) { GLOBAL_LOCK_FUNCTION - p_dir = fix_path(p_dir); - if (p_dir.is_rel_path()) { p_dir = current_dir.plus_file(p_dir); } @@ -197,42 +202,38 @@ Error DirAccessWindows::make_dir(String p_dir) { return ERR_CANT_CREATE; } -String DirAccessWindows::get_current_dir() { - String base = _get_root_path(); +String DirAccess::get_current_dir() { + String base; if (base != "") { String bd = current_dir.replace("\\", "/").replace_first(base, ""); if (bd.begins_with("/")) { - return _get_root_string() + bd.substr(1, bd.length()); + return bd.substr(1, bd.length()); } else { - return _get_root_string() + bd; + return bd; } } return current_dir; } -String DirAccessWindows::get_current_dir_without_drive() { +String DirAccess::get_current_dir_without_drive() { String dir = get_current_dir(); - if (_get_root_string() == "") { - int p = current_dir.find(":"); - if (p != -1) { - dir = dir.right(p + 1); - } + int p = current_dir.find(":"); + if (p != -1) { + dir = dir.right(p + 1); } return dir; } -bool DirAccessWindows::file_exists(String p_file) { +bool DirAccess::file_exists(String p_file) { GLOBAL_LOCK_FUNCTION if (!p_file.is_abs_path()) { p_file = get_current_dir().plus_file(p_file); } - p_file = fix_path(p_file); - DWORD fileAttr; fileAttr = GetFileAttributesW((LPCWSTR)(p_file.utf16().get_data())); @@ -243,13 +244,12 @@ bool DirAccessWindows::file_exists(String p_file) { return !(fileAttr & FILE_ATTRIBUTE_DIRECTORY); } -bool DirAccessWindows::dir_exists(String p_dir) { +bool DirAccess::dir_exists(String p_dir) { GLOBAL_LOCK_FUNCTION - if (p_dir.is_rel_path()) + if (p_dir.is_rel_path()) { p_dir = get_current_dir().plus_file(p_dir); - - p_dir = fix_path(p_dir); + } DWORD fileAttr; @@ -261,19 +261,15 @@ bool DirAccessWindows::dir_exists(String p_dir) { return (fileAttr & FILE_ATTRIBUTE_DIRECTORY); } -Error DirAccessWindows::rename(String p_path, String p_new_path) { +Error DirAccess::rename(String p_path, String p_new_path) { if (p_path.is_rel_path()) { p_path = get_current_dir().plus_file(p_path); } - p_path = fix_path(p_path); - if (p_new_path.is_rel_path()) { p_new_path = get_current_dir().plus_file(p_new_path); } - p_new_path = fix_path(p_new_path); - // If we're only changing file name case we need to do a little juggling if (p_path.to_lower() == p_new_path.to_lower()) { if (dir_exists(p_path)) { @@ -284,7 +280,7 @@ Error DirAccessWindows::rename(String p_path, String p_new_path) { // The path is a file; juggle WCHAR tmpfile[MAX_PATH]; - if (!GetTempFileNameW((LPCWSTR)(fix_path(get_current_dir()).utf16().get_data()), NULL, 0, tmpfile)) { + if (!GetTempFileNameW((LPCWSTR)(get_current_dir().utf16().get_data()), NULL, 0, tmpfile)) { return FAILED; } @@ -306,13 +302,11 @@ Error DirAccessWindows::rename(String p_path, String p_new_path) { } } -Error DirAccessWindows::remove(String p_path) { +Error DirAccess::remove(String p_path) { if (p_path.is_rel_path()) { p_path = get_current_dir().plus_file(p_path); } - p_path = fix_path(p_path); - DWORD fileAttr; fileAttr = GetFileAttributesW((LPCWSTR)(p_path.utf16().get_data())); @@ -328,7 +322,7 @@ Error DirAccessWindows::remove(String p_path) { } /* -FileType DirAccessWindows::get_file_type(const String& p_file) const { +FileType DirAccess::get_file_type(const String& p_file) const { WCHAR real_current_dir_name[2048]; GetCurrentDirectoryW(2048, real_current_dir_name); String prev_dir = Strong::utf16((const char16_t *)real_current_dir_name); @@ -351,7 +345,7 @@ FileType DirAccessWindows::get_file_type(const String& p_file) const { } */ -uint64_t DirAccessWindows::get_space_left() { +uint64_t DirAccess::get_space_left() { uint64_t bytes = 0; if (!GetDiskFreeSpaceEx(NULL, (PULARGE_INTEGER)&bytes, NULL, NULL)) { @@ -362,8 +356,8 @@ uint64_t DirAccessWindows::get_space_left() { return bytes; } -String DirAccessWindows::get_filesystem_type() const { - String path = fix_path(const_cast(this)->get_current_dir()); +String DirAccess::get_filesystem_type() const { + String path = const_cast(this)->get_current_dir(); if (path.is_network_share_path()) { return "Network Share"; @@ -393,7 +387,27 @@ String DirAccessWindows::get_filesystem_type() const { ERR_FAIL_V(""); } -DirAccessWindows::DirAccessWindows() { +int DirAccess::get_current_drive() { + String path = get_current_dir().to_lower(); + for (int i = 0; i < get_drive_count(); i++) { + String d = get_drive(i).to_lower(); + if (path.begins_with(d)) { + return i; + } + } + + return 0; +} + +bool DirAccess::drives_are_shortcuts() { + return false; +} + +uint64_t DirAccess::get_modified_time(String p_file) { + return 0; +}; + +DirAccess::DirAccess() { p = memnew(DirAccessWindowsPrivate); p->h = INVALID_HANDLE_VALUE; current_dir = "."; @@ -420,7 +434,7 @@ DirAccessWindows::DirAccessWindows() { #endif } -DirAccessWindows::~DirAccessWindows() { +DirAccess::~DirAccess() { list_dir_end(); memdelete(p); @@ -836,6 +850,10 @@ bool DirAccess::is_hidden(const String &p_name) { return p_name != "." && p_name != ".." && p_name.begins_with("."); } +String DirAccess::get_current_dir_without_drive() { + return get_current_dir(); +} + DirAccess::DirAccess() { dir_stream = NULL; _cisdir = false; @@ -864,28 +882,6 @@ DirAccess::~DirAccess() { #endif -/* -int DirAccess::get_current_drive() { - String path = get_current_dir().to_lower(); - for (int i = 0; i < get_drive_count(); i++) { - String d = get_drive(i).to_lower(); - if (path.begins_with(d)) { - return i; - } - } - - return 0; -} - -bool DirAccess::drives_are_shortcuts() { - return false; -} -*/ - -String DirAccess::get_current_dir_without_drive() { - return get_current_dir(); -} - static Error _erase_recursive(DirAccess *da) { List dirs; List files; @@ -960,11 +956,7 @@ Error DirAccess::make_dir_recursive(String p_dir) { String base; - if (full_dir.begins_with("res://")) { - base = "res://"; - } else if (full_dir.begins_with("user://")) { - base = "user://"; - } else if (full_dir.is_network_share_path()) { + if (full_dir.is_network_share_path()) { int pos = full_dir.find("/", 2); ERR_FAIL_COND_V(pos < 0, ERR_INVALID_PARAMETER); pos = full_dir.find("/", pos + 1); diff --git a/sfw/core/dir_access.h b/sfw/core/dir_access.h index 59a3729..7b3df49 100644 --- a/sfw/core/dir_access.h +++ b/sfw/core/dir_access.h @@ -101,6 +101,7 @@ protected: bool _cisdir; bool _cishidden; + bool _cisspecial; #else String current_dir; DIR *dir_stream; diff --git a/sfw/core/file_access.cpp b/sfw/core/file_access.cpp index ac01961..57924db 100644 --- a/sfw/core/file_access.cpp +++ b/sfw/core/file_access.cpp @@ -29,6 +29,8 @@ #define S_ISREG(m) ((m)&_S_IFREG) #endif +#include "core/sfw_time.h" + #else #include @@ -57,7 +59,7 @@ #if defined(_WIN64) || defined(_WIN32) -void FileAccessWindows::check_errors() const { +void FileAccess::check_errors() const { ERR_FAIL_COND(!f); if (feof(f)) { @@ -65,7 +67,7 @@ void FileAccessWindows::check_errors() const { } } -Error FileAccessWindows::_open(const String &p_path, int p_mode_flags) { +Error FileAccess::_open(const String &p_path, int p_mode_flags) { path_src = p_path; path = fix_path(p_path); @@ -145,7 +147,7 @@ Error FileAccessWindows::_open(const String &p_path, int p_mode_flags) { } } -void FileAccessWindows::close() { +void FileAccess::close() { if (!f) { return; } @@ -178,7 +180,7 @@ void FileAccessWindows::close() { } if (rename_error) { attempts--; - OS::get_singleton()->delay_usec(100000); // wait 100msec and try again + SFWTime::sleep_us(100000); // wait 100msec and try again } } @@ -194,19 +196,19 @@ void FileAccessWindows::close() { } } -String FileAccessWindows::get_path() const { +String FileAccess::get_path() const { return path_src; } -String FileAccessWindows::get_path_absolute() const { +String FileAccess::get_path_absolute() const { return path; } -bool FileAccessWindows::is_open() const { +bool FileAccess::is_open() const { return (f != NULL); } -void FileAccessWindows::seek(uint64_t p_position) { +void FileAccess::seek(uint64_t p_position) { ERR_FAIL_COND(!f); last_error = OK; @@ -218,7 +220,7 @@ void FileAccessWindows::seek(uint64_t p_position) { prev_op = 0; } -void FileAccessWindows::seek_end(int64_t p_position) { +void FileAccess::seek_end(int64_t p_position) { ERR_FAIL_COND(!f); if (_fseeki64(f, p_position, SEEK_END)) { @@ -228,7 +230,7 @@ void FileAccessWindows::seek_end(int64_t p_position) { prev_op = 0; } -uint64_t FileAccessWindows::get_position() const { +uint64_t FileAccess::get_position() const { int64_t aux_position = _ftelli64(f); if (aux_position < 0) { @@ -238,7 +240,7 @@ uint64_t FileAccessWindows::get_position() const { return aux_position; } -uint64_t FileAccessWindows::get_len() const { +uint64_t FileAccess::get_len() const { ERR_FAIL_COND_V(!f, 0); uint64_t pos = get_position(); @@ -249,12 +251,12 @@ uint64_t FileAccessWindows::get_len() const { return size; } -bool FileAccessWindows::eof_reached() const { +bool FileAccess::eof_reached() const { check_errors(); return last_error == ERR_FILE_EOF; } -uint8_t FileAccessWindows::get_8() const { +uint8_t FileAccess::get_8() const { ERR_FAIL_COND_V(!f, 0); if (flags == READ_WRITE || flags == WRITE_READ) { if (prev_op == WRITE) { @@ -271,7 +273,7 @@ uint8_t FileAccessWindows::get_8() const { return b; } -uint64_t FileAccessWindows::get_buffer(uint8_t *p_dst, uint64_t p_length) const { +uint64_t FileAccess::get_buffer(uint8_t *p_dst, uint64_t p_length) const { ERR_FAIL_COND_V(!p_dst && p_length > 0, -1); ERR_FAIL_COND_V(!f, -1); @@ -286,11 +288,11 @@ uint64_t FileAccessWindows::get_buffer(uint8_t *p_dst, uint64_t p_length) const return read; }; -Error FileAccessWindows::get_error() const { +Error FileAccess::get_error() const { return last_error; } -void FileAccessWindows::flush() { +void FileAccess::flush() { ERR_FAIL_COND(!f); fflush(f); @@ -299,7 +301,7 @@ void FileAccessWindows::flush() { } } -void FileAccessWindows::store_8(uint8_t p_dest) { +void FileAccess::store_8(uint8_t p_dest) { ERR_FAIL_COND(!f); if (flags == READ_WRITE || flags == WRITE_READ) { if (prev_op == READ) { @@ -312,7 +314,7 @@ void FileAccessWindows::store_8(uint8_t p_dest) { fwrite(&p_dest, 1, 1, f); } -void FileAccessWindows::store_buffer(const uint8_t *p_src, uint64_t p_length) { +void FileAccess::store_buffer(const uint8_t *p_src, uint64_t p_length) { ERR_FAIL_COND(!f); ERR_FAIL_COND(!p_src && p_length > 0); @@ -327,7 +329,7 @@ void FileAccessWindows::store_buffer(const uint8_t *p_src, uint64_t p_length) { ERR_FAIL_COND(fwrite(p_src, 1, p_length, f) != (size_t)p_length); } -bool FileAccessWindows::file_exists(const String &p_name) { +bool FileAccess::file_exists(const String &p_name) { String filename = fix_path(p_name); FILE *g = _wfsopen((LPCWSTR)(filename.utf16().get_data()), L"rb", _SH_DENYNO); @@ -340,7 +342,7 @@ bool FileAccessWindows::file_exists(const String &p_name) { } } -uint64_t FileAccessWindows::_get_modified_time(const String &p_file) { +uint64_t FileAccess::_get_modified_time(const String &p_file) { String file = fix_path(p_file); if (file.ends_with("/") && file != "/") file = file.substr(0, file.length() - 1); @@ -351,26 +353,26 @@ uint64_t FileAccessWindows::_get_modified_time(const String &p_file) { if (rv == 0) { return st.st_mtime; } else { - print_verbose("Failed to get modified time for: " + p_file + ""); + LOG_TRACE("Failed to get modified time for: " + p_file + ""); return 0; } } -uint32_t FileAccessWindows::_get_unix_permissions(const String &p_file) { +uint32_t FileAccess::_get_unix_permissions(const String &p_file) { return 0; } -Error FileAccessWindows::_set_unix_permissions(const String &p_file, uint32_t p_permissions) { +Error FileAccess::_set_unix_permissions(const String &p_file, uint32_t p_permissions) { return ERR_UNAVAILABLE; } -FileAccessWindows::FileAccessWindows() : +FileAccess::FileAccess() : f(NULL), flags(0), prev_op(0), last_error(OK) { } -FileAccessWindows::~FileAccessWindows() { +FileAccess::~FileAccess() { close(); } diff --git a/sfw/core/file_access.h b/sfw/core/file_access.h index 4648ce7..57eccef 100644 --- a/sfw/core/file_access.h +++ b/sfw/core/file_access.h @@ -15,6 +15,10 @@ //--STRIP #if defined(_WIN64) || defined(_WIN32) + +// Mingw +struct _iobuf; +typedef struct _iobuf FILE; #else struct _IO_FILE; typedef struct _IO_FILE FILE; diff --git a/sfw/core/inet_address.cpp b/sfw/core/inet_address.cpp old mode 100755 new mode 100644 diff --git a/sfw/core/inet_address.h b/sfw/core/inet_address.h old mode 100755 new mode 100644 index cb219bc..28125b2 --- a/sfw/core/inet_address.h +++ b/sfw/core/inet_address.h @@ -42,8 +42,8 @@ using uint16_t = unsigned short; #endif //--STRIP -#include "int_types.h" #include "core/ustring.h" +#include "int_types.h" //--STRIP class InetAddress { diff --git a/sfw/core/sfw_time.cpp b/sfw/core/sfw_time.cpp index 5b28f9d..f2f00c6 100644 --- a/sfw/core/sfw_time.cpp +++ b/sfw/core/sfw_time.cpp @@ -10,6 +10,12 @@ #include //--STRIP +#if defined(_WIN64) || defined(_WIN32) +#define WIN32_LEAN_AND_MEAN +#include +#include +#endif + #if 0 uint64_t SFWTime::time_gpu() { GLint64 t = 123456789; diff --git a/sfw/core/socket.cpp b/sfw/core/socket.cpp old mode 100755 new mode 100644 diff --git a/sfw/core/socket.h b/sfw/core/socket.h old mode 100755 new mode 100644 diff --git a/sfw/render_core/3rd_glfw3.h b/sfw/render_core/3rd_glfw3.h index b0cde25..5a92607 100644 --- a/sfw/render_core/3rd_glfw3.h +++ b/sfw/render_core/3rd_glfw3.h @@ -18678,7 +18678,7 @@ WCHAR* _glfwCreateWideStringFromUTF8Win32(const char* source) return NULL; } - target = calloc(count, sizeof(WCHAR)); + target = (WCHAR*)calloc(count, sizeof(WCHAR)); if (!MultiByteToWideChar(CP_UTF8, 0, source, -1, target, count)) { @@ -18706,7 +18706,7 @@ char* _glfwCreateUTF8FromWideStringWin32(const WCHAR* source) return NULL; } - target = calloc(size, 1); + target = (char*)calloc(size, 1); if (!WideCharToMultiByte(CP_UTF8, 0, source, -1, target, size, NULL, NULL)) { @@ -19095,8 +19095,8 @@ static const char* getDeviceDescription(const XINPUT_CAPABILITIES* xic) // static int compareJoystickObjects(const void* first, const void* second) { - const _GLFWjoyobjectWin32* fo = first; - const _GLFWjoyobjectWin32* so = second; + const _GLFWjoyobjectWin32* fo = (const _GLFWjoyobjectWin32*)first; + const _GLFWjoyobjectWin32* so = (const _GLFWjoyobjectWin32*)second; if (fo->type != so->type) return fo->type - so->type; @@ -19116,7 +19116,7 @@ static GLFWbool supportsXInput(const GUID* guid) if (GetRawInputDeviceList(NULL, &count, sizeof(RAWINPUTDEVICELIST)) != 0) return GLFW_FALSE; - ridl = calloc(count, sizeof(RAWINPUTDEVICELIST)); + ridl = (RAWINPUTDEVICELIST*)calloc(count, sizeof(RAWINPUTDEVICELIST)); if (GetRawInputDeviceList(ridl, &count, sizeof(RAWINPUTDEVICELIST)) == (UINT) -1) { @@ -19191,7 +19191,7 @@ static void closeJoystick(_GLFWjoystick* js) static BOOL CALLBACK deviceObjectCallback(const DIDEVICEOBJECTINSTANCEW* doi, void* user) { - _GLFWobjenumWin32* data = user; + _GLFWobjenumWin32* data = (_GLFWobjenumWin32*)user; _GLFWjoyobjectWin32* object = data->objects + data->objectCount; if (DIDFT_GETTYPE(doi->dwType) & DIDFT_AXIS) @@ -19285,7 +19285,7 @@ static BOOL CALLBACK deviceCallback(const DIDEVICEINSTANCE* di, void* user) return DIENUM_CONTINUE; if (FAILED(IDirectInput8_CreateDevice(_glfw.win32.dinput8.api, - &di->guidInstance, + di->guidInstance, &device, NULL))) { @@ -19333,7 +19333,7 @@ static BOOL CALLBACK deviceCallback(const DIDEVICEINSTANCE* di, void* user) memset(&data, 0, sizeof(data)); data.device = device; - data.objects = calloc(dc.dwAxes + (size_t) dc.dwButtons + dc.dwPOVs, + data.objects = (_GLFWjoyobjectWin32*)calloc(dc.dwAxes + (size_t) dc.dwButtons + dc.dwPOVs, sizeof(_GLFWjoyobjectWin32)); if (FAILED(IDirectInputDevice8_EnumObjects(device, @@ -19416,7 +19416,7 @@ void _glfwInitJoysticksWin32(void) { if (FAILED(DirectInput8Create(GetModuleHandleW(NULL), DIRECTINPUT_VERSION, - &IID_IDirectInput8W, + IID_IDirectInput8W, (void**) &_glfw.win32.dinput8.api, NULL))) { @@ -19827,7 +19827,7 @@ void _glfwPollMonitorsWin32(void) disconnectedCount = _glfw.monitorCount; if (disconnectedCount) { - disconnected = calloc(_glfw.monitorCount, sizeof(_GLFWmonitor*)); + disconnected = (_GLFWmonitor**)calloc(_glfw.monitorCount, sizeof(_GLFWmonitor*)); memcpy(disconnected, _glfw.monitors, _glfw.monitorCount * sizeof(_GLFWmonitor*)); @@ -20145,7 +20145,7 @@ GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count) if (!*count) { // HACK: Report the current mode if no valid modes were found - result = calloc(1, sizeof(GLFWvidmode)); + result = (GLFWvidmode*)calloc(1, sizeof(GLFWvidmode)); _glfwPlatformGetVideoMode(monitor, result); *count = 1; } @@ -20954,7 +20954,7 @@ static void maximizeWindowManually(_GLFWwindow* window) static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - _GLFWwindow* window = GetPropW(hWnd, L"GLFW"); + _GLFWwindow* window = (_GLFWwindow*)GetPropW(hWnd, L"GLFW"); if (!window) { // This is the message handling for the hidden helper window @@ -20967,7 +20967,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32()) { const CREATESTRUCTW* cs = (const CREATESTRUCTW*) lParam; - const _GLFWwndconfig* wndconfig = cs->lpCreateParams; + const _GLFWwndconfig* wndconfig = (const _GLFWwndconfig*)cs->lpCreateParams; // On per-monitor DPI aware V1 systems, only enable // non-client scaling for windows that scale the client area @@ -21338,7 +21338,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, if (size > (UINT) _glfw.win32.rawInputSize) { free(_glfw.win32.rawInput); - _glfw.win32.rawInput = calloc(size, 1); + _glfw.win32.rawInput = (RAWINPUT*)calloc(size, 1); _glfw.win32.rawInputSize = size; } @@ -21638,7 +21638,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, int i; const int count = DragQueryFileW(drop, 0xffffffff, NULL, 0); - char** paths = calloc(count, sizeof(char*)); + char** paths = (char**)calloc(count, sizeof(char*)); // Move the mouse to the position of the drop DragQueryPoint(drop, &pt); @@ -21647,7 +21647,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg, for (i = 0; i < count; i++) { const UINT length = DragQueryFileW(drop, i, NULL, 0); - WCHAR* buffer = calloc((size_t) length + 1, sizeof(WCHAR)); + WCHAR* buffer = (WCHAR*)calloc((size_t) length + 1, sizeof(WCHAR)); DragQueryFileW(drop, i, buffer, length + 1); paths[i] = _glfwCreateUTF8FromWideStringWin32(buffer); @@ -21836,13 +21836,13 @@ GLFWbool _glfwRegisterWindowClassWin32(void) wc.lpszClassName = _GLFW_WNDCLASSNAME; // Load user-provided icon if available - wc.hIcon = LoadImageW(GetModuleHandleW(NULL), + wc.hIcon = (HICON)LoadImageW(GetModuleHandleW(NULL), L"GLFW_ICON", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); if (!wc.hIcon) { // No user-provided icon found, load default icon - wc.hIcon = LoadImageW(NULL, + wc.hIcon = (HICON)LoadImageW(NULL, IDI_APPLICATION, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); } @@ -22137,7 +22137,7 @@ void _glfwPlatformGetWindowContentScale(_GLFWwindow* window, { const HANDLE handle = MonitorFromWindow(window->win32.handle, MONITOR_DEFAULTTONEAREST); - _glfwGetMonitorContentScaleWin32(handle, xscale, yscale); + _glfwGetMonitorContentScaleWin32((HMONITOR)handle, xscale, yscale); } void _glfwPlatformIconifyWindow(_GLFWwindow* window) @@ -22446,7 +22446,7 @@ void _glfwPlatformPollEvents(void) handle = GetActiveWindow(); if (handle) { - window = GetPropW(handle, L"GLFW"); + window = (_GLFWwindow*)GetPropW(handle, L"GLFW"); if (window) { int i; @@ -22596,7 +22596,7 @@ int _glfwPlatformCreateStandardCursor(_GLFWcursor* cursor, int shape) else return GLFW_FALSE; - cursor->win32.handle = LoadImageW(NULL, + cursor->win32.handle = (HCURSOR)LoadImageW(NULL, MAKEINTRESOURCEW(id), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); if (!cursor->win32.handle) @@ -22639,7 +22639,7 @@ void _glfwPlatformSetClipboardString(const char* string) return; } - buffer = GlobalLock(object); + buffer = (WCHAR*)GlobalLock(object); if (!buffer) { _glfwInputErrorWin32(GLFW_PLATFORM_ERROR, @@ -22685,7 +22685,7 @@ const char* _glfwPlatformGetClipboardString(void) return NULL; } - buffer = GlobalLock(object); + buffer = (WCHAR*)GlobalLock(object); if (!buffer) { _glfwInputErrorWin32(GLFW_PLATFORM_ERROR, diff --git a/sfw/render_core/image.cpp b/sfw/render_core/image.cpp index 2340186..1169710 100644 --- a/sfw/render_core/image.cpp +++ b/sfw/render_core/image.cpp @@ -18,6 +18,8 @@ #define STB_IMAGE_WRITE_IMPLEMENTATION // stbi_write #define STB_SPRINTF_IMPLEMENTATION // stb_sprintf #define STB_SPRINTF_NOUNALIGNED // stb_sprintf +//#define STBI_WINDOWS_UTF8 +//#define STBIW_WINDOWS_UTF8 #include "3rd_stb_image.h" #include "3rd_stb_image_write.h" @@ -1411,6 +1413,8 @@ void Image::load_from_file(const String &file_name, Format p_format) { FILE *fp = fopen(file_name.utf8().get_data(), "r"); + ERR_FAIL_COND_MSG(!fp, "Couldn't open file! " + file_name); + //case FORMAT_RF: //case FORMAT_RGF: //case FORMAT_RGBF: