228 lines
5.1 KiB
C
228 lines
5.1 KiB
C
#ifndef _OPEN_WINDOW_H_
|
|
#define _OPEN_WINDOW_H_
|
|
|
|
#define WINDOW_DEFAULT_FPS 60
|
|
|
|
#define WINDOW_KEY_COUNT 256
|
|
|
|
#define WINDOW_MOUSE_BUTTON_COUNT 5
|
|
#define WINDOW_MOUSE_BUTTON1 (Button1)
|
|
#define WINDOW_MOUSE_BUTTON2 (Button2)
|
|
#define WINDOW_MOUSE_BUTTON3 (Button3)
|
|
#define WINDOW_MOUSE_BUTTON4 (Button4)
|
|
#define WINDOW_MOUSE_BUTTON5 (Button5)
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
|
|
int gladLoadGL(void);
|
|
|
|
#include "GL/gl.h"
|
|
|
|
#ifndef _WIN32
|
|
|
|
#define Window X11Window
|
|
#include <GL/glx.h>
|
|
#include <X11/X.h>
|
|
#include <X11/Xlib.h>
|
|
#include <X11/Xutil.h>
|
|
#undef Window
|
|
|
|
typedef struct {
|
|
GLXFBConfig config;
|
|
GLXContext context;
|
|
} GLX;
|
|
|
|
typedef struct {
|
|
Display * display;
|
|
X11Window window;
|
|
Colormap cmap;
|
|
long eventMask;
|
|
} X11;
|
|
|
|
typedef struct {
|
|
struct {
|
|
char current[WINDOW_KEY_COUNT];
|
|
char last[WINDOW_KEY_COUNT];
|
|
} keyboard;
|
|
struct {
|
|
bool current[WINDOW_MOUSE_BUTTON_COUNT];
|
|
bool last[WINDOW_MOUSE_BUTTON_COUNT];
|
|
|
|
int x;
|
|
int y;
|
|
} mouse;
|
|
} WindowIOState;
|
|
|
|
typedef struct {
|
|
struct timespec * t1;
|
|
struct timespec * t2;
|
|
double dt;
|
|
} WindowDeltaTime;
|
|
|
|
typedef struct Window Window;
|
|
|
|
typedef struct Window {
|
|
WindowIOState io;
|
|
GLX glx;
|
|
X11 x;
|
|
WindowDeltaTime dt;
|
|
uint32_t fps;
|
|
int width;
|
|
int height;
|
|
} Window;
|
|
|
|
#define WINDOW_KEY_Q ("q")
|
|
#define WINDOW_KEY_W ("w")
|
|
#define WINDOW_KEY_E ("e")
|
|
#define WINDOW_KEY_R ("r")
|
|
#define WINDOW_KEY_T ("t")
|
|
#define WINDOW_KEY_Y ("y")
|
|
#define WINDOW_KEY_U ("u")
|
|
#define WINDOW_KEY_I ("i")
|
|
#define WINDOW_KEY_O ("o")
|
|
#define WINDOW_KEY_P ("p")
|
|
#define WINDOW_KEY_A ("a")
|
|
#define WINDOW_KEY_S ("s")
|
|
#define WINDOW_KEY_D ("d")
|
|
#define WINDOW_KEY_F ("f")
|
|
#define WINDOW_KEY_G ("g")
|
|
#define WINDOW_KEY_H ("h")
|
|
#define WINDOW_KEY_J ("j")
|
|
#define WINDOW_KEY_K ("k")
|
|
#define WINDOW_KEY_L ("l")
|
|
#define WINDOW_KEY_Z ("z")
|
|
#define WINDOW_KEY_X ("x")
|
|
#define WINDOW_KEY_C ("c")
|
|
#define WINDOW_KEY_V ("v")
|
|
#define WINDOW_KEY_B ("b")
|
|
#define WINDOW_KEY_N ("n")
|
|
#define WINDOW_KEY_M ("m")
|
|
|
|
#define WINDOW_KEY_1 ("1")
|
|
#define WINDOW_KEY_2 ("2")
|
|
#define WINDOW_KEY_3 ("3")
|
|
#define WINDOW_KEY_4 ("4")
|
|
#define WINDOW_KEY_5 ("5")
|
|
#define WINDOW_KEY_6 ("6")
|
|
#define WINDOW_KEY_7 ("7")
|
|
#define WINDOW_KEY_8 ("8")
|
|
#define WINDOW_KEY_9 ("9")
|
|
#define WINDOW_KEY_0 ("0")
|
|
|
|
#define WINDOW_KEY_ESC ("Escape")
|
|
#define WINDOW_KEY_SPACE ("space")
|
|
|
|
bool windowKeyPressed(Window * window, char * key);
|
|
bool windowKeyReleased(Window * window, char * key);
|
|
bool windowKeyHeld(Window * window, char * key);
|
|
|
|
bool windowKeyShift(Window * window);
|
|
bool windowKeyCtrl(Window * window);
|
|
bool windowKeyAlt(Window * window);
|
|
|
|
bool windowMousePressed(Window * window, int button);
|
|
bool windowMouseHeld(Window * window, int button);
|
|
bool windowMouseReleased(Window * window, int button);
|
|
|
|
#else
|
|
|
|
#include <windows.h>
|
|
|
|
typedef struct {
|
|
HINSTANCE instance;
|
|
HDC display;
|
|
HWND window;
|
|
HGLRC context;
|
|
} WGL;
|
|
|
|
typedef struct {
|
|
BYTE current[WINDOW_KEY_COUNT];
|
|
BYTE last[WINDOW_KEY_COUNT];
|
|
} WindowIOState;
|
|
|
|
typedef struct {
|
|
LARGE_INTEGER t1;
|
|
LARGE_INTEGER t2;
|
|
LARGE_INTEGER freq;
|
|
double dt;
|
|
} WindowDeltaTime;
|
|
|
|
typedef struct Window Window;
|
|
|
|
typedef struct Window {
|
|
WindowIOState io;
|
|
WGL wgl;
|
|
WindowDeltaTime dt;
|
|
uint32_t fps;
|
|
int width;
|
|
int height;
|
|
} Window;
|
|
|
|
#define WINDOW_KEY_Q ('Q')
|
|
#define WINDOW_KEY_W ('W')
|
|
#define WINDOW_KEY_E ('E')
|
|
#define WINDOW_KEY_R ('R')
|
|
#define WINDOW_KEY_T ('T')
|
|
#define WINDOW_KEY_Y ('Y')
|
|
#define WINDOW_KEY_U ('U')
|
|
#define WINDOW_KEY_I ('I')
|
|
#define WINDOW_KEY_O ('O')
|
|
#define WINDOW_KEY_P ('P')
|
|
#define WINDOW_KEY_A ('A')
|
|
#define WINDOW_KEY_S ('S')
|
|
#define WINDOW_KEY_D ('D')
|
|
#define WINDOW_KEY_F ('F')
|
|
#define WINDOW_KEY_G ('G')
|
|
#define WINDOW_KEY_H ('H')
|
|
#define WINDOW_KEY_J ('J')
|
|
#define WINDOW_KEY_K ('K')
|
|
#define WINDOW_KEY_L ('L')
|
|
#define WINDOW_KEY_Z ('Z')
|
|
#define WINDOW_KEY_X ('X')
|
|
#define WINDOW_KEY_C ('C')
|
|
#define WINDOW_KEY_V ('V')
|
|
#define WINDOW_KEY_B ('B')
|
|
#define WINDOW_KEY_N ('N')
|
|
#define WINDOW_KEY_M ('M')
|
|
|
|
#define WINDOW_KEY_1 ('1')
|
|
#define WINDOW_KEY_2 ('2')
|
|
#define WINDOW_KEY_3 ('3')
|
|
#define WINDOW_KEY_4 ('4')
|
|
#define WINDOW_KEY_5 ('5')
|
|
#define WINDOW_KEY_6 ('6')
|
|
#define WINDOW_KEY_7 ('7')
|
|
#define WINDOW_KEY_8 ('8')
|
|
#define WINDOW_KEY_9 ('9')
|
|
#define WINDOW_KEY_0 ('0')
|
|
|
|
#define WINDOW_KEY_ESC (VK_ESCAPE)
|
|
#define WINDOW_KEY_SPACE (VK_SPACE)
|
|
|
|
bool windowKeyPressed(Window * window, int key);
|
|
bool windowKeyReleased(Window * window, int key);
|
|
bool windowKeyHeld(Window * window, int key);
|
|
|
|
bool windowKeyShift(Window * window);
|
|
bool windowKeyCtrl(Window * window);
|
|
bool windowKeyAlt(Window * window);
|
|
|
|
#endif // _WIN32
|
|
|
|
Window * openWindow(const char * name, size_t width, size_t height);
|
|
void windowSetFps(Window * window, uint32_t fps);
|
|
double windowGetDeltaTime(Window * window);
|
|
void windowGetSize(Window * window, int * width, int * height);
|
|
void windowGetMousePosition(Window * window, int * x, int * y);
|
|
void windowDraw(Window * window);
|
|
void windowHandleEvents(Window * window);
|
|
void closeWindow(Window * window);
|
|
|
|
int getOpenGLProcs(void);
|
|
|
|
#endif // _OPEN_WINDOW_H_
|