Finish separating graphics_common and graphics_surface + add platform_math, so that we can compile graphics_common to wasm in orca
This commit is contained in:
parent
ca1caf8537
commit
b27dc615d1
|
@ -191,7 +191,7 @@ int main()
|
||||||
1./frameTime);
|
1./frameTime);
|
||||||
|
|
||||||
mg_surface_prepare(surface);
|
mg_surface_prepare(surface);
|
||||||
mg_flush(surface);
|
mg_render(surface, canvas);
|
||||||
mg_surface_present(surface);
|
mg_surface_present(surface);
|
||||||
|
|
||||||
mem_arena_clear(mem_scratch());
|
mem_arena_clear(mem_scratch());
|
||||||
|
|
|
@ -292,7 +292,7 @@ int main()
|
||||||
f64 startFlushTime = mp_get_time(MP_CLOCK_MONOTONIC);
|
f64 startFlushTime = mp_get_time(MP_CLOCK_MONOTONIC);
|
||||||
|
|
||||||
mg_surface_prepare(surface);
|
mg_surface_prepare(surface);
|
||||||
mg_flush(surface);
|
mg_render(surface, canvas);
|
||||||
|
|
||||||
f64 startPresentTime = mp_get_time(MP_CLOCK_MONOTONIC);
|
f64 startPresentTime = mp_get_time(MP_CLOCK_MONOTONIC);
|
||||||
mg_surface_present(surface);
|
mg_surface_present(surface);
|
||||||
|
|
|
@ -228,7 +228,7 @@ int main()
|
||||||
frameTime,
|
frameTime,
|
||||||
1./frameTime);
|
1./frameTime);
|
||||||
|
|
||||||
mg_flush(surface);
|
mg_render(surface, canvas);
|
||||||
mg_surface_present(surface);
|
mg_surface_present(surface);
|
||||||
|
|
||||||
mp_input_next_frame(&inputState);
|
mp_input_next_frame(&inputState);
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include<EGL/egl.h>
|
#include<EGL/egl.h>
|
||||||
#include<EGL/eglext.h>
|
#include<EGL/eglext.h>
|
||||||
#include"mp_app_internal.h"
|
#include"mp_app_internal.h"
|
||||||
#include"graphics_internal.h"
|
#include"graphics_surface.h"
|
||||||
#include"gl_loader.h"
|
#include"gl_loader.h"
|
||||||
|
|
||||||
#if PLATFORM_MACOS
|
#if PLATFORM_MACOS
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#ifndef __EGL_SURFACE_H_
|
#ifndef __EGL_SURFACE_H_
|
||||||
#define __EGL_SURFACE_H_
|
#define __EGL_SURFACE_H_
|
||||||
|
|
||||||
#include"graphics_internal.h"
|
#include"graphics_surface.h"
|
||||||
#include"mp_app.h"
|
#include"mp_app.h"
|
||||||
|
|
||||||
mg_surface_data* mg_egl_surface_create_for_window(mp_window window);
|
mg_surface_data* mg_egl_surface_create_for_window(mp_window window);
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* @revision:
|
* @revision:
|
||||||
*
|
*
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
#include"graphics_internal.h"
|
#include"graphics_surface.h"
|
||||||
#include"macro_helpers.h"
|
#include"macro_helpers.h"
|
||||||
#include"glsl_shaders.h"
|
#include"glsl_shaders.h"
|
||||||
#include"gl_api.h"
|
#include"gl_api.h"
|
||||||
|
|
|
@ -94,7 +94,7 @@ MP_API bool mg_is_surface_api_available(mg_surface_api api);
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
typedef struct mg_surface { u64 h; } mg_surface;
|
typedef struct mg_surface { u64 h; } mg_surface;
|
||||||
|
|
||||||
MP_API mg_surface mg_surface_nil();
|
MP_API mg_surface mg_surface_nil(void);
|
||||||
MP_API bool mg_surface_is_nil(mg_surface surface);
|
MP_API bool mg_surface_is_nil(mg_surface surface);
|
||||||
|
|
||||||
MP_API mg_surface mg_surface_create_for_window(mp_window window, mg_surface_api api);
|
MP_API mg_surface mg_surface_create_for_window(mp_window window, mg_surface_api api);
|
||||||
|
@ -178,15 +178,15 @@ typedef struct mg_text_extents
|
||||||
MP_API mg_canvas mg_canvas_nil(void);
|
MP_API mg_canvas mg_canvas_nil(void);
|
||||||
MP_API bool mg_canvas_is_nil(mg_canvas canvas);
|
MP_API bool mg_canvas_is_nil(mg_canvas canvas);
|
||||||
|
|
||||||
MP_API mg_canvas mg_canvas_create();
|
MP_API mg_canvas mg_canvas_create(void);
|
||||||
MP_API void mg_canvas_destroy(mg_canvas canvas);
|
MP_API void mg_canvas_destroy(mg_canvas canvas);
|
||||||
mg_canvas mg_canvas_set_current(mg_canvas canvas);
|
mg_canvas mg_canvas_set_current(mg_canvas canvas);
|
||||||
MP_API void mg_flush(mg_surface surface); //TODO change to mg_canvas_render(mg_surface surface, mg_canvas canvas);
|
MP_API void mg_render(mg_surface surface, mg_canvas canvas);
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
//NOTE(martin): fonts
|
//NOTE(martin): fonts
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
MP_API mg_font mg_font_nil();
|
MP_API mg_font mg_font_nil(void);
|
||||||
MP_API mg_font mg_font_create_from_memory(u32 size, byte* buffer, u32 rangeCount, unicode_range* ranges);
|
MP_API mg_font mg_font_create_from_memory(u32 size, byte* buffer, u32 rangeCount, unicode_range* ranges);
|
||||||
MP_API void mg_font_destroy(mg_font font);
|
MP_API void mg_font_destroy(mg_font font);
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ MP_API mp_rect mg_text_bounding_box(mg_font font, f32 fontSize, str8 text);
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
//NOTE(martin): images
|
//NOTE(martin): images
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
MP_API mg_image mg_image_nil();
|
MP_API mg_image mg_image_nil(void);
|
||||||
MP_API bool mg_image_is_nil(mg_image a);
|
MP_API bool mg_image_is_nil(mg_image a);
|
||||||
|
|
||||||
MP_API mg_image mg_image_create(mg_surface surface, u32 width, u32 height);
|
MP_API mg_image mg_image_create(mg_surface surface, u32 width, u32 height);
|
||||||
|
@ -256,10 +256,10 @@ void mg_image_atlas_recycle(mg_rect_atlas* atlas, mg_image_region imageRgn);
|
||||||
MP_API void mg_viewport(mp_rect viewPort);
|
MP_API void mg_viewport(mp_rect viewPort);
|
||||||
|
|
||||||
MP_API void mg_matrix_push(mg_mat2x3 matrix);
|
MP_API void mg_matrix_push(mg_mat2x3 matrix);
|
||||||
MP_API void mg_matrix_pop();
|
MP_API void mg_matrix_pop(void);
|
||||||
|
|
||||||
MP_API void mg_clip_push(f32 x, f32 y, f32 w, f32 h);
|
MP_API void mg_clip_push(f32 x, f32 y, f32 w, f32 h);
|
||||||
MP_API void mg_clip_pop();
|
MP_API void mg_clip_pop(void);
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
//NOTE(martin): graphics attributes setting/getting
|
//NOTE(martin): graphics attributes setting/getting
|
||||||
|
@ -277,25 +277,25 @@ MP_API void mg_set_text_flip(bool flip);
|
||||||
MP_API void mg_set_image(mg_image image);
|
MP_API void mg_set_image(mg_image image);
|
||||||
MP_API void mg_set_image_source_region(mp_rect region);
|
MP_API void mg_set_image_source_region(mp_rect region);
|
||||||
|
|
||||||
MP_API mg_color mg_get_color();
|
MP_API mg_color mg_get_color(void);
|
||||||
MP_API f32 mg_get_width();
|
MP_API f32 mg_get_width(void);
|
||||||
MP_API f32 mg_get_tolerance();
|
MP_API f32 mg_get_tolerance(void);
|
||||||
MP_API mg_joint_type mg_get_joint();
|
MP_API mg_joint_type mg_get_joint(void);
|
||||||
MP_API f32 mg_get_max_joint_excursion();
|
MP_API f32 mg_get_max_joint_excursion(void);
|
||||||
MP_API mg_cap_type mg_get_cap();
|
MP_API mg_cap_type mg_get_cap(void);
|
||||||
MP_API mg_font mg_get_font();
|
MP_API mg_font mg_get_font(void);
|
||||||
MP_API f32 mg_get_font_size();
|
MP_API f32 mg_get_font_size(void);
|
||||||
MP_API bool mg_get_text_flip();
|
MP_API bool mg_get_text_flip(void);
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
//NOTE(martin): path construction
|
//NOTE(martin): path construction
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
MP_API vec2 mg_get_position();
|
MP_API vec2 mg_get_position(void);
|
||||||
MP_API void mg_move_to(f32 x, f32 y);
|
MP_API void mg_move_to(f32 x, f32 y);
|
||||||
MP_API void mg_line_to(f32 x, f32 y);
|
MP_API void mg_line_to(f32 x, f32 y);
|
||||||
MP_API void mg_quadratic_to(f32 x1, f32 y1, f32 x2, f32 y2);
|
MP_API void mg_quadratic_to(f32 x1, f32 y1, f32 x2, f32 y2);
|
||||||
MP_API void mg_cubic_to(f32 x1, f32 y1, f32 x2, f32 y2, f32 x3, f32 y3);
|
MP_API void mg_cubic_to(f32 x1, f32 y1, f32 x2, f32 y2, f32 x3, f32 y3);
|
||||||
MP_API void mg_close_path();
|
MP_API void mg_close_path(void);
|
||||||
|
|
||||||
MP_API mp_rect mg_glyph_outlines(str32 glyphIndices);
|
MP_API mp_rect mg_glyph_outlines(str32 glyphIndices);
|
||||||
MP_API void mg_codepoints_outlines(str32 string);
|
MP_API void mg_codepoints_outlines(str32 string);
|
||||||
|
@ -304,9 +304,9 @@ MP_API void mg_text_outlines(str8 string);
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
//NOTE(martin): clear/fill/stroke
|
//NOTE(martin): clear/fill/stroke
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
MP_API void mg_clear();
|
MP_API void mg_clear(void);
|
||||||
MP_API void mg_fill();
|
MP_API void mg_fill(void);
|
||||||
MP_API void mg_stroke();
|
MP_API void mg_stroke(void);
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
//NOTE(martin): 'fast' shapes primitives
|
//NOTE(martin): 'fast' shapes primitives
|
||||||
|
|
|
@ -7,18 +7,20 @@
|
||||||
*
|
*
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
#define _USE_MATH_DEFINES //NOTE: necessary for MSVC
|
#include"platform.h"
|
||||||
#include<math.h>
|
#include"platform_math.h"
|
||||||
|
|
||||||
#define STB_TRUETYPE_IMPLEMENTATION
|
#if !PLATFORM_ORCA
|
||||||
#include"stb_truetype.h"
|
#define STB_IMAGE_IMPLEMENTATION
|
||||||
|
#include"stb_image.h"
|
||||||
|
|
||||||
#define STB_IMAGE_IMPLEMENTATION
|
#define STB_TRUETYPE_IMPLEMENTATION
|
||||||
#include"stb_image.h"
|
#include"stb_truetype.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include"platform_log.h"
|
#include"platform_log.h"
|
||||||
#include"platform_assert.h"
|
#include"platform_assert.h"
|
||||||
#include"graphics_internal.h"
|
#include"graphics_common.h"
|
||||||
|
|
||||||
typedef struct mg_glyph_map_entry
|
typedef struct mg_glyph_map_entry
|
||||||
{
|
{
|
||||||
|
@ -83,7 +85,7 @@ typedef struct mg_handle_slot
|
||||||
|
|
||||||
} mg_handle_slot;
|
} mg_handle_slot;
|
||||||
|
|
||||||
static const u32 MG_HANDLES_MAX_COUNT = 512;
|
enum { MG_HANDLES_MAX_COUNT = 512 };
|
||||||
|
|
||||||
typedef struct mg_data
|
typedef struct mg_data
|
||||||
{
|
{
|
||||||
|
@ -402,6 +404,8 @@ mg_font_data* mg_font_data_from_handle(mg_font handle)
|
||||||
return(data);
|
return(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !PLATFORM_ORCA
|
||||||
|
|
||||||
mg_font mg_font_create_from_memory(u32 size, byte* buffer, u32 rangeCount, unicode_range* ranges)
|
mg_font mg_font_create_from_memory(u32 size, byte* buffer, u32 rangeCount, unicode_range* ranges)
|
||||||
{
|
{
|
||||||
if(!__mgData.init)
|
if(!__mgData.init)
|
||||||
|
@ -594,6 +598,8 @@ void mg_font_destroy(mg_font fontHandle)
|
||||||
mg_handle_recycle(fontHandle.h);
|
mg_handle_recycle(fontHandle.h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif // !PLATFORM_ORCA
|
||||||
|
|
||||||
|
|
||||||
str32 mg_font_get_glyph_indices_from_font_data(mg_font_data* fontData, str32 codePoints, str32 backing)
|
str32 mg_font_get_glyph_indices_from_font_data(mg_font_data* fontData, str32 codePoints, str32 backing)
|
||||||
{
|
{
|
||||||
|
@ -865,6 +871,11 @@ mg_canvas_data* mg_canvas_data_from_handle(mg_canvas handle)
|
||||||
|
|
||||||
mg_canvas mg_canvas_create()
|
mg_canvas mg_canvas_create()
|
||||||
{
|
{
|
||||||
|
if(!__mgData.init)
|
||||||
|
{
|
||||||
|
mg_init();
|
||||||
|
}
|
||||||
|
|
||||||
mg_canvas canvasHandle = mg_canvas_nil();
|
mg_canvas canvasHandle = mg_canvas_nil();
|
||||||
mg_canvas_data* canvas = list_pop_entry(&__mgData.canvasFreeList, mg_canvas_data, freeListElt);
|
mg_canvas_data* canvas = list_pop_entry(&__mgData.canvasFreeList, mg_canvas_data, freeListElt);
|
||||||
if(!canvas)
|
if(!canvas)
|
||||||
|
@ -873,8 +884,14 @@ mg_canvas mg_canvas_create()
|
||||||
}
|
}
|
||||||
if(canvas)
|
if(canvas)
|
||||||
{
|
{
|
||||||
memset(canvas, 0, sizeof(mg_canvas_data));
|
canvas->textFlip = false;
|
||||||
|
canvas->path = (mg_path_descriptor){0};
|
||||||
|
canvas->matrixStackSize = 0;
|
||||||
|
canvas->clipStackSize = 0;
|
||||||
|
canvas->primitiveCount = 0;
|
||||||
|
canvas->clearColor = (mg_color){0, 0, 0, 0};
|
||||||
|
|
||||||
|
canvas->attributes = (mg_attributes){0};
|
||||||
canvas->attributes.color = (mg_color){0, 0, 0, 1};
|
canvas->attributes.color = (mg_color){0, 0, 0, 1};
|
||||||
canvas->attributes.tolerance = 1;
|
canvas->attributes.tolerance = 1;
|
||||||
canvas->attributes.width = 10;
|
canvas->attributes.width = 10;
|
||||||
|
@ -910,23 +927,22 @@ mg_canvas mg_canvas_set_current(mg_canvas canvas)
|
||||||
return(old);
|
return(old);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mg_flush(mg_surface surface)
|
void mg_render(mg_surface surface, mg_canvas canvas)
|
||||||
{
|
{
|
||||||
mg_canvas_data* canvas = __mgCurrentCanvas;
|
mg_canvas_data* canvasData = mg_canvas_data_from_handle(canvas);
|
||||||
mg_surface_data* surfaceData = mg_surface_data_from_handle(surface);
|
if(canvasData)
|
||||||
if(canvas && surfaceData && surfaceData->backend)
|
|
||||||
{
|
{
|
||||||
int eltCount = canvas->path.startIndex + canvas->path.count;
|
int eltCount = canvasData->path.startIndex + canvasData->path.count;
|
||||||
surfaceData->backend->render(surfaceData->backend,
|
mg_surface_render_commands(surface,
|
||||||
canvas->clearColor,
|
canvasData->clearColor,
|
||||||
canvas->primitiveCount,
|
canvasData->primitiveCount,
|
||||||
canvas->primitives,
|
canvasData->primitives,
|
||||||
eltCount,
|
eltCount,
|
||||||
canvas->pathElements);
|
canvasData->pathElements);
|
||||||
|
|
||||||
canvas->primitiveCount = 0;
|
canvasData->primitiveCount = 0;
|
||||||
canvas->path.startIndex = 0;
|
canvasData->path.startIndex = 0;
|
||||||
canvas->path.count = 0;
|
canvasData->path.count = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1580,6 +1596,8 @@ mg_image mg_image_create_from_rgba8(mg_surface surface, u32 width, u32 height, u
|
||||||
return(image);
|
return(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !PLATFORM_ORCA
|
||||||
|
|
||||||
mg_image mg_image_create_from_data(mg_surface surface, str8 data, bool flip)
|
mg_image mg_image_create_from_data(mg_surface surface, str8 data, bool flip)
|
||||||
{
|
{
|
||||||
mg_image image = mg_image_nil();
|
mg_image image = mg_image_nil();
|
||||||
|
@ -1613,6 +1631,8 @@ mg_image mg_image_create_from_file(mg_surface surface, str8 path, bool flip)
|
||||||
return(image);
|
return(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // !PLATFORM_ORCA
|
||||||
|
|
||||||
|
|
||||||
void mg_image_draw_region(mg_image image, mp_rect srcRegion, mp_rect dstRegion)
|
void mg_image_draw_region(mg_image image, mp_rect srcRegion, mp_rect dstRegion)
|
||||||
{
|
{
|
||||||
|
@ -1712,6 +1732,8 @@ mg_image_region mg_image_atlas_alloc_from_rgba8(mg_rect_atlas* atlas, mg_image b
|
||||||
return(imageRgn);
|
return(imageRgn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !PLATFORM_ORCA
|
||||||
|
|
||||||
mg_image_region mg_image_atlas_alloc_from_data(mg_rect_atlas* atlas, mg_image backingImage, str8 data, bool flip)
|
mg_image_region mg_image_atlas_alloc_from_data(mg_rect_atlas* atlas, mg_image backingImage, str8 data, bool flip)
|
||||||
{
|
{
|
||||||
mg_image_region imageRgn = {0};
|
mg_image_region imageRgn = {0};
|
||||||
|
@ -1744,6 +1766,7 @@ mg_image_region mg_image_atlas_alloc_from_file(mg_rect_atlas* atlas, mg_image ba
|
||||||
}
|
}
|
||||||
return(imageRgn);
|
return(imageRgn);
|
||||||
}
|
}
|
||||||
|
#endif // !PLATFORM_ORCA
|
||||||
|
|
||||||
void mg_image_atlas_recycle(mg_rect_atlas* atlas, mg_image_region imageRgn)
|
void mg_image_atlas_recycle(mg_rect_atlas* atlas, mg_image_region imageRgn)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
/************************************************************//**
|
||||||
|
*
|
||||||
|
* @file: graphics_common.h
|
||||||
|
* @author: Martin Fouilleul
|
||||||
|
* @date: 26/04/2023
|
||||||
|
*
|
||||||
|
*****************************************************************/
|
||||||
|
#ifndef __GRAPHICS_COMMON_H_
|
||||||
|
#define __GRAPHICS_COMMON_H_
|
||||||
|
|
||||||
|
#include"graphics.h"
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
// canvas structs
|
||||||
|
//------------------------------------------------------------------------
|
||||||
|
typedef enum { MG_PATH_MOVE,
|
||||||
|
MG_PATH_LINE,
|
||||||
|
MG_PATH_QUADRATIC,
|
||||||
|
MG_PATH_CUBIC } mg_path_elt_type;
|
||||||
|
|
||||||
|
typedef struct mg_path_elt
|
||||||
|
{
|
||||||
|
mg_path_elt_type type;
|
||||||
|
vec2 p[3];
|
||||||
|
|
||||||
|
} mg_path_elt;
|
||||||
|
|
||||||
|
typedef struct mg_path_descriptor
|
||||||
|
{
|
||||||
|
u32 startIndex;
|
||||||
|
u32 count;
|
||||||
|
vec2 startPoint;
|
||||||
|
|
||||||
|
} mg_path_descriptor;
|
||||||
|
|
||||||
|
typedef struct mg_attributes
|
||||||
|
{
|
||||||
|
f32 width;
|
||||||
|
f32 tolerance;
|
||||||
|
mg_color color;
|
||||||
|
mg_joint_type joint;
|
||||||
|
f32 maxJointExcursion;
|
||||||
|
mg_cap_type cap;
|
||||||
|
|
||||||
|
mg_font font;
|
||||||
|
f32 fontSize;
|
||||||
|
|
||||||
|
mg_image image;
|
||||||
|
mp_rect srcRegion;
|
||||||
|
|
||||||
|
mg_mat2x3 transform;
|
||||||
|
mp_rect clip;
|
||||||
|
|
||||||
|
} mg_attributes;
|
||||||
|
|
||||||
|
typedef enum { MG_CMD_FILL,
|
||||||
|
MG_CMD_STROKE,
|
||||||
|
MG_CMD_JUMP
|
||||||
|
} mg_primitive_cmd;
|
||||||
|
|
||||||
|
typedef struct mg_primitive
|
||||||
|
{
|
||||||
|
mg_primitive_cmd cmd;
|
||||||
|
mg_attributes attributes;
|
||||||
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
mg_path_descriptor path;
|
||||||
|
mp_rect rect;
|
||||||
|
u32 jump;
|
||||||
|
};
|
||||||
|
|
||||||
|
} mg_primitive;
|
||||||
|
|
||||||
|
void mg_surface_render_commands(mg_surface surface,
|
||||||
|
mg_color clearColor,
|
||||||
|
u32 primitiveCount,
|
||||||
|
mg_primitive* primitives,
|
||||||
|
u32 eltCount,
|
||||||
|
mg_path_elt* elements);
|
||||||
|
|
||||||
|
#endif //__GRAPHICS_COMMON_H_
|
|
@ -6,8 +6,7 @@
|
||||||
*
|
*
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
#include"graphics_internal.h"
|
#include"graphics_surface.h"
|
||||||
|
|
||||||
|
|
||||||
//---------------------------------------------------------------
|
//---------------------------------------------------------------
|
||||||
// typed handles functions
|
// typed handles functions
|
||||||
|
@ -327,6 +326,25 @@ void mg_surface_host_connect(mg_surface handle, mg_surface_id remoteID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mg_surface_render_commands(mg_surface surface,
|
||||||
|
mg_color clearColor,
|
||||||
|
u32 primitiveCount,
|
||||||
|
mg_primitive* primitives,
|
||||||
|
u32 eltCount,
|
||||||
|
mg_path_elt* elements)
|
||||||
|
{
|
||||||
|
mg_surface_data* surfaceData = mg_surface_data_from_handle(surface);
|
||||||
|
if(surfaceData && surfaceData->backend)
|
||||||
|
{
|
||||||
|
surfaceData->backend->render(surfaceData->backend,
|
||||||
|
clearColor,
|
||||||
|
primitiveCount,
|
||||||
|
primitives,
|
||||||
|
eltCount,
|
||||||
|
elements);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
//NOTE(martin): images
|
//NOTE(martin): images
|
||||||
//------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
/************************************************************//**
|
/************************************************************//**
|
||||||
*
|
*
|
||||||
* @file: graphics_internal.h
|
* @file: graphics_surface.h
|
||||||
* @author: Martin Fouilleul
|
* @author: Martin Fouilleul
|
||||||
* @date: 23/01/2023
|
* @date: 26/04/2023
|
||||||
* @revision:
|
|
||||||
*
|
*
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
#ifndef __GRAPHICS_INTERNAL_H_
|
#ifndef __GRAPHICS_SURFACE_H_
|
||||||
#define __GRAPHICS_INTERNAL_H_
|
#define __GRAPHICS_SURFACE_H_
|
||||||
|
|
||||||
#include"graphics.h"
|
#include"graphics_common.h"
|
||||||
#include"mp_app_internal.h"
|
#include"mp_app_internal.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -127,79 +126,6 @@ typedef void (*mg_canvas_backend_image_upload_region_proc)(mg_canvas_backend* ba
|
||||||
mp_rect region,
|
mp_rect region,
|
||||||
u8* pixels);
|
u8* pixels);
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------
|
|
||||||
// canvas structs
|
|
||||||
//------------------------------------------------------------------------
|
|
||||||
typedef enum { MG_PATH_MOVE,
|
|
||||||
MG_PATH_LINE,
|
|
||||||
MG_PATH_QUADRATIC,
|
|
||||||
MG_PATH_CUBIC } mg_path_elt_type;
|
|
||||||
|
|
||||||
typedef struct mg_path_elt
|
|
||||||
{
|
|
||||||
mg_path_elt_type type;
|
|
||||||
vec2 p[3];
|
|
||||||
|
|
||||||
} mg_path_elt;
|
|
||||||
|
|
||||||
typedef struct mg_path_descriptor
|
|
||||||
{
|
|
||||||
u32 startIndex;
|
|
||||||
u32 count;
|
|
||||||
vec2 startPoint;
|
|
||||||
|
|
||||||
} mg_path_descriptor;
|
|
||||||
|
|
||||||
typedef struct mg_attributes
|
|
||||||
{
|
|
||||||
f32 width;
|
|
||||||
f32 tolerance;
|
|
||||||
mg_color color;
|
|
||||||
mg_joint_type joint;
|
|
||||||
f32 maxJointExcursion;
|
|
||||||
mg_cap_type cap;
|
|
||||||
|
|
||||||
mg_font font;
|
|
||||||
f32 fontSize;
|
|
||||||
|
|
||||||
mg_image image;
|
|
||||||
mp_rect srcRegion;
|
|
||||||
|
|
||||||
mg_mat2x3 transform;
|
|
||||||
mp_rect clip;
|
|
||||||
|
|
||||||
} mg_attributes;
|
|
||||||
|
|
||||||
typedef struct mg_rounded_rect
|
|
||||||
{
|
|
||||||
f32 x;
|
|
||||||
f32 y;
|
|
||||||
f32 w;
|
|
||||||
f32 h;
|
|
||||||
f32 r;
|
|
||||||
} mg_rounded_rect;
|
|
||||||
|
|
||||||
typedef enum { MG_CMD_FILL,
|
|
||||||
MG_CMD_STROKE,
|
|
||||||
MG_CMD_JUMP
|
|
||||||
} mg_primitive_cmd;
|
|
||||||
|
|
||||||
typedef struct mg_primitive
|
|
||||||
{
|
|
||||||
mg_primitive_cmd cmd;
|
|
||||||
mg_attributes attributes;
|
|
||||||
|
|
||||||
union
|
|
||||||
{
|
|
||||||
mg_path_descriptor path;
|
|
||||||
mp_rect rect;
|
|
||||||
mg_rounded_rect roundedRect;
|
|
||||||
u32 jump;
|
|
||||||
};
|
|
||||||
|
|
||||||
} mg_primitive;
|
|
||||||
|
|
||||||
typedef void (*mg_canvas_backend_render_proc)(mg_canvas_backend* backend,
|
typedef void (*mg_canvas_backend_render_proc)(mg_canvas_backend* backend,
|
||||||
mg_color clearColor,
|
mg_color clearColor,
|
||||||
u32 primitiveCount,
|
u32 primitiveCount,
|
||||||
|
@ -229,4 +155,4 @@ typedef struct mg_canvas_backend
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif //__GRAPHICS_INTERNAL_H_
|
#endif //__GRAPHICS_SURFACE_H_
|
|
@ -10,7 +10,7 @@
|
||||||
#import<QuartzCore/CAMetalLayer.h>
|
#import<QuartzCore/CAMetalLayer.h>
|
||||||
#include<simd/simd.h>
|
#include<simd/simd.h>
|
||||||
|
|
||||||
#include"graphics_internal.h"
|
#include"graphics_surface.h"
|
||||||
#include"macro_helpers.h"
|
#include"macro_helpers.h"
|
||||||
#include"osx_app.h"
|
#include"osx_app.h"
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#ifndef __MTL_SURFACE_H_
|
#ifndef __MTL_SURFACE_H_
|
||||||
#define __MTL_SURFACE_H_
|
#define __MTL_SURFACE_H_
|
||||||
|
|
||||||
#include"graphics_internal.h"
|
#include"graphics_surface.h"
|
||||||
|
|
||||||
#ifdef __OBJC__
|
#ifdef __OBJC__
|
||||||
#import<Metal/Metal.h>
|
#import<Metal/Metal.h>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#import<QuartzCore/CAMetalLayer.h>
|
#import<QuartzCore/CAMetalLayer.h>
|
||||||
#include<simd/simd.h>
|
#include<simd/simd.h>
|
||||||
|
|
||||||
#include"graphics_internal.h"
|
#include"graphics_surface.h"
|
||||||
#include"macro_helpers.h"
|
#include"macro_helpers.h"
|
||||||
#include"osx_app.h"
|
#include"osx_app.h"
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#include"macro_helpers.h"
|
#include"macro_helpers.h"
|
||||||
#include"platform_log.h"
|
#include"platform_log.h"
|
||||||
#include"platform_clock.h"
|
#include"platform_clock.h"
|
||||||
#include"graphics_internal.h"
|
#include"graphics_surface.h"
|
||||||
|
|
||||||
#include"mp_app.c"
|
#include"mp_app.c"
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
/************************************************************//**
|
||||||
|
*
|
||||||
|
* @file: platform_math.h
|
||||||
|
* @author: Martin Fouilleul
|
||||||
|
* @date: 26/04/2023
|
||||||
|
*
|
||||||
|
*****************************************************************/
|
||||||
|
#ifndef __PLATFORM_MATH_H_
|
||||||
|
#define __PLATFORM_MATH_H_
|
||||||
|
|
||||||
|
#include"platform.h"
|
||||||
|
|
||||||
|
#if !PLATFORM_ORCA
|
||||||
|
#include<math.h>
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define M_PI 3.14159265358979323846
|
||||||
|
|
||||||
|
double fabs(double x);
|
||||||
|
double sqrt(double sqrt);
|
||||||
|
double cos(double x);
|
||||||
|
double sin(double x);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif //__PLATFORM_MATH_H_
|
2
src/ui.h
2
src/ui.h
|
@ -404,7 +404,7 @@ MP_API void ui_begin_frame(vec2 size, ui_style* defaultStyle, ui_style_mask mask
|
||||||
MP_API void ui_end_frame(void);
|
MP_API void ui_end_frame(void);
|
||||||
MP_API void ui_draw(void);
|
MP_API void ui_draw(void);
|
||||||
|
|
||||||
#define ui_frame(s, m) defer_loop(ui_begin_frame((s), (m)), ui_end_frame())
|
#define ui_frame(size, style, mask) defer_loop(ui_begin_frame((size), (style), (mask)), ui_end_frame())
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------
|
||||||
// Box keys
|
// Box keys
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*
|
*
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
#include"win32_app.h"
|
#include"win32_app.h"
|
||||||
#include"graphics_internal.h"
|
#include"graphics_surface.h"
|
||||||
#include"gl_loader.h"
|
#include"gl_loader.h"
|
||||||
|
|
||||||
#include<GL/wglext.h>
|
#include<GL/wglext.h>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#ifndef __WGL_SURFACE_H_
|
#ifndef __WGL_SURFACE_H_
|
||||||
#define __WGL_SURFACE_H_
|
#define __WGL_SURFACE_H_
|
||||||
|
|
||||||
#include"graphics_internal.h"
|
#include"graphics_surface.h"
|
||||||
|
|
||||||
mg_surface_data* mg_wgl_surface_create_for_window(mp_window window);
|
mg_surface_data* mg_wgl_surface_create_for_window(mp_window window);
|
||||||
|
|
||||||
|
|
|
@ -863,7 +863,7 @@ MP_API str8 mp_clipboard_copy_string(str8 backing)
|
||||||
// win32 surfaces
|
// win32 surfaces
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
|
|
||||||
#include"graphics_internal.h"
|
#include"graphics_surface.h"
|
||||||
|
|
||||||
vec2 mg_win32_surface_contents_scaling(mg_surface_data* surface)
|
vec2 mg_win32_surface_contents_scaling(mg_surface_data* surface)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue