119 lines
2.0 KiB
C++
119 lines
2.0 KiB
C++
/*************************************************************************
|
|
*
|
|
* Orca
|
|
* Copyright 2023 Martin Fouilleul and the Orca project contributors
|
|
* See LICENSE.txt for licensing information
|
|
*
|
|
**************************************************************************/
|
|
#ifndef __MTL_RENDERER_H_
|
|
#define __MTL_RENDERER_H_
|
|
|
|
#include <simd/simd.h>
|
|
|
|
typedef enum
|
|
{
|
|
OC_MTL_FILL,
|
|
OC_MTL_STROKE,
|
|
} oc_mtl_cmd;
|
|
|
|
typedef struct oc_mtl_path
|
|
{
|
|
oc_mtl_cmd cmd;
|
|
matrix_float3x3 uvTransform;
|
|
vector_float4 color;
|
|
vector_float4 box;
|
|
vector_float4 clip;
|
|
int texture;
|
|
} oc_mtl_path;
|
|
|
|
typedef enum
|
|
{
|
|
OC_MTL_LINE = 1,
|
|
OC_MTL_QUADRATIC,
|
|
OC_MTL_CUBIC,
|
|
} oc_mtl_seg_kind;
|
|
|
|
typedef struct oc_mtl_path_elt
|
|
{
|
|
int pathIndex;
|
|
oc_mtl_seg_kind kind;
|
|
vector_float2 p[4];
|
|
} oc_mtl_path_elt;
|
|
|
|
typedef enum
|
|
{
|
|
OC_MTL_BL, // curve on bottom left
|
|
OC_MTL_BR, // curve on bottom right
|
|
OC_MTL_TL, // curve on top left
|
|
OC_MTL_TR // curve on top right
|
|
} oc_mtl_seg_config;
|
|
|
|
typedef struct oc_mtl_segment
|
|
{
|
|
oc_mtl_seg_kind kind;
|
|
int pathIndex;
|
|
oc_mtl_seg_config config; //TODO pack these
|
|
int windingIncrement;
|
|
vector_float4 box;
|
|
matrix_float3x3 implicitMatrix;
|
|
float sign;
|
|
vector_float2 hullVertex;
|
|
int debugID;
|
|
|
|
} oc_mtl_segment;
|
|
|
|
typedef struct oc_mtl_path_queue
|
|
{
|
|
vector_int4 area;
|
|
int tileQueues;
|
|
} oc_mtl_path_queue;
|
|
|
|
#ifdef __METAL_VERSION__
|
|
using namespace metal;
|
|
#endif
|
|
|
|
typedef enum
|
|
{
|
|
OC_MTL_OP_FILL,
|
|
OC_MTL_OP_CLIP_FILL,
|
|
OC_MTL_OP_START,
|
|
OC_MTL_OP_END,
|
|
OC_MTL_OP_SEGMENT
|
|
} oc_mtl_tile_op_kind;
|
|
|
|
typedef struct oc_mtl_tile_op
|
|
{
|
|
oc_mtl_tile_op_kind kind;
|
|
int index;
|
|
int next;
|
|
|
|
union
|
|
{
|
|
bool crossRight;
|
|
int windingOffset;
|
|
};
|
|
|
|
} oc_mtl_tile_op;
|
|
|
|
typedef struct oc_mtl_tile_queue
|
|
{
|
|
atomic_int windingOffset;
|
|
atomic_int first;
|
|
int last;
|
|
|
|
} oc_mtl_tile_queue;
|
|
|
|
typedef struct oc_mtl_screen_tile
|
|
{
|
|
vector_uint2 tileCoord;
|
|
int first;
|
|
|
|
} oc_mtl_screen_tile;
|
|
|
|
enum
|
|
{
|
|
OC_MTL_MAX_IMAGES_PER_BATCH = 30
|
|
};
|
|
|
|
#endif //__MTL_RENDERER_H_
|