Files
djstdlib/gfx/platform.h
2026-06-04 18:22:30 +02:00

92 lines
1.9 KiB
C

#ifndef PLATFORM_H
#define PLATFORM_H
#include "../core.h"
typedef struct OS_Input OS_Input;
struct OS_Input {
struct {
bool escape;
bool enter;
bool space;
bool lshift;
bool x;
bool y;
bool z;
bool w;
} keyboard;
struct {
union {
struct {
real32 x;
real32 y;
};
Vec2 point;
};
struct {
real64 dX;
real64 dY;
} scroll;
bool btnLeft;
bool btnRight;
bool btnMiddle;
} mouse;
};
enum OS_WindowEventKind {
OS_WindowEventKind_Resize,
// ---
OS_WindowEventKind_Count,
};
typedef struct OS_WindowEvent OS_WindowEvent;
struct OS_WindowEvent {
enum OS_WindowEventKind kind;
union {
struct {
int32 width;
int32 height;
} resize;
};
};
struct OS_Window;
typedef void (*OS_WindowEventCallback)(OS_WindowEvent *e, struct OS_Window *userData);
typedef struct OS_WindowInitParams OS_WindowInitParams;
struct OS_WindowInitParams {
string name;
int32 width;
int32 height;
void *data;
OS_WindowEventCallback eventHandler;
};
typedef struct OS_Window OS_Window;
struct OS_Window {
void *handle;
int32 width;
int32 height;
real64 fps;
void *userData;
void *platformData;
struct {
real64 start;
real64 fps;
} frame;
};
DefineResult(OS_Window*, OS_WindowInit);
OS_WindowInitResult os_windowInit(Arena *arena, OS_WindowInitParams params);
bool os_windowShouldClose(OS_Window *window);
void os_windowProcessEvents(OS_Window *window);
void os_windowGetInput(OS_Window *window, OS_Input *input);
void os_windowSwapBuffers(OS_Window *window);
void os_windowFrameBegin(OS_Window *window);
void os_windowFrameEnd(OS_Window *window);
void os_windowTerminate(OS_Window *window);
#endif