From 635576972024319c15141645d3304db8cd1d1e19 Mon Sep 17 00:00:00 2001 From: Fox Caminiti Date: Mon, 8 Aug 2022 13:50:34 -0400 Subject: basic bezier path system added --- main.h | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 10 deletions(-) (limited to 'main.h') diff --git a/main.h b/main.h index 965cef7..da099cc 100644 --- a/main.h +++ b/main.h @@ -30,6 +30,7 @@ enum memory_table_list { P_AVInfo, P_SourceBitmapTable, + P_MiscCache, // don't put this in final F_Layers, F_Effects, @@ -66,6 +67,7 @@ struct cached_bitmap { struct memory { memory_table Slot[16]; cached_bitmap Bitmap[4096]; + void *Scratch; // 64 MB of data }; struct property_channel; @@ -125,6 +127,27 @@ enum blend_mode blend_difference }; +struct gl_vertex_shader { +}; + +struct gl_effect { + uint32 FragmentShader; + uint32 ShaderProgram; + uint32 VertexShader; + uint32 EBO; + uint32 VBO; +}; + +static gl_effect TGL; + +struct gl_effect_layer { + GLuint Texture; + GLuint FBO; + GLuint RBO; +}; + +static gl_vertex_shader GL_Vertices; + union val { real32 f; v4 col; @@ -216,6 +239,12 @@ struct layer_bitmap_info { // Image and video void *BitmapBuffer; // Each layer has a persistent bitmap that the source data gets packed into. bool32 ToUpdate = 1; + gl_effect_layer Test; + + // TODO(fox): Find a better place to store this. Either give effects a more + // fleshed-out API to add things to a struct like this or integrate into ImGui. + void *HistogramVals; // 256*5 packed floats (all channel average + RGBA). + uint16 LevelsSelector; // Which channel is currently active // Video only int32 FrameOffset; // the "true" position of video layers, separate from StartFrame @@ -245,6 +274,7 @@ struct effect { void (*func)(source *, layer_bitmap_info *, memory *, property_channel []); uint16 NumberOfProperties; display_type DisplayType; + gl_effect GL_Effect; property_channel Property[MAX_PROPERTIES_PER_EFFECT]; bool32 UIIsCollapsed = 0; bool32 IsActive = 1; @@ -271,6 +301,18 @@ struct transform_info { void *SourceBuffer; }; +struct mask_point { + v2 Pos; + bool32 HandleBezier; + v2 TangentLeft; + v2 TangentRight; +}; + +struct mask { + mask_point Point[16]; + uint16 NumberOfPoints; +}; + struct project_layer { char *Name; blend_mode BlendMode; @@ -299,6 +341,9 @@ struct project_layer { effect *Effect[MAX_EFFECTS]; uint16 NumberOfEffects; + mask Mask[MAX_MASKS]; + uint16 NumberOfMasks; + int32 StartFrame; int32 EndFrame; @@ -343,18 +388,10 @@ struct project_data uint16 NumberOfLayers; source Source[MAX_SOURCES]; + uint32 SourceSelected; uint16 NumberOfSources; }; -enum tool { - DefaultSelect, - BrushTool, - CropTool, - BoxSelect, - QuickSelect, - PenTool -}; - enum transforms_hotkey_interact { sliding_position, sliding_anchorpoint, @@ -379,12 +416,18 @@ enum selection_type selection_keyframe, }; +enum tool { + tool_default, + tool_pen +}; + struct project_state { bool32 UpdateKeyframes = 1; bool32 UpdateFrame = 1; // only refreshes frame; set UpdateKeyframes to update animation bool32 DebugDisableCache = 1; - tool Tool = DefaultSelect; + + tool Tool = tool_default; uint16 LayersToRender[MAX_LAYERS]; uint16 NumberOfLayersToRender; -- cgit v1.2.3