mirror of
https://github.com/Relintai/sfw.git
synced 2025-03-11 23:39:09 +01:00
Fixed build on windows + mingw.
This commit is contained in:
parent
aee8f305f3
commit
f72f2a57df
1
.gitignore
vendored
1
.gitignore
vendored
@ -28,4 +28,5 @@ compile_commands.json
|
|||||||
*.o
|
*.o
|
||||||
|
|
||||||
game
|
game
|
||||||
|
game.exe
|
||||||
|
|
||||||
|
141
compile_windows.sh
Normal file
141
compile_windows.sh
Normal file
@ -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"
|
@ -78,9 +78,10 @@ struct DirAccessWindowsPrivate {
|
|||||||
|
|
||||||
// CreateFolderAsync
|
// CreateFolderAsync
|
||||||
|
|
||||||
Error DirAccessWindows::list_dir_begin() {
|
Error DirAccess::list_dir_begin(bool skip_specials) {
|
||||||
_cisdir = false;
|
_cisdir = false;
|
||||||
_cishidden = false;
|
_cishidden = false;
|
||||||
|
_skip_specials = skip_specials;
|
||||||
|
|
||||||
list_dir_end();
|
list_dir_end();
|
||||||
p->h = FindFirstFileExW((LPCWSTR)(String(current_dir + "\\*").utf16().get_data()), FindExInfoStandard, &p->fu, FindExSearchNameMatch, NULL, 0);
|
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;
|
return (p->h == INVALID_HANDLE_VALUE) ? ERR_CANT_OPEN : OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
String DirAccessWindows::get_next() {
|
String DirAccess::get_next() {
|
||||||
if (p->h == INVALID_HANDLE_VALUE) {
|
if (p->h == INVALID_HANDLE_VALUE) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@ -106,24 +107,32 @@ String DirAccessWindows::get_next() {
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DirAccessWindows::current_is_dir() const {
|
bool DirAccess::current_is_dir() const {
|
||||||
return _cisdir;
|
return _cisdir;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DirAccessWindows::current_is_hidden() const {
|
bool DirAccess::current_is_hidden() const {
|
||||||
return _cishidden;
|
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) {
|
if (p->h != INVALID_HANDLE_VALUE) {
|
||||||
FindClose(p->h);
|
FindClose(p->h);
|
||||||
p->h = INVALID_HANDLE_VALUE;
|
p->h = INVALID_HANDLE_VALUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int DirAccessWindows::get_drive_count() {
|
int DirAccess::get_drive_count() {
|
||||||
return 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) {
|
if (p_drive < 0 || p_drive >= drive_count) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@ -131,11 +140,9 @@ String DirAccessWindows::get_drive(int p_drive) {
|
|||||||
return String::chr(drives[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
|
GLOBAL_LOCK_FUNCTION
|
||||||
|
|
||||||
p_dir = fix_path(p_dir);
|
|
||||||
|
|
||||||
WCHAR real_current_dir_name[2048];
|
WCHAR real_current_dir_name[2048];
|
||||||
GetCurrentDirectoryW(2048, real_current_dir_name);
|
GetCurrentDirectoryW(2048, real_current_dir_name);
|
||||||
String prev_dir = String::utf16((const char16_t *)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()));
|
SetCurrentDirectoryW((LPCWSTR)(current_dir.utf16().get_data()));
|
||||||
bool worked = (SetCurrentDirectoryW((LPCWSTR)(p_dir.utf16().get_data())) != 0);
|
bool worked = (SetCurrentDirectoryW((LPCWSTR)(p_dir.utf16().get_data())) != 0);
|
||||||
|
|
||||||
String base = _get_root_path();
|
String base;
|
||||||
if (base != "") {
|
if (base != "") {
|
||||||
GetCurrentDirectoryW(2048, real_current_dir_name);
|
GetCurrentDirectoryW(2048, real_current_dir_name);
|
||||||
String new_dir = String::utf16((const char16_t *)real_current_dir_name).replace("\\", "/");
|
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;
|
return worked ? OK : ERR_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Error DirAccessWindows::make_dir(String p_dir) {
|
Error DirAccess::make_dir(String p_dir) {
|
||||||
GLOBAL_LOCK_FUNCTION
|
GLOBAL_LOCK_FUNCTION
|
||||||
|
|
||||||
p_dir = fix_path(p_dir);
|
|
||||||
|
|
||||||
if (p_dir.is_rel_path()) {
|
if (p_dir.is_rel_path()) {
|
||||||
p_dir = current_dir.plus_file(p_dir);
|
p_dir = current_dir.plus_file(p_dir);
|
||||||
}
|
}
|
||||||
@ -197,42 +202,38 @@ Error DirAccessWindows::make_dir(String p_dir) {
|
|||||||
return ERR_CANT_CREATE;
|
return ERR_CANT_CREATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
String DirAccessWindows::get_current_dir() {
|
String DirAccess::get_current_dir() {
|
||||||
String base = _get_root_path();
|
String base;
|
||||||
if (base != "") {
|
if (base != "") {
|
||||||
String bd = current_dir.replace("\\", "/").replace_first(base, "");
|
String bd = current_dir.replace("\\", "/").replace_first(base, "");
|
||||||
if (bd.begins_with("/")) {
|
if (bd.begins_with("/")) {
|
||||||
return _get_root_string() + bd.substr(1, bd.length());
|
return bd.substr(1, bd.length());
|
||||||
} else {
|
} else {
|
||||||
return _get_root_string() + bd;
|
return bd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return current_dir;
|
return current_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
String DirAccessWindows::get_current_dir_without_drive() {
|
String DirAccess::get_current_dir_without_drive() {
|
||||||
String dir = get_current_dir();
|
String dir = get_current_dir();
|
||||||
|
|
||||||
if (_get_root_string() == "") {
|
|
||||||
int p = current_dir.find(":");
|
int p = current_dir.find(":");
|
||||||
if (p != -1) {
|
if (p != -1) {
|
||||||
dir = dir.right(p + 1);
|
dir = dir.right(p + 1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DirAccessWindows::file_exists(String p_file) {
|
bool DirAccess::file_exists(String p_file) {
|
||||||
GLOBAL_LOCK_FUNCTION
|
GLOBAL_LOCK_FUNCTION
|
||||||
|
|
||||||
if (!p_file.is_abs_path()) {
|
if (!p_file.is_abs_path()) {
|
||||||
p_file = get_current_dir().plus_file(p_file);
|
p_file = get_current_dir().plus_file(p_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
p_file = fix_path(p_file);
|
|
||||||
|
|
||||||
DWORD fileAttr;
|
DWORD fileAttr;
|
||||||
|
|
||||||
fileAttr = GetFileAttributesW((LPCWSTR)(p_file.utf16().get_data()));
|
fileAttr = GetFileAttributesW((LPCWSTR)(p_file.utf16().get_data()));
|
||||||
@ -243,13 +244,12 @@ bool DirAccessWindows::file_exists(String p_file) {
|
|||||||
return !(fileAttr & FILE_ATTRIBUTE_DIRECTORY);
|
return !(fileAttr & FILE_ATTRIBUTE_DIRECTORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DirAccessWindows::dir_exists(String p_dir) {
|
bool DirAccess::dir_exists(String p_dir) {
|
||||||
GLOBAL_LOCK_FUNCTION
|
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 = get_current_dir().plus_file(p_dir);
|
||||||
|
}
|
||||||
p_dir = fix_path(p_dir);
|
|
||||||
|
|
||||||
DWORD fileAttr;
|
DWORD fileAttr;
|
||||||
|
|
||||||
@ -261,19 +261,15 @@ bool DirAccessWindows::dir_exists(String p_dir) {
|
|||||||
return (fileAttr & FILE_ATTRIBUTE_DIRECTORY);
|
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()) {
|
if (p_path.is_rel_path()) {
|
||||||
p_path = get_current_dir().plus_file(p_path);
|
p_path = get_current_dir().plus_file(p_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
p_path = fix_path(p_path);
|
|
||||||
|
|
||||||
if (p_new_path.is_rel_path()) {
|
if (p_new_path.is_rel_path()) {
|
||||||
p_new_path = get_current_dir().plus_file(p_new_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 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 (p_path.to_lower() == p_new_path.to_lower()) {
|
||||||
if (dir_exists(p_path)) {
|
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
|
// The path is a file; juggle
|
||||||
WCHAR tmpfile[MAX_PATH];
|
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;
|
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()) {
|
if (p_path.is_rel_path()) {
|
||||||
p_path = get_current_dir().plus_file(p_path);
|
p_path = get_current_dir().plus_file(p_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
p_path = fix_path(p_path);
|
|
||||||
|
|
||||||
DWORD fileAttr;
|
DWORD fileAttr;
|
||||||
|
|
||||||
fileAttr = GetFileAttributesW((LPCWSTR)(p_path.utf16().get_data()));
|
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];
|
WCHAR real_current_dir_name[2048];
|
||||||
GetCurrentDirectoryW(2048, real_current_dir_name);
|
GetCurrentDirectoryW(2048, real_current_dir_name);
|
||||||
String prev_dir = Strong::utf16((const char16_t *)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;
|
uint64_t bytes = 0;
|
||||||
|
|
||||||
if (!GetDiskFreeSpaceEx(NULL, (PULARGE_INTEGER)&bytes, NULL, NULL)) {
|
if (!GetDiskFreeSpaceEx(NULL, (PULARGE_INTEGER)&bytes, NULL, NULL)) {
|
||||||
@ -362,8 +356,8 @@ uint64_t DirAccessWindows::get_space_left() {
|
|||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
String DirAccessWindows::get_filesystem_type() const {
|
String DirAccess::get_filesystem_type() const {
|
||||||
String path = fix_path(const_cast<DirAccessWindows *>(this)->get_current_dir());
|
String path = const_cast<DirAccess *>(this)->get_current_dir();
|
||||||
|
|
||||||
if (path.is_network_share_path()) {
|
if (path.is_network_share_path()) {
|
||||||
return "Network Share";
|
return "Network Share";
|
||||||
@ -393,7 +387,27 @@ String DirAccessWindows::get_filesystem_type() const {
|
|||||||
ERR_FAIL_V("");
|
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 = memnew(DirAccessWindowsPrivate);
|
||||||
p->h = INVALID_HANDLE_VALUE;
|
p->h = INVALID_HANDLE_VALUE;
|
||||||
current_dir = ".";
|
current_dir = ".";
|
||||||
@ -420,7 +434,7 @@ DirAccessWindows::DirAccessWindows() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
DirAccessWindows::~DirAccessWindows() {
|
DirAccess::~DirAccess() {
|
||||||
list_dir_end();
|
list_dir_end();
|
||||||
|
|
||||||
memdelete(p);
|
memdelete(p);
|
||||||
@ -836,6 +850,10 @@ bool DirAccess::is_hidden(const String &p_name) {
|
|||||||
return p_name != "." && p_name != ".." && p_name.begins_with(".");
|
return p_name != "." && p_name != ".." && p_name.begins_with(".");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String DirAccess::get_current_dir_without_drive() {
|
||||||
|
return get_current_dir();
|
||||||
|
}
|
||||||
|
|
||||||
DirAccess::DirAccess() {
|
DirAccess::DirAccess() {
|
||||||
dir_stream = NULL;
|
dir_stream = NULL;
|
||||||
_cisdir = false;
|
_cisdir = false;
|
||||||
@ -864,28 +882,6 @@ DirAccess::~DirAccess() {
|
|||||||
|
|
||||||
#endif
|
#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) {
|
static Error _erase_recursive(DirAccess *da) {
|
||||||
List<String> dirs;
|
List<String> dirs;
|
||||||
List<String> files;
|
List<String> files;
|
||||||
@ -960,11 +956,7 @@ Error DirAccess::make_dir_recursive(String p_dir) {
|
|||||||
|
|
||||||
String base;
|
String base;
|
||||||
|
|
||||||
if (full_dir.begins_with("res://")) {
|
if (full_dir.is_network_share_path()) {
|
||||||
base = "res://";
|
|
||||||
} else if (full_dir.begins_with("user://")) {
|
|
||||||
base = "user://";
|
|
||||||
} else if (full_dir.is_network_share_path()) {
|
|
||||||
int pos = full_dir.find("/", 2);
|
int pos = full_dir.find("/", 2);
|
||||||
ERR_FAIL_COND_V(pos < 0, ERR_INVALID_PARAMETER);
|
ERR_FAIL_COND_V(pos < 0, ERR_INVALID_PARAMETER);
|
||||||
pos = full_dir.find("/", pos + 1);
|
pos = full_dir.find("/", pos + 1);
|
||||||
|
@ -101,6 +101,7 @@ protected:
|
|||||||
|
|
||||||
bool _cisdir;
|
bool _cisdir;
|
||||||
bool _cishidden;
|
bool _cishidden;
|
||||||
|
bool _cisspecial;
|
||||||
#else
|
#else
|
||||||
String current_dir;
|
String current_dir;
|
||||||
DIR *dir_stream;
|
DIR *dir_stream;
|
||||||
|
@ -29,6 +29,8 @@
|
|||||||
#define S_ISREG(m) ((m)&_S_IFREG)
|
#define S_ISREG(m) ((m)&_S_IFREG)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "core/sfw_time.h"
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -57,7 +59,7 @@
|
|||||||
|
|
||||||
#if defined(_WIN64) || defined(_WIN32)
|
#if defined(_WIN64) || defined(_WIN32)
|
||||||
|
|
||||||
void FileAccessWindows::check_errors() const {
|
void FileAccess::check_errors() const {
|
||||||
ERR_FAIL_COND(!f);
|
ERR_FAIL_COND(!f);
|
||||||
|
|
||||||
if (feof(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_src = p_path;
|
||||||
path = fix_path(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) {
|
if (!f) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -178,7 +180,7 @@ void FileAccessWindows::close() {
|
|||||||
}
|
}
|
||||||
if (rename_error) {
|
if (rename_error) {
|
||||||
attempts--;
|
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;
|
return path_src;
|
||||||
}
|
}
|
||||||
|
|
||||||
String FileAccessWindows::get_path_absolute() const {
|
String FileAccess::get_path_absolute() const {
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileAccessWindows::is_open() const {
|
bool FileAccess::is_open() const {
|
||||||
return (f != NULL);
|
return (f != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileAccessWindows::seek(uint64_t p_position) {
|
void FileAccess::seek(uint64_t p_position) {
|
||||||
ERR_FAIL_COND(!f);
|
ERR_FAIL_COND(!f);
|
||||||
|
|
||||||
last_error = OK;
|
last_error = OK;
|
||||||
@ -218,7 +220,7 @@ void FileAccessWindows::seek(uint64_t p_position) {
|
|||||||
prev_op = 0;
|
prev_op = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileAccessWindows::seek_end(int64_t p_position) {
|
void FileAccess::seek_end(int64_t p_position) {
|
||||||
ERR_FAIL_COND(!f);
|
ERR_FAIL_COND(!f);
|
||||||
|
|
||||||
if (_fseeki64(f, p_position, SEEK_END)) {
|
if (_fseeki64(f, p_position, SEEK_END)) {
|
||||||
@ -228,7 +230,7 @@ void FileAccessWindows::seek_end(int64_t p_position) {
|
|||||||
prev_op = 0;
|
prev_op = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t FileAccessWindows::get_position() const {
|
uint64_t FileAccess::get_position() const {
|
||||||
int64_t aux_position = _ftelli64(f);
|
int64_t aux_position = _ftelli64(f);
|
||||||
|
|
||||||
if (aux_position < 0) {
|
if (aux_position < 0) {
|
||||||
@ -238,7 +240,7 @@ uint64_t FileAccessWindows::get_position() const {
|
|||||||
return aux_position;
|
return aux_position;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t FileAccessWindows::get_len() const {
|
uint64_t FileAccess::get_len() const {
|
||||||
ERR_FAIL_COND_V(!f, 0);
|
ERR_FAIL_COND_V(!f, 0);
|
||||||
|
|
||||||
uint64_t pos = get_position();
|
uint64_t pos = get_position();
|
||||||
@ -249,12 +251,12 @@ uint64_t FileAccessWindows::get_len() const {
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileAccessWindows::eof_reached() const {
|
bool FileAccess::eof_reached() const {
|
||||||
check_errors();
|
check_errors();
|
||||||
return last_error == ERR_FILE_EOF;
|
return last_error == ERR_FILE_EOF;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t FileAccessWindows::get_8() const {
|
uint8_t FileAccess::get_8() const {
|
||||||
ERR_FAIL_COND_V(!f, 0);
|
ERR_FAIL_COND_V(!f, 0);
|
||||||
if (flags == READ_WRITE || flags == WRITE_READ) {
|
if (flags == READ_WRITE || flags == WRITE_READ) {
|
||||||
if (prev_op == WRITE) {
|
if (prev_op == WRITE) {
|
||||||
@ -271,7 +273,7 @@ uint8_t FileAccessWindows::get_8() const {
|
|||||||
return b;
|
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(!p_dst && p_length > 0, -1);
|
||||||
ERR_FAIL_COND_V(!f, -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;
|
return read;
|
||||||
};
|
};
|
||||||
|
|
||||||
Error FileAccessWindows::get_error() const {
|
Error FileAccess::get_error() const {
|
||||||
return last_error;
|
return last_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FileAccessWindows::flush() {
|
void FileAccess::flush() {
|
||||||
ERR_FAIL_COND(!f);
|
ERR_FAIL_COND(!f);
|
||||||
fflush(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);
|
ERR_FAIL_COND(!f);
|
||||||
if (flags == READ_WRITE || flags == WRITE_READ) {
|
if (flags == READ_WRITE || flags == WRITE_READ) {
|
||||||
if (prev_op == READ) {
|
if (prev_op == READ) {
|
||||||
@ -312,7 +314,7 @@ void FileAccessWindows::store_8(uint8_t p_dest) {
|
|||||||
fwrite(&p_dest, 1, 1, f);
|
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(!f);
|
||||||
ERR_FAIL_COND(!p_src && p_length > 0);
|
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);
|
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);
|
String filename = fix_path(p_name);
|
||||||
|
|
||||||
FILE *g = _wfsopen((LPCWSTR)(filename.utf16().get_data()), L"rb", _SH_DENYNO);
|
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);
|
String file = fix_path(p_file);
|
||||||
if (file.ends_with("/") && file != "/")
|
if (file.ends_with("/") && file != "/")
|
||||||
file = file.substr(0, file.length() - 1);
|
file = file.substr(0, file.length() - 1);
|
||||||
@ -351,26 +353,26 @@ uint64_t FileAccessWindows::_get_modified_time(const String &p_file) {
|
|||||||
if (rv == 0) {
|
if (rv == 0) {
|
||||||
return st.st_mtime;
|
return st.st_mtime;
|
||||||
} else {
|
} else {
|
||||||
print_verbose("Failed to get modified time for: " + p_file + "");
|
LOG_TRACE("Failed to get modified time for: " + p_file + "");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t FileAccessWindows::_get_unix_permissions(const String &p_file) {
|
uint32_t FileAccess::_get_unix_permissions(const String &p_file) {
|
||||||
return 0;
|
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;
|
return ERR_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
FileAccessWindows::FileAccessWindows() :
|
FileAccess::FileAccess() :
|
||||||
f(NULL),
|
f(NULL),
|
||||||
flags(0),
|
flags(0),
|
||||||
prev_op(0),
|
prev_op(0),
|
||||||
last_error(OK) {
|
last_error(OK) {
|
||||||
}
|
}
|
||||||
FileAccessWindows::~FileAccessWindows() {
|
FileAccess::~FileAccess() {
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,10 @@
|
|||||||
//--STRIP
|
//--STRIP
|
||||||
|
|
||||||
#if defined(_WIN64) || defined(_WIN32)
|
#if defined(_WIN64) || defined(_WIN32)
|
||||||
|
|
||||||
|
// Mingw
|
||||||
|
struct _iobuf;
|
||||||
|
typedef struct _iobuf FILE;
|
||||||
#else
|
#else
|
||||||
struct _IO_FILE;
|
struct _IO_FILE;
|
||||||
typedef struct _IO_FILE FILE;
|
typedef struct _IO_FILE FILE;
|
||||||
|
0
sfw/core/inet_address.cpp
Executable file → Normal file
0
sfw/core/inet_address.cpp
Executable file → Normal file
2
sfw/core/inet_address.h
Executable file → Normal file
2
sfw/core/inet_address.h
Executable file → Normal file
@ -42,8 +42,8 @@ using uint16_t = unsigned short;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
//--STRIP
|
//--STRIP
|
||||||
#include "int_types.h"
|
|
||||||
#include "core/ustring.h"
|
#include "core/ustring.h"
|
||||||
|
#include "int_types.h"
|
||||||
//--STRIP
|
//--STRIP
|
||||||
|
|
||||||
class InetAddress {
|
class InetAddress {
|
||||||
|
@ -10,6 +10,12 @@
|
|||||||
#include <ctime>
|
#include <ctime>
|
||||||
//--STRIP
|
//--STRIP
|
||||||
|
|
||||||
|
#if defined(_WIN64) || defined(_WIN32)
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winnt.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
uint64_t SFWTime::time_gpu() {
|
uint64_t SFWTime::time_gpu() {
|
||||||
GLint64 t = 123456789;
|
GLint64 t = 123456789;
|
||||||
|
0
sfw/core/socket.cpp
Executable file → Normal file
0
sfw/core/socket.cpp
Executable file → Normal file
0
sfw/core/socket.h
Executable file → Normal file
0
sfw/core/socket.h
Executable file → Normal file
@ -18678,7 +18678,7 @@ WCHAR* _glfwCreateWideStringFromUTF8Win32(const char* source)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
target = calloc(count, sizeof(WCHAR));
|
target = (WCHAR*)calloc(count, sizeof(WCHAR));
|
||||||
|
|
||||||
if (!MultiByteToWideChar(CP_UTF8, 0, source, -1, target, count))
|
if (!MultiByteToWideChar(CP_UTF8, 0, source, -1, target, count))
|
||||||
{
|
{
|
||||||
@ -18706,7 +18706,7 @@ char* _glfwCreateUTF8FromWideStringWin32(const WCHAR* source)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
target = calloc(size, 1);
|
target = (char*)calloc(size, 1);
|
||||||
|
|
||||||
if (!WideCharToMultiByte(CP_UTF8, 0, source, -1, target, size, NULL, NULL))
|
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)
|
static int compareJoystickObjects(const void* first, const void* second)
|
||||||
{
|
{
|
||||||
const _GLFWjoyobjectWin32* fo = first;
|
const _GLFWjoyobjectWin32* fo = (const _GLFWjoyobjectWin32*)first;
|
||||||
const _GLFWjoyobjectWin32* so = second;
|
const _GLFWjoyobjectWin32* so = (const _GLFWjoyobjectWin32*)second;
|
||||||
|
|
||||||
if (fo->type != so->type)
|
if (fo->type != so->type)
|
||||||
return 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)
|
if (GetRawInputDeviceList(NULL, &count, sizeof(RAWINPUTDEVICELIST)) != 0)
|
||||||
return GLFW_FALSE;
|
return GLFW_FALSE;
|
||||||
|
|
||||||
ridl = calloc(count, sizeof(RAWINPUTDEVICELIST));
|
ridl = (RAWINPUTDEVICELIST*)calloc(count, sizeof(RAWINPUTDEVICELIST));
|
||||||
|
|
||||||
if (GetRawInputDeviceList(ridl, &count, sizeof(RAWINPUTDEVICELIST)) == (UINT) -1)
|
if (GetRawInputDeviceList(ridl, &count, sizeof(RAWINPUTDEVICELIST)) == (UINT) -1)
|
||||||
{
|
{
|
||||||
@ -19191,7 +19191,7 @@ static void closeJoystick(_GLFWjoystick* js)
|
|||||||
static BOOL CALLBACK deviceObjectCallback(const DIDEVICEOBJECTINSTANCEW* doi,
|
static BOOL CALLBACK deviceObjectCallback(const DIDEVICEOBJECTINSTANCEW* doi,
|
||||||
void* user)
|
void* user)
|
||||||
{
|
{
|
||||||
_GLFWobjenumWin32* data = user;
|
_GLFWobjenumWin32* data = (_GLFWobjenumWin32*)user;
|
||||||
_GLFWjoyobjectWin32* object = data->objects + data->objectCount;
|
_GLFWjoyobjectWin32* object = data->objects + data->objectCount;
|
||||||
|
|
||||||
if (DIDFT_GETTYPE(doi->dwType) & DIDFT_AXIS)
|
if (DIDFT_GETTYPE(doi->dwType) & DIDFT_AXIS)
|
||||||
@ -19285,7 +19285,7 @@ static BOOL CALLBACK deviceCallback(const DIDEVICEINSTANCE* di, void* user)
|
|||||||
return DIENUM_CONTINUE;
|
return DIENUM_CONTINUE;
|
||||||
|
|
||||||
if (FAILED(IDirectInput8_CreateDevice(_glfw.win32.dinput8.api,
|
if (FAILED(IDirectInput8_CreateDevice(_glfw.win32.dinput8.api,
|
||||||
&di->guidInstance,
|
di->guidInstance,
|
||||||
&device,
|
&device,
|
||||||
NULL)))
|
NULL)))
|
||||||
{
|
{
|
||||||
@ -19333,7 +19333,7 @@ static BOOL CALLBACK deviceCallback(const DIDEVICEINSTANCE* di, void* user)
|
|||||||
|
|
||||||
memset(&data, 0, sizeof(data));
|
memset(&data, 0, sizeof(data));
|
||||||
data.device = device;
|
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));
|
sizeof(_GLFWjoyobjectWin32));
|
||||||
|
|
||||||
if (FAILED(IDirectInputDevice8_EnumObjects(device,
|
if (FAILED(IDirectInputDevice8_EnumObjects(device,
|
||||||
@ -19416,7 +19416,7 @@ void _glfwInitJoysticksWin32(void)
|
|||||||
{
|
{
|
||||||
if (FAILED(DirectInput8Create(GetModuleHandleW(NULL),
|
if (FAILED(DirectInput8Create(GetModuleHandleW(NULL),
|
||||||
DIRECTINPUT_VERSION,
|
DIRECTINPUT_VERSION,
|
||||||
&IID_IDirectInput8W,
|
IID_IDirectInput8W,
|
||||||
(void**) &_glfw.win32.dinput8.api,
|
(void**) &_glfw.win32.dinput8.api,
|
||||||
NULL)))
|
NULL)))
|
||||||
{
|
{
|
||||||
@ -19827,7 +19827,7 @@ void _glfwPollMonitorsWin32(void)
|
|||||||
disconnectedCount = _glfw.monitorCount;
|
disconnectedCount = _glfw.monitorCount;
|
||||||
if (disconnectedCount)
|
if (disconnectedCount)
|
||||||
{
|
{
|
||||||
disconnected = calloc(_glfw.monitorCount, sizeof(_GLFWmonitor*));
|
disconnected = (_GLFWmonitor**)calloc(_glfw.monitorCount, sizeof(_GLFWmonitor*));
|
||||||
memcpy(disconnected,
|
memcpy(disconnected,
|
||||||
_glfw.monitors,
|
_glfw.monitors,
|
||||||
_glfw.monitorCount * sizeof(_GLFWmonitor*));
|
_glfw.monitorCount * sizeof(_GLFWmonitor*));
|
||||||
@ -20145,7 +20145,7 @@ GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count)
|
|||||||
if (!*count)
|
if (!*count)
|
||||||
{
|
{
|
||||||
// HACK: Report the current mode if no valid modes were found
|
// 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);
|
_glfwPlatformGetVideoMode(monitor, result);
|
||||||
*count = 1;
|
*count = 1;
|
||||||
}
|
}
|
||||||
@ -20954,7 +20954,7 @@ static void maximizeWindowManually(_GLFWwindow* window)
|
|||||||
static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
|
static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
|
||||||
WPARAM wParam, LPARAM lParam)
|
WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
_GLFWwindow* window = GetPropW(hWnd, L"GLFW");
|
_GLFWwindow* window = (_GLFWwindow*)GetPropW(hWnd, L"GLFW");
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
// This is the message handling for the hidden helper 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())
|
if (_glfwIsWindows10AnniversaryUpdateOrGreaterWin32())
|
||||||
{
|
{
|
||||||
const CREATESTRUCTW* cs = (const CREATESTRUCTW*) lParam;
|
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
|
// On per-monitor DPI aware V1 systems, only enable
|
||||||
// non-client scaling for windows that scale the client area
|
// 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)
|
if (size > (UINT) _glfw.win32.rawInputSize)
|
||||||
{
|
{
|
||||||
free(_glfw.win32.rawInput);
|
free(_glfw.win32.rawInput);
|
||||||
_glfw.win32.rawInput = calloc(size, 1);
|
_glfw.win32.rawInput = (RAWINPUT*)calloc(size, 1);
|
||||||
_glfw.win32.rawInputSize = size;
|
_glfw.win32.rawInputSize = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21638,7 +21638,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
const int count = DragQueryFileW(drop, 0xffffffff, NULL, 0);
|
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
|
// Move the mouse to the position of the drop
|
||||||
DragQueryPoint(drop, &pt);
|
DragQueryPoint(drop, &pt);
|
||||||
@ -21647,7 +21647,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
|
|||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
const UINT length = DragQueryFileW(drop, i, NULL, 0);
|
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);
|
DragQueryFileW(drop, i, buffer, length + 1);
|
||||||
paths[i] = _glfwCreateUTF8FromWideStringWin32(buffer);
|
paths[i] = _glfwCreateUTF8FromWideStringWin32(buffer);
|
||||||
@ -21836,13 +21836,13 @@ GLFWbool _glfwRegisterWindowClassWin32(void)
|
|||||||
wc.lpszClassName = _GLFW_WNDCLASSNAME;
|
wc.lpszClassName = _GLFW_WNDCLASSNAME;
|
||||||
|
|
||||||
// Load user-provided icon if available
|
// Load user-provided icon if available
|
||||||
wc.hIcon = LoadImageW(GetModuleHandleW(NULL),
|
wc.hIcon = (HICON)LoadImageW(GetModuleHandleW(NULL),
|
||||||
L"GLFW_ICON", IMAGE_ICON,
|
L"GLFW_ICON", IMAGE_ICON,
|
||||||
0, 0, LR_DEFAULTSIZE | LR_SHARED);
|
0, 0, LR_DEFAULTSIZE | LR_SHARED);
|
||||||
if (!wc.hIcon)
|
if (!wc.hIcon)
|
||||||
{
|
{
|
||||||
// No user-provided icon found, load default icon
|
// No user-provided icon found, load default icon
|
||||||
wc.hIcon = LoadImageW(NULL,
|
wc.hIcon = (HICON)LoadImageW(NULL,
|
||||||
IDI_APPLICATION, IMAGE_ICON,
|
IDI_APPLICATION, IMAGE_ICON,
|
||||||
0, 0, LR_DEFAULTSIZE | LR_SHARED);
|
0, 0, LR_DEFAULTSIZE | LR_SHARED);
|
||||||
}
|
}
|
||||||
@ -22137,7 +22137,7 @@ void _glfwPlatformGetWindowContentScale(_GLFWwindow* window,
|
|||||||
{
|
{
|
||||||
const HANDLE handle = MonitorFromWindow(window->win32.handle,
|
const HANDLE handle = MonitorFromWindow(window->win32.handle,
|
||||||
MONITOR_DEFAULTTONEAREST);
|
MONITOR_DEFAULTTONEAREST);
|
||||||
_glfwGetMonitorContentScaleWin32(handle, xscale, yscale);
|
_glfwGetMonitorContentScaleWin32((HMONITOR)handle, xscale, yscale);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _glfwPlatformIconifyWindow(_GLFWwindow* window)
|
void _glfwPlatformIconifyWindow(_GLFWwindow* window)
|
||||||
@ -22446,7 +22446,7 @@ void _glfwPlatformPollEvents(void)
|
|||||||
handle = GetActiveWindow();
|
handle = GetActiveWindow();
|
||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
window = GetPropW(handle, L"GLFW");
|
window = (_GLFWwindow*)GetPropW(handle, L"GLFW");
|
||||||
if (window)
|
if (window)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -22596,7 +22596,7 @@ int _glfwPlatformCreateStandardCursor(_GLFWcursor* cursor, int shape)
|
|||||||
else
|
else
|
||||||
return GLFW_FALSE;
|
return GLFW_FALSE;
|
||||||
|
|
||||||
cursor->win32.handle = LoadImageW(NULL,
|
cursor->win32.handle = (HCURSOR)LoadImageW(NULL,
|
||||||
MAKEINTRESOURCEW(id), IMAGE_CURSOR, 0, 0,
|
MAKEINTRESOURCEW(id), IMAGE_CURSOR, 0, 0,
|
||||||
LR_DEFAULTSIZE | LR_SHARED);
|
LR_DEFAULTSIZE | LR_SHARED);
|
||||||
if (!cursor->win32.handle)
|
if (!cursor->win32.handle)
|
||||||
@ -22639,7 +22639,7 @@ void _glfwPlatformSetClipboardString(const char* string)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer = GlobalLock(object);
|
buffer = (WCHAR*)GlobalLock(object);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
_glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
|
_glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
|
||||||
@ -22685,7 +22685,7 @@ const char* _glfwPlatformGetClipboardString(void)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer = GlobalLock(object);
|
buffer = (WCHAR*)GlobalLock(object);
|
||||||
if (!buffer)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
_glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
|
_glfwInputErrorWin32(GLFW_PLATFORM_ERROR,
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
#define STB_IMAGE_WRITE_IMPLEMENTATION // stbi_write
|
#define STB_IMAGE_WRITE_IMPLEMENTATION // stbi_write
|
||||||
#define STB_SPRINTF_IMPLEMENTATION // stb_sprintf
|
#define STB_SPRINTF_IMPLEMENTATION // stb_sprintf
|
||||||
#define STB_SPRINTF_NOUNALIGNED // 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.h"
|
||||||
#include "3rd_stb_image_write.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");
|
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_RF:
|
||||||
//case FORMAT_RGF:
|
//case FORMAT_RGF:
|
||||||
//case FORMAT_RGBF:
|
//case FORMAT_RGBF:
|
||||||
|
Loading…
Reference in New Issue
Block a user