worked out dialogue box, work queue, stubbed more functions
This commit is contained in:
parent
670726442b
commit
80b32ca4ed
|
@ -117,7 +117,7 @@ PLAT_THREAD_SIG(job_thread_proc){
|
||||||
// with the cancel job routine, which may try to cancel this job
|
// with the cancel job routine, which may try to cancel this job
|
||||||
// at the same time that we try to run it
|
// at the same time that we try to run it
|
||||||
|
|
||||||
i32 safe_running_thread =InterlockedCompareExchange(&full_job->running_thread, thread->id, THREAD_NOT_ASSIGNED);
|
i32 safe_running_thread = InterlockedCompareExchange(&full_job->running_thread, thread->id, THREAD_NOT_ASSIGNED);
|
||||||
|
|
||||||
if (safe_running_thread == THREAD_NOT_ASSIGNED){
|
if (safe_running_thread == THREAD_NOT_ASSIGNED){
|
||||||
thread->job_id = full_job->id;
|
thread->job_id = full_job->id;
|
||||||
|
|
|
@ -89,6 +89,7 @@
|
||||||
LOGF("%s: " fmt "\n", __func__, ##__VA_ARGS__); \
|
LOGF("%s: " fmt "\n", __func__, ##__VA_ARGS__); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
// TODO(allen): Make an intrinsics header that uses the cracked OS to define a single set of intrinsic names.
|
||||||
#define InterlockedCompareExchange(dest, ex, comp) \
|
#define InterlockedCompareExchange(dest, ex, comp) \
|
||||||
__sync_val_compare_and_swap((dest), (comp), (ex))
|
__sync_val_compare_and_swap((dest), (comp), (ex))
|
||||||
|
|
||||||
|
|
|
@ -48,11 +48,17 @@
|
||||||
#include <OpenGL/OpenGL.h>
|
#include <OpenGL/OpenGL.h>
|
||||||
#include <OpenGL/gl.h>
|
#include <OpenGL/gl.h>
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
#include "4ed_shared_thread_constants.h"
|
#include "4ed_shared_thread_constants.h"
|
||||||
#include "unix_threading_wrapper.h"
|
#include "unix_threading_wrapper.h"
|
||||||
|
|
||||||
|
// TODO(allen): Make an intrinsics header that uses the cracked OS to define a single set of intrinsic names.
|
||||||
|
#define InterlockedCompareExchange(dest, ex, comp) \
|
||||||
|
__sync_val_compare_and_swap((dest), (comp), (ex))
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
#define SLASH '/'
|
#define SLASH '/'
|
||||||
|
@ -67,6 +73,8 @@ global System_Functions sysfunc;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
|
#include "osx_objective_c_to_cpp_links.h"
|
||||||
|
OSX_Vars osx;
|
||||||
global Render_Target target;
|
global Render_Target target;
|
||||||
global Application_Memory memory_vars;
|
global Application_Memory memory_vars;
|
||||||
global Plat_Settings plat_settings;
|
global Plat_Settings plat_settings;
|
||||||
|
@ -79,15 +87,52 @@ global Coroutine_System_Auto_Alloc coroutines;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
#include "unix_4ed_functions.cpp"
|
#include "mac_error_box.cpp"
|
||||||
|
|
||||||
#include "osx_objective_c_to_cpp_links.h"
|
|
||||||
OSX_Vars osx;
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
|
|
||||||
|
#include "unix_4ed_functions.cpp"
|
||||||
|
#include "4ed_shared_file_handling.cpp"
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
|
||||||
|
internal void
|
||||||
|
system_schedule_step(){
|
||||||
|
// NOTE(allen): It is unclear to me right now what we might need to actually do here.
|
||||||
|
// The run loop in a Cocoa app will keep rendering the app anyway, I might just need to set a
|
||||||
|
// "do_new_frame" variable of some kind to true here.
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
|
||||||
|
#include "4ed_work_queues.cpp"
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
|
||||||
|
// TODO(allen): add a "shown but auto-hides on timer" setting here.
|
||||||
|
internal
|
||||||
|
Sys_Show_Mouse_Cursor_Sig(system_show_mouse_cursor){
|
||||||
|
// TODO(allen)
|
||||||
|
}
|
||||||
|
|
||||||
|
internal
|
||||||
|
Sys_Set_Fullscreen_Sig(system_set_fullscreen){
|
||||||
|
osx.do_toggle = (osx.full_screen != full_screen);
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal
|
||||||
|
Sys_Is_Fullscreen_Sig(system_is_fullscreen){
|
||||||
|
b32 result = (osx.full_screen != osx.do_toggle);
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// HACK(allen): Why does this work differently from the win32 version!?
|
||||||
|
internal
|
||||||
|
Sys_Send_Exit_Signal_Sig(system_send_exit_signal){
|
||||||
|
osx.running = false;
|
||||||
|
}
|
||||||
|
|
||||||
#include "4ed_coroutine_functions.cpp"
|
#include "4ed_coroutine_functions.cpp"
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -107,8 +152,7 @@ Sys_Post_Clipboard_Sig(system_post_clipboard){
|
||||||
}
|
}
|
||||||
memcpy(osx.clipboard_space, str.str, str.size);
|
memcpy(osx.clipboard_space, str.str, str.size);
|
||||||
osx.clipboard_space[str.size] = 0;
|
osx.clipboard_space[str.size] = 0;
|
||||||
string = osx.clipboard_space
|
string = osx.clipboard_space;
|
||||||
;
|
|
||||||
}
|
}
|
||||||
osx_post_to_clipboard(string);
|
osx_post_to_clipboard(string);
|
||||||
}
|
}
|
||||||
|
@ -120,27 +164,27 @@ Sys_Post_Clipboard_Sig(system_post_clipboard){
|
||||||
internal
|
internal
|
||||||
Sys_CLI_Call_Sig(system_cli_call){
|
Sys_CLI_Call_Sig(system_cli_call){
|
||||||
// b32 #(char *path, char *script_name, CLI_Handles *cli_out)
|
// b32 #(char *path, char *script_name, CLI_Handles *cli_out)
|
||||||
// TODO
|
NotImplemented;
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal
|
internal
|
||||||
Sys_CLI_Begin_Update_Sig(system_cli_begin_update){
|
Sys_CLI_Begin_Update_Sig(system_cli_begin_update){
|
||||||
// void #(CLI_Handles *cli)
|
// void #(CLI_Handles *cli)
|
||||||
// TODO
|
NotImplemented;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal
|
internal
|
||||||
Sys_CLI_Update_Step_Sig(system_cli_update_step){
|
Sys_CLI_Update_Step_Sig(system_cli_update_step){
|
||||||
// b32 #(CLI_Handles *cli, char *dest, u32 max, u32 *amount)
|
// b32 #(CLI_Handles *cli, char *dest, u32 max, u32 *amount)
|
||||||
// TODO
|
NotImplemented;
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal
|
internal
|
||||||
Sys_CLI_End_Update_Sig(system_cli_end_update){
|
Sys_CLI_End_Update_Sig(system_cli_end_update){
|
||||||
// b32 #(CLI_Handles *cli)
|
// b32 #(CLI_Handles *cli)
|
||||||
// TODO
|
NotImplemented;
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,7 +241,7 @@ osx_init(){
|
||||||
// Memory init
|
// Memory init
|
||||||
//
|
//
|
||||||
|
|
||||||
memset(&linuxvars, 0, sizeof(linuxvars));
|
memset(&osx, 0, sizeof(osx));
|
||||||
memset(&target, 0, sizeof(target));
|
memset(&target, 0, sizeof(target));
|
||||||
memset(&memory_vars, 0, sizeof(memory_vars));
|
memset(&memory_vars, 0, sizeof(memory_vars));
|
||||||
memset(&plat_settings, 0, sizeof(plat_settings));
|
memset(&plat_settings, 0, sizeof(plat_settings));
|
||||||
|
|
|
@ -38,6 +38,16 @@ osx_post_to_clipboard(char *str){
|
||||||
osx.just_posted_to_clipboard = true;
|
osx.just_posted_to_clipboard = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
osx_error_dialogue(char *str){
|
||||||
|
NSAlert *alert = [[NSAlert alloc] init];
|
||||||
|
[alert addButtonWithTitle:@"OK"];
|
||||||
|
NSString *text = [NSString stringWithUTF8String:str];
|
||||||
|
[alert setMessageText:text];
|
||||||
|
[alert setAlertStyle:NSCriticalAlertStyle];
|
||||||
|
[alert runModal];
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Entry point, OpenGL window setup.
|
// Entry point, OpenGL window setup.
|
||||||
//
|
//
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Mr. 4th Dimention - Allen Webster
|
||||||
|
*
|
||||||
|
* 26.09.2017
|
||||||
|
*
|
||||||
|
* Mac error box implementation.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// TOP
|
||||||
|
|
||||||
|
internal void
|
||||||
|
system_error_box(char *msg){
|
||||||
|
osx_error_dialogue(msg);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// BOTTOM
|
||||||
|
|
|
@ -39,6 +39,9 @@ typedef struct OSX_Vars{
|
||||||
|
|
||||||
char *clipboard_space;
|
char *clipboard_space;
|
||||||
umem clipboard_space_max;
|
umem clipboard_space_max;
|
||||||
|
|
||||||
|
b32 full_screen;
|
||||||
|
b32 do_toggle;
|
||||||
} OSX_Vars;
|
} OSX_Vars;
|
||||||
|
|
||||||
// In C++ layer.
|
// In C++ layer.
|
||||||
|
@ -69,6 +72,9 @@ osx_init();
|
||||||
external void
|
external void
|
||||||
osx_post_to_clipboard(char *str);
|
osx_post_to_clipboard(char *str);
|
||||||
|
|
||||||
|
external void
|
||||||
|
osx_error_dialogue(char *str);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// BOTTOM
|
// BOTTOM
|
Loading…
Reference in New Issue