- Restructure osx version to use mp_app_internal.h/mp_app.c
- test new run loop structure on osx
This commit is contained in:
parent
72338b1a25
commit
db5b4966e9
|
@ -1,4 +1,5 @@
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
*.dSYM
|
||||||
bin/*
|
bin/*
|
||||||
*.metallib
|
*.metallib
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
set INCLUDES=/I ..\..\src /I ..\..\src\util /I ..\..\src\platform /I ../../ext
|
||||||
|
cl /we4013 /Zi /Zc:preprocessor /std:c11 %INCLUDES% main.c /link /LIBPATH:../../bin milepost.lib user32.lib opengl32.lib gdi32.lib /out:test.exe
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
BINDIR=../../bin
|
||||||
|
RESDIR=../../resources
|
||||||
|
SRCDIR=../../src
|
||||||
|
|
||||||
|
INCLUDES="-I$SRCDIR -I$SRCDIR/util -I$SRCDIR/platform -I$SRCDIR/app"
|
||||||
|
LIBS="-L$BINDIR -lmilepost -framework Carbon -framework Cocoa -framework Metal -framework QuartzCore"
|
||||||
|
FLAGS="-mmacos-version-min=10.15.4 -DDEBUG -DLOG_COMPILE_DEBUG"
|
||||||
|
|
||||||
|
clang -g $FLAGS $LIBS $INCLUDES -o test main.c
|
|
@ -0,0 +1,227 @@
|
||||||
|
/************************************************************//**
|
||||||
|
*
|
||||||
|
* @file: main.cpp
|
||||||
|
* @author: Martin Fouilleul
|
||||||
|
* @date: 30/07/2022
|
||||||
|
* @revision:
|
||||||
|
*
|
||||||
|
*****************************************************************/
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<string.h>
|
||||||
|
|
||||||
|
#define _USE_MATH_DEFINES //NOTE: necessary for MSVC
|
||||||
|
#include<math.h>
|
||||||
|
|
||||||
|
#include"milepost.h"
|
||||||
|
|
||||||
|
#define LOG_SUBSYSTEM "Main"
|
||||||
|
|
||||||
|
unsigned int program;
|
||||||
|
|
||||||
|
const char* vshaderSource =
|
||||||
|
"#version 430\n"
|
||||||
|
"attribute vec4 vPosition;\n"
|
||||||
|
"uniform mat4 transform;\n"
|
||||||
|
"void main()\n"
|
||||||
|
"{\n"
|
||||||
|
" gl_Position = transform*vPosition;\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
const char* fshaderSource =
|
||||||
|
"#version 430\n"
|
||||||
|
"precision mediump float;\n"
|
||||||
|
"void main()\n"
|
||||||
|
"{\n"
|
||||||
|
" gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
void compile_shader(GLuint shader, const char* source)
|
||||||
|
{
|
||||||
|
glShaderSource(shader, 1, &source, 0);
|
||||||
|
glCompileShader(shader);
|
||||||
|
|
||||||
|
int err = glGetError();
|
||||||
|
if(err)
|
||||||
|
{
|
||||||
|
printf("gl error: %i\n", err);
|
||||||
|
}
|
||||||
|
|
||||||
|
int status = 0;
|
||||||
|
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
|
||||||
|
if(!status)
|
||||||
|
{
|
||||||
|
char buffer[256];
|
||||||
|
int size = 0;
|
||||||
|
glGetShaderInfoLog(shader, 256, &size, buffer);
|
||||||
|
printf("shader error: %.*s\n", size, buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
LogLevel(LOG_LEVEL_DEBUG);
|
||||||
|
|
||||||
|
mp_init();
|
||||||
|
|
||||||
|
mp_rect rect = {.x = 100, .y = 100, .w = 800, .h = 600};
|
||||||
|
mp_window window = mp_window_create(rect, "test", 0);
|
||||||
|
|
||||||
|
//NOTE: create surface
|
||||||
|
mg_surface surface = mg_surface_create_for_window(window, MG_BACKEND_GL);
|
||||||
|
|
||||||
|
//NOTE: init shader and gl state
|
||||||
|
GLuint vao;
|
||||||
|
glGenVertexArrays(1, &vao);
|
||||||
|
glBindVertexArray(vao);
|
||||||
|
|
||||||
|
GLuint vertexBuffer;
|
||||||
|
glGenBuffers(1, &vertexBuffer);
|
||||||
|
|
||||||
|
GLfloat vertices[] = {
|
||||||
|
-0.866/2, -0.5/2, 0, 0.866/2, -0.5/2, 0, 0, 0.5, 0};
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
|
||||||
|
unsigned int vshader = glCreateShader(GL_VERTEX_SHADER);
|
||||||
|
unsigned int fshader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||||
|
program = glCreateProgram();
|
||||||
|
|
||||||
|
compile_shader(vshader, vshaderSource);
|
||||||
|
compile_shader(fshader, fshaderSource);
|
||||||
|
|
||||||
|
glAttachShader(program, vshader);
|
||||||
|
glAttachShader(program, fshader);
|
||||||
|
glLinkProgram(program);
|
||||||
|
|
||||||
|
int status = 0;
|
||||||
|
glGetProgramiv(program, GL_LINK_STATUS, &status);
|
||||||
|
if(!status)
|
||||||
|
{
|
||||||
|
char buffer[256];
|
||||||
|
int size = 0;
|
||||||
|
glGetProgramInfoLog(program, 256, &size, buffer);
|
||||||
|
printf("link error: %.*s\n", size, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
glUseProgram(program);
|
||||||
|
|
||||||
|
mp_window_bring_to_front(window);
|
||||||
|
// mp_window_focus(window);
|
||||||
|
|
||||||
|
while(!mp_should_quit())
|
||||||
|
{
|
||||||
|
mp_pump_events(0);
|
||||||
|
mp_event event = {0};
|
||||||
|
while(mp_next_event(&event))
|
||||||
|
{
|
||||||
|
switch(event.type)
|
||||||
|
{
|
||||||
|
case MP_EVENT_WINDOW_CLOSE:
|
||||||
|
{
|
||||||
|
mp_request_quit();
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MP_EVENT_WINDOW_RESIZE:
|
||||||
|
{
|
||||||
|
printf("resized, rect = {%f, %f, %f, %f}\n",
|
||||||
|
event.frame.rect.x,
|
||||||
|
event.frame.rect.y,
|
||||||
|
event.frame.rect.w,
|
||||||
|
event.frame.rect.h);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MP_EVENT_WINDOW_MOVE:
|
||||||
|
{
|
||||||
|
printf("moved, rect = {%f, %f, %f, %f}\n",
|
||||||
|
event.frame.rect.x,
|
||||||
|
event.frame.rect.y,
|
||||||
|
event.frame.rect.w,
|
||||||
|
event.frame.rect.h);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MP_EVENT_MOUSE_MOVE:
|
||||||
|
{
|
||||||
|
printf("mouse moved, pos = {%f, %f}, delta = {%f, %f}\n",
|
||||||
|
event.move.x,
|
||||||
|
event.move.y,
|
||||||
|
event.move.deltaX,
|
||||||
|
event.move.deltaY);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MP_EVENT_MOUSE_WHEEL:
|
||||||
|
{
|
||||||
|
printf("mouse wheel, delta = {%f, %f}\n",
|
||||||
|
event.move.deltaX,
|
||||||
|
event.move.deltaY);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MP_EVENT_MOUSE_ENTER:
|
||||||
|
{
|
||||||
|
printf("mouse enter\n");
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MP_EVENT_MOUSE_LEAVE:
|
||||||
|
{
|
||||||
|
printf("mouse leave\n");
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MP_EVENT_MOUSE_BUTTON:
|
||||||
|
{
|
||||||
|
printf("mouse button %i: %i\n",
|
||||||
|
event.key.code,
|
||||||
|
event.key.action == MP_KEY_PRESS ? 1 : 0);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MP_EVENT_KEYBOARD_KEY:
|
||||||
|
{
|
||||||
|
printf("key %i: %s\n",
|
||||||
|
event.key.code,
|
||||||
|
event.key.action == MP_KEY_PRESS ? "press" : (event.key.action == MP_KEY_RELEASE ? "release" : "repeat"));
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MP_EVENT_KEYBOARD_CHAR:
|
||||||
|
{
|
||||||
|
printf("entered char %s\n", event.character.sequence);
|
||||||
|
} break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mg_surface_prepare(surface);
|
||||||
|
|
||||||
|
glClearColor(0.3, 0.3, 1, 1);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
static float alpha = 0;
|
||||||
|
//f32 aspect = frameSize.x/frameSize.y;
|
||||||
|
f32 aspect = 800/(f32)600;
|
||||||
|
|
||||||
|
glViewport(0, 0, 800, 600);
|
||||||
|
|
||||||
|
GLfloat matrix[] = {cosf(alpha)/aspect, sinf(alpha), 0, 0,
|
||||||
|
-sinf(alpha)/aspect, cosf(alpha), 0, 0,
|
||||||
|
0, 0, 1, 0,
|
||||||
|
0, 0, 0, 1};
|
||||||
|
|
||||||
|
alpha += 2*M_PI/120;
|
||||||
|
|
||||||
|
glUniformMatrix4fv(0, 1, false, matrix);
|
||||||
|
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
|
||||||
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||||
|
|
||||||
|
mg_surface_present(surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
mp_terminate();
|
||||||
|
|
||||||
|
return(0);
|
||||||
|
}
|
|
@ -9,54 +9,10 @@
|
||||||
#include<stdlib.h>
|
#include<stdlib.h>
|
||||||
#include<string.h>
|
#include<string.h>
|
||||||
|
|
||||||
#define _USE_MATH_DEFINES //NOTE: necessary for MSVC
|
|
||||||
#include<math.h>
|
|
||||||
|
|
||||||
#include"milepost.h"
|
#include"milepost.h"
|
||||||
|
|
||||||
#define LOG_SUBSYSTEM "Main"
|
#define LOG_SUBSYSTEM "Main"
|
||||||
|
|
||||||
unsigned int program;
|
|
||||||
|
|
||||||
const char* vshaderSource =
|
|
||||||
"#version 430\n"
|
|
||||||
"attribute vec4 vPosition;\n"
|
|
||||||
"uniform mat4 transform;\n"
|
|
||||||
"void main()\n"
|
|
||||||
"{\n"
|
|
||||||
" gl_Position = transform*vPosition;\n"
|
|
||||||
"}\n";
|
|
||||||
|
|
||||||
const char* fshaderSource =
|
|
||||||
"#version 430\n"
|
|
||||||
"precision mediump float;\n"
|
|
||||||
"void main()\n"
|
|
||||||
"{\n"
|
|
||||||
" gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n"
|
|
||||||
"}\n";
|
|
||||||
|
|
||||||
void compile_shader(GLuint shader, const char* source)
|
|
||||||
{
|
|
||||||
glShaderSource(shader, 1, &source, 0);
|
|
||||||
glCompileShader(shader);
|
|
||||||
|
|
||||||
int err = glGetError();
|
|
||||||
if(err)
|
|
||||||
{
|
|
||||||
printf("gl error: %i\n", err);
|
|
||||||
}
|
|
||||||
|
|
||||||
int status = 0;
|
|
||||||
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
|
|
||||||
if(!status)
|
|
||||||
{
|
|
||||||
char buffer[256];
|
|
||||||
int size = 0;
|
|
||||||
glGetShaderInfoLog(shader, 256, &size, buffer);
|
|
||||||
printf("shader error: %.*s\n", size, buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
LogLevel(LOG_LEVEL_DEBUG);
|
LogLevel(LOG_LEVEL_DEBUG);
|
||||||
|
@ -66,49 +22,8 @@ int main()
|
||||||
mp_rect rect = {.x = 100, .y = 100, .w = 800, .h = 600};
|
mp_rect rect = {.x = 100, .y = 100, .w = 800, .h = 600};
|
||||||
mp_window window = mp_window_create(rect, "test", 0);
|
mp_window window = mp_window_create(rect, "test", 0);
|
||||||
|
|
||||||
//NOTE: create surface
|
|
||||||
mg_surface surface = mg_surface_create_for_window(window, MG_BACKEND_GL);
|
|
||||||
|
|
||||||
//NOTE: init shader and gl state
|
|
||||||
GLuint vao;
|
|
||||||
glGenVertexArrays(1, &vao);
|
|
||||||
glBindVertexArray(vao);
|
|
||||||
|
|
||||||
GLuint vertexBuffer;
|
|
||||||
glGenBuffers(1, &vertexBuffer);
|
|
||||||
|
|
||||||
GLfloat vertices[] = {
|
|
||||||
-0.866/2, -0.5/2, 0, 0.866/2, -0.5/2, 0, 0, 0.5, 0};
|
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
|
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
|
|
||||||
|
|
||||||
|
|
||||||
unsigned int vshader = glCreateShader(GL_VERTEX_SHADER);
|
|
||||||
unsigned int fshader = glCreateShader(GL_FRAGMENT_SHADER);
|
|
||||||
program = glCreateProgram();
|
|
||||||
|
|
||||||
compile_shader(vshader, vshaderSource);
|
|
||||||
compile_shader(fshader, fshaderSource);
|
|
||||||
|
|
||||||
glAttachShader(program, vshader);
|
|
||||||
glAttachShader(program, fshader);
|
|
||||||
glLinkProgram(program);
|
|
||||||
|
|
||||||
int status = 0;
|
|
||||||
glGetProgramiv(program, GL_LINK_STATUS, &status);
|
|
||||||
if(!status)
|
|
||||||
{
|
|
||||||
char buffer[256];
|
|
||||||
int size = 0;
|
|
||||||
glGetProgramInfoLog(program, 256, &size, buffer);
|
|
||||||
printf("link error: %.*s\n", size, buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
glUseProgram(program);
|
|
||||||
|
|
||||||
mp_window_bring_to_front(window);
|
mp_window_bring_to_front(window);
|
||||||
// mp_window_focus(window);
|
mp_window_focus(window);
|
||||||
|
|
||||||
while(!mp_should_quit())
|
while(!mp_should_quit())
|
||||||
{
|
{
|
||||||
|
@ -190,35 +105,6 @@ int main()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mg_surface_prepare(surface);
|
|
||||||
|
|
||||||
glClearColor(0.3, 0.3, 1, 1);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
|
||||||
|
|
||||||
static float alpha = 0;
|
|
||||||
//f32 aspect = frameSize.x/frameSize.y;
|
|
||||||
f32 aspect = 800/(f32)600;
|
|
||||||
|
|
||||||
glViewport(0, 0, 800, 600);
|
|
||||||
|
|
||||||
GLfloat matrix[] = {cosf(alpha)/aspect, sinf(alpha), 0, 0,
|
|
||||||
-sinf(alpha)/aspect, cosf(alpha), 0, 0,
|
|
||||||
0, 0, 1, 0,
|
|
||||||
0, 0, 0, 1};
|
|
||||||
|
|
||||||
alpha += 2*M_PI/120;
|
|
||||||
|
|
||||||
glUniformMatrix4fv(0, 1, false, matrix);
|
|
||||||
|
|
||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
|
|
||||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
|
|
||||||
glEnableVertexAttribArray(0);
|
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLES, 0, 3);
|
|
||||||
|
|
||||||
mg_surface_present(surface);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_terminate();
|
mp_terminate();
|
||||||
|
|
|
@ -355,6 +355,11 @@ mg_surface mg_surface_nil()
|
||||||
return((mg_surface){.h = 0});
|
return((mg_surface){.h = 0});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool mg_surface_is_nil(mg_surface surface)
|
||||||
|
{
|
||||||
|
return(surface.h == 0);
|
||||||
|
}
|
||||||
|
|
||||||
mg_surface mg_surface_alloc_handle(mg_surface_info* surface)
|
mg_surface mg_surface_alloc_handle(mg_surface_info* surface)
|
||||||
{
|
{
|
||||||
mg_resource_slot* slot = mg_resource_slot_alloc(&__mgInfo.surfaces);
|
mg_resource_slot* slot = mg_resource_slot_alloc(&__mgInfo.surfaces);
|
||||||
|
|
|
@ -31,6 +31,7 @@ typedef enum { MG_BACKEND_DUMMY,
|
||||||
void mg_init();
|
void mg_init();
|
||||||
|
|
||||||
mg_surface mg_surface_nil();
|
mg_surface mg_surface_nil();
|
||||||
|
bool mg_surface_is_nil(mg_surface surface);
|
||||||
mg_surface mg_surface_create_for_window(mp_window window, mg_backend_id backend);
|
mg_surface mg_surface_create_for_window(mp_window window, mg_backend_id backend);
|
||||||
mg_surface mg_surface_create_for_view(mp_view view, mg_backend_id backend);
|
mg_surface mg_surface_create_for_view(mp_view view, mg_backend_id backend);
|
||||||
mg_surface mg_surface_create_offscreen(mg_backend_id backend, u32 width, u32 height);
|
mg_surface mg_surface_create_offscreen(mg_backend_id backend, u32 width, u32 height);
|
||||||
|
|
|
@ -259,7 +259,7 @@ mg_surface mg_metal_surface_create_for_window(mp_window window)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return(mg_metal_surface_create_for_view(windowData->mainView));
|
return(mg_metal_surface_create_for_view(windowData->osx.mainView));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -207,7 +207,7 @@ typedef enum {
|
||||||
typedef struct mp_key_event // keyboard and mouse buttons input
|
typedef struct mp_key_event // keyboard and mouse buttons input
|
||||||
{
|
{
|
||||||
mp_key_action action;
|
mp_key_action action;
|
||||||
mp_key_code code;
|
i32 code;
|
||||||
mp_key_mods mods;
|
mp_key_mods mods;
|
||||||
char label[8];
|
char label[8];
|
||||||
u8 labelLen;
|
u8 labelLen;
|
||||||
|
|
|
@ -136,6 +136,9 @@ typedef struct mp_app
|
||||||
mp_window_data windowPool[MP_APP_MAX_WINDOWS];
|
mp_window_data windowPool[MP_APP_MAX_WINDOWS];
|
||||||
list_info windowFreeList;
|
list_info windowFreeList;
|
||||||
|
|
||||||
|
mp_live_resize_callback liveResizeCallback;
|
||||||
|
void* liveResizeData;
|
||||||
|
|
||||||
mp_input_state inputState;
|
mp_input_state inputState;
|
||||||
|
|
||||||
mp_key_utf8 keyLabels[256];
|
mp_key_utf8 keyLabels[256];
|
||||||
|
|
|
@ -9,29 +9,32 @@
|
||||||
#ifndef __OSX_APP_H_
|
#ifndef __OSX_APP_H_
|
||||||
#define __OSX_APP_H_
|
#define __OSX_APP_H_
|
||||||
|
|
||||||
#import<Cocoa/Cocoa.h>
|
|
||||||
#import<Carbon/Carbon.h>
|
|
||||||
#include"mp_app.h"
|
#include"mp_app.h"
|
||||||
#include"graphics.h"
|
#include"graphics.h"
|
||||||
|
|
||||||
typedef struct mp_window_data
|
#ifdef __OBJC__
|
||||||
{
|
#import<Cocoa/Cocoa.h>
|
||||||
list_elt freeListElt;
|
#else
|
||||||
u32 generation;
|
#define NSWindow void
|
||||||
|
#define NSView void
|
||||||
|
#define NSObject void
|
||||||
|
#define NSTimer void
|
||||||
|
#define NSCursor void
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include<Carbon/Carbon.h>
|
||||||
|
|
||||||
|
typedef struct osx_window_data
|
||||||
|
{
|
||||||
NSWindow* nsWindow;
|
NSWindow* nsWindow;
|
||||||
NSView* nsView;
|
NSView* nsView;
|
||||||
NSObject* nsWindowDelegate;
|
NSObject* nsWindowDelegate;
|
||||||
|
|
||||||
mp_rect contentRect;
|
|
||||||
mp_rect frameRect;
|
|
||||||
mp_window_style style;
|
|
||||||
|
|
||||||
bool shouldClose; //TODO could be in status flags
|
|
||||||
bool hidden;
|
|
||||||
|
|
||||||
mp_view mainView;
|
mp_view mainView;
|
||||||
} mp_window_data;
|
|
||||||
|
} osx_window_data;
|
||||||
|
|
||||||
|
#define MP_PLATFORM_WINDOW_DATA osx_window_data osx;
|
||||||
|
|
||||||
typedef struct mp_view_data
|
typedef struct mp_view_data
|
||||||
{
|
{
|
||||||
|
@ -43,15 +46,23 @@ typedef struct mp_view_data
|
||||||
mg_surface surface;
|
mg_surface surface;
|
||||||
} mp_view_data;
|
} mp_view_data;
|
||||||
|
|
||||||
@interface MPNativeWindow : NSWindow
|
const u32 MP_APP_MAX_VIEWS = 128;
|
||||||
{
|
|
||||||
mp_window_data* mpWindow;
|
|
||||||
}
|
|
||||||
- (id)initWithMPWindow:(mp_window_data*) window contentRect:(NSRect) rect styleMask:(uint32) style;
|
|
||||||
@end
|
|
||||||
|
|
||||||
mp_window_data* mp_window_ptr_from_handle(mp_window handle);
|
typedef struct osx_app_data
|
||||||
mp_view_data* mp_view_ptr_from_handle(mp_view handle);
|
{
|
||||||
|
NSTimer* frameTimer;
|
||||||
|
NSCursor* cursor;
|
||||||
|
|
||||||
|
TISInputSourceRef kbLayoutInputSource;
|
||||||
|
void* kbLayoutUnicodeData;
|
||||||
|
id kbLayoutListener;
|
||||||
|
|
||||||
|
list_info viewFreeList;
|
||||||
|
mp_view_data viewPool[MP_APP_MAX_VIEWS];
|
||||||
|
|
||||||
|
} osx_app_data;
|
||||||
|
|
||||||
|
#define MP_PLATFORM_APP_DATA osx_app_data osx;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
893
src/osx_app.m
893
src/osx_app.m
File diff suppressed because it is too large
Load Diff
|
@ -19,4 +19,4 @@
|
||||||
#include<stdatomic.h>
|
#include<stdatomic.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif __ATOMIC_H_
|
#endif //__ATOMIC_H_
|
||||||
|
|
21
todo.txt
21
todo.txt
|
@ -19,30 +19,39 @@ Windows port
|
||||||
(mp_app.c can 'see' platform specific stuff, so ObjectiveC defs pose a problem, but we can define id as void*
|
(mp_app.c can 'see' platform specific stuff, so ObjectiveC defs pose a problem, but we can define id as void*
|
||||||
when not in ObjC...)
|
when not in ObjC...)
|
||||||
|
|
||||||
|
[ ] Check changes in macos version
|
||||||
|
[x] Restructure macos version to use mp_app_internal.h/mp_app.c
|
||||||
|
[x] test new run loop structure on macos
|
||||||
|
[x] Fix resize crash when there's no surface
|
||||||
|
[ ] separate data for key and mouse event?
|
||||||
|
[ ] Clarify how we want to do view handling across platforms
|
||||||
|
[ ] Views (using docked windows?) -- or see if we can use surfaces and restrict their location?
|
||||||
|
[ ] pull views in common stuff
|
||||||
|
[ ] use isARepeat in macos keyDown event and simplify update key state
|
||||||
|
|
||||||
|
[ ] Simplify event structs
|
||||||
|
|
||||||
[.] Implement input polling
|
[.] Implement input polling
|
||||||
[ ] Simplify input polling API names
|
[ ] Simplify input polling API names
|
||||||
[/] Try to simplify input state and polling once we have UI usage code
|
[/] Try to simplify input state and polling once we have UI usage code
|
||||||
|
|
||||||
[ ] Finish window properties query/setting
|
[ ] Finish window properties query/setting
|
||||||
|
|
||||||
[ ] use isARepeat in macos keyDown event and simplify update key state
|
|
||||||
|
|
||||||
[ ] Implement clipboard
|
[ ] Implement clipboard
|
||||||
[ ] Implement file dialogs
|
[ ] Implement file dialogs
|
||||||
[ ] Impement resource path... -> maybe in abstracted file handling
|
[ ] Impement resource path... -> maybe in abstracted file handling
|
||||||
|
|
||||||
|
|
||||||
[ ] Clean backend selection (compile time and runtime)
|
[ ] Clean backend selection (compile time and runtime)
|
||||||
[ ] Finish OpenGL loader
|
[ ] Finish OpenGL loader
|
||||||
[ ] Test compute shaders
|
[ ] Test compute shaders
|
||||||
[ ] Initial version of vector graphics backend
|
[ ] Initial version of vector graphics backend
|
||||||
[ ] Check integration of UI.
|
[ ] Check integration of UI.
|
||||||
|
|
||||||
[ ] Views (using docked windows?) -- or see if we can use surfaces and restrict their location?
|
|
||||||
|
|
||||||
[ ] test new run loop structure on macos
|
|
||||||
[ ] Remove unused APIs
|
[ ] Remove unused APIs
|
||||||
|
|
||||||
|
[ ] OpenGL backend on OSX
|
||||||
|
[ ] Port vector graphics to OpenGL
|
||||||
|
[ ] Check OpenGL vector graphics on windows
|
||||||
|
|
||||||
|
|
||||||
Misc
|
Misc
|
||||||
|
|
Loading…
Reference in New Issue