From 0b3d603e04b5c26fa962b57a70a58c8dd9f3f8a1 Mon Sep 17 00:00:00 2001 From: Peter Slattery Date: Sat, 30 May 2020 14:54:37 -0700 Subject: [PATCH] Created platform_file_handler and integrated it --- src/app/foldhaus_app.cpp | 4 +- src/app/foldhaus_assembly.cpp | 2 +- src/app/foldhaus_platform.h | 60 +++++++++++++++++++++-- src/app/panels/foldhaus_panel_hierarchy.h | 2 +- src/app/win32_foldhaus.cpp | 56 ++++++++++----------- 5 files changed, 88 insertions(+), 36 deletions(-) diff --git a/src/app/foldhaus_app.cpp b/src/app/foldhaus_app.cpp index 90a737a..ee84a3c 100644 --- a/src/app/foldhaus_app.cpp +++ b/src/app/foldhaus_app.cpp @@ -92,7 +92,7 @@ INITIALIZE_APPLICATION(InitializeApplication) // TODO(Peter): put in InitializeInterface? r32 FontSize = 14; { - platform_memory_result FontFile = Context.PlatformReadEntireFile("Anonymous Pro.ttf"); + platform_memory_result FontFile = ReadEntireFile(Context, "data/Anonymous Pro.ttf"); if (!FontFile.Error) { bitmap_font* Font = PushStruct(&State->Permanent, bitmap_font); @@ -176,7 +176,7 @@ INITIALIZE_APPLICATION(InitializeApplication) State->Camera.LookAt = v3{0, 0, 0}; #if 1 - char Path[] = "blumen_lumen.fold"; + char Path[] = "data/blumen_lumen.fold"; LoadAssembly(State, Context, Path); #endif diff --git a/src/app/foldhaus_assembly.cpp b/src/app/foldhaus_assembly.cpp index 0e17226..c733c6b 100644 --- a/src/app/foldhaus_assembly.cpp +++ b/src/app/foldhaus_assembly.cpp @@ -70,7 +70,7 @@ s32 TempAssemblyOffsetsCount = 3; internal void LoadAssembly (app_state* State, context Context, char* Path) { - platform_memory_result AssemblyFile = Context.PlatformReadEntireFile(Path); + platform_memory_result AssemblyFile = ReadEntireFile(Context, Path); if (AssemblyFile.Error == PlatformMemory_NoError) { assembly_definition AssemblyDefinition = ParseAssemblyFile(AssemblyFile.Base, AssemblyFile.Size, &State->Transient, State->GlobalLog); diff --git a/src/app/foldhaus_platform.h b/src/app/foldhaus_platform.h index 2ee07cf..180e27c 100644 --- a/src/app/foldhaus_platform.h +++ b/src/app/foldhaus_platform.h @@ -63,6 +63,8 @@ enum platform_memory_error PlatformMemory_UnknownError, // You should implement handling this when you see it }; +// TODO(Peter): Change this to just be data +// - Base, and Size struct platform_memory_result { u8* Base; @@ -104,6 +106,13 @@ typedef PLATFORM_WRITE_ENTIRE_FILE(platform_write_entire_file); #define PLATFORM_GET_FILE_PATH(name) b32 name(char* PathBuffer, s32 BufferLength, const char* FilterStrings) typedef PLATFORM_GET_FILE_PATH(platform_get_file_path); +struct platform_file_handler +{ + platform_read_entire_file* ReadEntireFile; + platform_write_entire_file* WriteEntireFile; + platform_get_file_path* GetFilePath; +}; + #define PLATFORM_GET_GPU_TEXTURE_HANDLE(name) s32 name(u8* Memory, s32 Width, s32 Height) typedef PLATFORM_GET_GPU_TEXTURE_HANDLE(platform_get_gpu_texture_handle); @@ -117,13 +126,13 @@ struct platform_network_address typedef s32 platform_socket_handle; typedef s32 platform_network_address_handle; -#define PLATFORM_GET_SOCKET_HANDLE(name) platform_socket_handle name(s32 Multicast_TimeToLive) +#define PLATFORM_GET_SOCKET_HANDLE(name) platform_socket_handle name(s32 Multicast_TimeToLive) typedef PLATFORM_GET_SOCKET_HANDLE(platform_get_socket_handle); #define PLATFORM_GET_SEND_ADDRESS_HANDLE(name) platform_network_address_handle name(s32 AddressFamily, u16 Port, u32 Address) typedef PLATFORM_GET_SEND_ADDRESS_HANDLE(platform_get_send_address); -#define PLATFORM_SET_SOCKET_OPTION(name) s32 name(platform_socket_handle SocketHandle, s32 Level, s32 Option, const char* OptionValue, s32 OptionLength) +#define PLATFORM_SET_SOCKET_OPTION(name) s32 name(platform_socket_handle SocketHandle, s32 Level, s32 Option, const char* OptionValue, s32 OptionLength) typedef PLATFORM_SET_SOCKET_OPTION(platform_set_socket_option); #define PLATFORM_SEND_TO(name) s32 name(platform_socket_handle SocketHandle, u32 Address, u32 Port, const char* Buffer, s32 BufferLength, s32 Flags) @@ -134,7 +143,7 @@ typedef PLATFORM_CLOSE_SOCKET(platform_close_socket); // File IO -// TODO(Peter): +// TODO(Peter): struct directory_listing { string Path; @@ -258,7 +267,9 @@ struct context platform_alloc* PlatformAlloc; platform_free* PlatformFree; platform_realloc* PlatformRealloc; - platform_read_entire_file* PlatformReadEntireFile; + + platform_file_handler FileHandler; + platform_write_entire_file* PlatformWriteEntireFile; platform_get_file_path* PlatformGetFilePath; platform_get_gpu_texture_handle* PlatformGetGPUTextureHandle; @@ -270,6 +281,47 @@ struct context platform_close_socket* PlatformCloseSocket; }; +// File Handler +internal platform_memory_result +ReadEntireFile(platform_file_handler FileHandler, char* Path) +{ + // TODO(Peter): Convert Path to be a string + platform_memory_result Result = FileHandler.ReadEntireFile(Path); + return Result; +} +internal platform_memory_result +ReadEntireFile(context Context, char* Path) +{ + return ReadEntireFile(Context.FileHandler, Path); +} + +internal b32 +WriteEntireFile(platform_file_handler FileHandler, char* Path, u8* Contents, u32 Size) +{ + // TODO(Peter): Convert Path to be a string + // TODO(Peter): Overload to take a data struct instead of Contents And Size + b32 Result = FileHandler.WriteEntireFile(Path, Contents, Size); + return Result; +} +internal b32 +WriteEntireFile(context Context, char* Path, u8* Contents, u32 Size) +{ + return WriteEntireFile(Context.FileHandler, Path, Contents, Size); +} + +internal b32 +GetFilePath(platform_file_handler FileHandler, char* PathBuffer, s32 BufferLength, char* FilterStrings) +{ + // TODO(Peter): Convert Path to be a string + b32 Result = FileHandler.GetFilePath(PathBuffer, BufferLength, (const char*)FilterStrings); + return Result; +} +internal b32 +GetFilePath(context Context, char* PathBuffer, s32 BufferLength, char* FilterStrings) +{ + return GetFilePath(Context.FileHandler, PathBuffer, BufferLength, FilterStrings); +} + #define FOLDHAUS_PLATFORM_H #endif // FOLDHAUS_PLATFORM_H \ No newline at end of file diff --git a/src/app/panels/foldhaus_panel_hierarchy.h b/src/app/panels/foldhaus_panel_hierarchy.h index 6f1ff6f..2452f22 100644 --- a/src/app/panels/foldhaus_panel_hierarchy.h +++ b/src/app/panels/foldhaus_panel_hierarchy.h @@ -66,7 +66,7 @@ HierarchyView_Render(panel Panel, rect PanelBounds, render_command_buffer* Rende if (ui_LayoutButton(&State->Interface_, &Layout, TempString, ListItemBGColor, ListItemHover, ListItemSelected)) { char FilePath[256]; - b32 Success = Context.PlatformGetFilePath(FilePath, 256, "Foldhaus Files\0*.fold\0\0"); + b32 Success = GetFilePath(Context, FilePath, 256, "Foldhaus Files\0*.fold\0\0"); if (Success) { LoadAssembly(State, Context, FilePath); diff --git a/src/app/win32_foldhaus.cpp b/src/app/win32_foldhaus.cpp index cf2f5c1..3155e6b 100644 --- a/src/app/win32_foldhaus.cpp +++ b/src/app/win32_foldhaus.cpp @@ -132,7 +132,7 @@ WorkerThreadProc (LPVOID InputThreadInfo) Entry = CompleteAndTakeNextJob(ThreadInfo->Queue, Entry); if (Entry.IsValid) { - ThreadInfo->Queue->Jobs[Entry.Index].WorkProc(ThreadInfo->ID, + ThreadInfo->Queue->Jobs[Entry.Index].WorkProc(ThreadInfo->ID, ThreadInfo->Queue->Jobs[Entry.Index].Data); } else @@ -176,10 +176,10 @@ PLATFORM_SET_SOCKET_OPTION(Win32SetSocketOption) PLATFORM_GET_SOCKET_HANDLE(Win32GetSocketHandle) { - // NOTE(Peter): These used to be passed in as paramters, but we only use this function + // NOTE(Peter): These used to be passed in as paramters, but we only use this function // with AF_INET, SOCK_DGRAM, and Protocol = 0. These are also platform specific values // so I was having to include windows.h in the platform agnostic code to accomodate that - // function signature. + // function signature. s32 AddressFamily = AF_INET; s32 Type = SOCK_DGRAM; s32 Protocol = 0; @@ -207,7 +207,7 @@ PLATFORM_GET_SOCKET_HANDLE(Win32GetSocketHandle) SocketValues[NewSocketIndex].Socket = socket(AddressFamily, Type, Protocol); - int Error = Win32SetSocketOption(NewSocketIndex, IPPROTO_IP, IP_MULTICAST_TTL, + int Error = Win32SetSocketOption(NewSocketIndex, IPPROTO_IP, IP_MULTICAST_TTL, (const char*)(&Multicast_TimeToLive), sizeof(Multicast_TimeToLive)); return (platform_socket_handle)NewSocketIndex; @@ -265,7 +265,7 @@ GET_FONT_INFO(Win32GetFontInfo) CurrentFont = CreateFont(PixelHeight, 0, 0, 0, FontWeight, - Italic, + Italic, Underline, Strikeout, ANSI_CHARSET, @@ -311,7 +311,7 @@ DRAW_FONT_CODEPOINT(Win32DrawFontCodepoint) COLORREF PixelColor; for (u32 Y = 0; Y < *OutHeight; Y++) { - // NOTE(Peter): XOffset * 4 b/c its 4 bytes per pixel. + // NOTE(Peter): XOffset * 4 b/c its 4 bytes per pixel. u8* Channel = (u8*)Row + (XOffset * 4); for (u32 X = 0; X < *OutWidth; X++) { @@ -392,7 +392,7 @@ HandleWindowMessage (MSG Message, window* Window, input_queue* InputQueue, mouse b32 AltDown = GetKeyState(VK_MENU) & 0x8000; b32 CtrlDown = GetKeyState(VK_CONTROL) & 0x8000; - AddInputEventEntry(InputQueue, KeyCode_MouseLeftButton, false, true, + AddInputEventEntry(InputQueue, KeyCode_MouseLeftButton, false, true, ShiftDown, AltDown, CtrlDown, false); Mouse->LeftButtonState = KeyState_IsDown & ~KeyState_WasDown; @@ -414,7 +414,7 @@ HandleWindowMessage (MSG Message, window* Window, input_queue* InputQueue, mouse b32 AltDown = GetKeyState(VK_MENU) & 0x8000; b32 CtrlDown = GetKeyState(VK_CONTROL) & 0x8000; - AddInputEventEntry(InputQueue, KeyCode_MouseMiddleButton, false, true, + AddInputEventEntry(InputQueue, KeyCode_MouseMiddleButton, false, true, ShiftDown, AltDown, CtrlDown, false); Mouse->MiddleButtonState = KeyState_IsDown & ~KeyState_WasDown; @@ -428,7 +428,7 @@ HandleWindowMessage (MSG Message, window* Window, input_queue* InputQueue, mouse b32 AltDown = GetKeyState(VK_MENU) & 0x8000; b32 CtrlDown = GetKeyState(VK_CONTROL) & 0x8000; - AddInputEventEntry(InputQueue, KeyCode_MouseRightButton, false, true, + AddInputEventEntry(InputQueue, KeyCode_MouseRightButton, false, true, ShiftDown, AltDown, CtrlDown, false); Mouse->RightButtonState = KeyState_IsDown & ~KeyState_WasDown; Mouse->DownPos = Mouse->Pos; @@ -443,7 +443,7 @@ HandleWindowMessage (MSG Message, window* Window, input_queue* InputQueue, mouse b32 AltDown = GetKeyState(VK_MENU) & 0x8000; b32 CtrlDown = GetKeyState(VK_CONTROL) & 0x8000; - AddInputEventEntry(InputQueue, KeyCode_MouseLeftButton, true, false, + AddInputEventEntry(InputQueue, KeyCode_MouseLeftButton, true, false, ShiftDown, AltDown, CtrlDown, false); Mouse->LeftButtonState = ~KeyState_IsDown & KeyState_WasDown; @@ -457,7 +457,7 @@ HandleWindowMessage (MSG Message, window* Window, input_queue* InputQueue, mouse b32 AltDown = GetKeyState(VK_MENU) & 0x8000; b32 CtrlDown = GetKeyState(VK_CONTROL) & 0x8000; - AddInputEventEntry(InputQueue, KeyCode_MouseMiddleButton, true, false, + AddInputEventEntry(InputQueue, KeyCode_MouseMiddleButton, true, false, ShiftDown, AltDown, CtrlDown, false); Mouse->MiddleButtonState = ~KeyState_IsDown & KeyState_WasDown; @@ -471,7 +471,7 @@ HandleWindowMessage (MSG Message, window* Window, input_queue* InputQueue, mouse b32 AltDown = GetKeyState(VK_MENU) & 0x8000; b32 CtrlDown = GetKeyState(VK_CONTROL) & 0x8000; - AddInputEventEntry(InputQueue, KeyCode_MouseRightButton, true, false, + AddInputEventEntry(InputQueue, KeyCode_MouseRightButton, true, false, ShiftDown, AltDown, CtrlDown, false); Mouse->RightButtonState = ~KeyState_IsDown & KeyState_WasDown; @@ -496,7 +496,7 @@ HandleWindowMessage (MSG Message, window* Window, input_queue* InputQueue, mouse b32 CtrlDown = GetKeyState(VK_CONTROL) & 0x8000; // New Input Queue - AddInputEventEntry(InputQueue, Key, KeyWasDown, KeyIsDown, + AddInputEventEntry(InputQueue, Key, KeyWasDown, KeyIsDown, ShiftDown, AltDown, CtrlDown, false); }break; @@ -553,7 +553,7 @@ Win32Realloc(u8* Buf, s32 OldSize, s32 NewSize) return NewMemory; } -internal s32 +internal s32 Win32GetThreadId() { s32 Result = GetCurrentThreadId(); @@ -561,8 +561,8 @@ Win32GetThreadId() } // NOTE(Peter): Only meant to take one of the values specified below: -// IDC_APPSTARTING, IDC_ARROW, IDC_CROSS, IDC_HAND, IDC_HELP, IDC_IBEAM, -// IDC_ICON, IDC_NO, IDC_SIZE, IDC_SIZEALL, IDC_SIZENESW, IDC_SIZENS, IDC_SIZENWSE, +// IDC_APPSTARTING, IDC_ARROW, IDC_CROSS, IDC_HAND, IDC_HELP, IDC_IBEAM, +// IDC_ICON, IDC_NO, IDC_SIZE, IDC_SIZEALL, IDC_SIZENESW, IDC_SIZENS, IDC_SIZENWSE, // IDC_SIZEWE, IDC_UPARROW, IDC_WAIT internal HCURSOR Win32LoadSystemCursor(char* CursorIdentifier) @@ -601,12 +601,12 @@ WinMain ( GlobalDebugServices = (debug_services*)malloc(sizeof(debug_services)); s32 DebugThreadCount = PLATFORM_THREAD_COUNT + 1; - InitDebugServices(GlobalDebugServices, - PerformanceCountFrequency, - DEBUGAlloc, - Win32Realloc, - GetWallClock, - Win32GetThreadId, + InitDebugServices(GlobalDebugServices, + PerformanceCountFrequency, + DEBUGAlloc, + Win32Realloc, + GetWallClock, + Win32GetThreadId, DebugThreadCount); input_queue InputQueue; @@ -666,9 +666,9 @@ WinMain ( Context.PlatformAlloc = Win32Alloc; Context.PlatformFree = Win32Free; Context.PlatformRealloc = Win32Realloc; - Context.PlatformReadEntireFile = Win32ReadEntireFile; - Context.PlatformWriteEntireFile = Win32WriteEntireFile; - Context.PlatformGetFilePath = Win32SystemDialogueOpenFile; + Context.FileHandler.ReadEntireFile = Win32ReadEntireFile; + Context.FileHandler.WriteEntireFile = Win32WriteEntireFile; + Context.FileHandler.GetFilePath = Win32SystemDialogueOpenFile; Context.PlatformGetGPUTextureHandle = Win32GetGPUTextureHandle; Context.PlatformGetSocketHandle = Win32GetSocketHandle; Context.PlatformSetSocketOption = Win32SetSocketOption; @@ -702,9 +702,9 @@ WinMain ( Context.WindowIsVisible = true; while (Running) { - if (GlobalDebugServices->RecordFrames) - { - EndDebugFrame(GlobalDebugServices); + if (GlobalDebugServices->RecordFrames) + { + EndDebugFrame(GlobalDebugServices); } DEBUG_TRACK_SCOPE(MainLoop);