Lumenarium/src/app/platform_osx/gs_osx.mm

77 lines
1.9 KiB
Plaintext

#include <Cocoa/Cocoa.h>
#include "gs_osx_memory.mm"
#include "gs_osx_window.mm"
#include "gs_osx_fileio.mm"
#include "gs_osx_lib.mm"
#include "gs_osx_opengl.mm"
#include "gs_osx_time.mm"
static void
gsosx_ProcessWindowEvents(NSApplication* App, NSWindow* Window)
{
// Process Events
while (true)
{
NSEvent* Event = [App nextEventMatchingMask: NSEventMaskAny untilDate: [NSDate distantPast] inMode: NSDefaultRunLoopMode dequeue: YES];
if (!Event) { break; }
switch([Event type])
{
case NSEventTypeKeyUp:
case NSEventTypeKeyDown:
{
// TODO: Handle Key Presses
}break;
// TODO: Mouse Input
default:
{
[App sendEvent: Event];
}break;
}
}
}
int main(int ArgCount, char** Args)
{
NSApplication* Application = [NSApplication sharedApplication];
[Application setActivationPolicy: NSApplicationActivationPolicyRegular];
gsosx_ApplicationDelegate* Delegate = [[gsosx_ApplicationDelegate alloc] init];
[Application setDelegate: Delegate];
int WindowWidth = 1024;
int WindowHeight = 768;
id AppName = @"Lumenarium";
NSWindow* Window = gsosx_CreateWindow(Application, WindowWidth, WindowHeight, AppName);
// A really cryptic way of asking the window to open
[Window makeKeyAndOrderFront: Application];
NSOpenGLContext* OpenGLContext = gsoo_CreateOpenGLContext(Window, WindowWidth, WindowHeight, true);
gsosx_time_info TimeInfo = gsosx_InitTime();
double TargetSecondsPerFrame = 1.0 / 60;
uint64_t LastFrameEnd = gsosx_GetTime(TimeInfo);
while (true)
{
gsosx_ProcessWindowEvents(Application, Window);
glClearColor(1, 0, 1, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gsoo_SwapBuffers(OpenGLContext);
uint64_t ThisFrameEnd = gsosx_GetTime(TimeInfo);
double FrameSeconds = gsosx_GetSecondsElapsed(LastFrameEnd, ThisFrameEnd, TimeInfo);
double SleepSeconds = TargetSecondsPerFrame - FrameSeconds;
if (SleepSeconds > 0)
{
gsosx_Sleep(SleepSeconds, TimeInfo);
}
}
return (0);
}