diff options
Diffstat (limited to 'main.h')
-rw-r--r-- | main.h | 693 |
1 files changed, 0 insertions, 693 deletions
@@ -1,693 +0,0 @@ -enum instruction_mode { - instruction_mode_scalar, -#if ARM - instruction_mode_neon, -#else - instruction_mode_sse, - instruction_mode_avx -#endif -}; - -static char* BlendmodeNames[] = { - "Normal", - "Multiply", - "Color Burn", - "Linear Burn", - "Add", - "Screen", - "Overlay", - "Soft Light", - "Hard Light", - "Subtract", - "Divide", - "Difference" -}; - -enum blend_mode -{ - blend_normal, - blend_multiply, - blend_colorburn, - blend_linearburn, - blend_add, - blend_screen, - blend_overlay, - blend_softlight, - blend_hardlight, - blend_subtract, - blend_divide, - blend_difference -}; - -#define STRING_SIZE (1024 - sizeof(uint8)) // TODO(fox): Paths above STRING_SIZE length aren't handled properly. -struct block_string { - uint8 Occupied; - char Char[STRING_SIZE]; -}; - -struct bitmap_cache_status -{ - uint32 Block_End; -}; - -enum cache_entry_type -{ - cache_entry_type_assert, - cache_entry_type_comp, - cache_entry_type_source, - cache_entry_type_layer, -}; - -struct cache_entry -{ - uint8 IsOccupied; - uint8 IsCached; - uint64 CycleTime; - uint32 Block_StartIndex; - enum cache_entry_type Type; - uint32 TypeInfo; - uint32 TypeInfo_Sub; -}; - -enum interpolation_type -{ - interpolation_type_linear, - interpolation_type_bezier, - interpolation_type_hold -}; - -struct bezier_point { - uint8 Occupied; - v2 Pos[3]; - interpolation_type Type; - bool32 IsSelected; - uint8 PointSelect[3]; - uint8 Color; -}; - -struct block_bezier { - uint8 Occupied; - bezier_point Point[MAX_KEYFRAMES_PER_BLOCK]; -}; - -enum selection_type -{ - selection_type_none, - selection_type_layer, - selection_type_keyframe -}; - -struct clipboard_channel { - void *Name; - uint16 LayerOffset; - uint16 KeyframeCount; -}; - -struct clipboard_contents { - selection_type Type; - clipboard_channel Channel[16]; - uint16 ChannelCount; -}; - -struct layer_bitmap_state { - // Image and video - bool32 ToUpdate = 1; - - // GL state - // gl_effect_layer Test; - // gl_effect_layer TestM; - - // Video state - int32 CurrentFrame = -1; // The last frame number rendered to the bitmap. -1 gurantees a load upon layer creation. - void *AVInfo; // Internal data containing current frame info -}; - -struct render_state -{ - struct layer_bitmap_state Bitmap[MAX_LAYERS]; - cache_entry Entry[2048]; -}; - -struct render_queue_item -{ - bool32 Type; - v2 Pos; -}; - -struct render_queue -{ - uint16 Playhead; - uint16 CurrentIdx; - render_queue_item Item[512]; -}; - -enum focused_window -{ - focus_viewport, - focus_properties, - focus_timeline -}; - -struct sorted_property_info -{ - uint32 MinYIndex; - uint32 MaxYIndex; -}; - -struct sorted_comp_info -{ - uint32 LayerCount; - uint32 CurrentSortIndex; // Used intermediately in the sorting algorithm -}; - -struct sorted_layer -{ - uint16 Block_Layer_Index; - real32 SortedOffset; - uint16 Sorted_Effect_Index[MAX_EFFECTS]; - uint16 SortedPropertyStart; - uint16 SortedKeyframeStart; -}; - -struct sorted_file -{ - sorted_layer *LayerArray; - sorted_comp_info *CompArray; - sorted_property_info *PropertyInfo; - uint16 *PropertyArray; - uint16 *SourceArray; // sort by recency, temp only - uint16 TempSourceCount; - uint64 Layer_SortSize; - uint64 Property_SortSize; - uint64 Source_SortSize; -}; - -enum timeline_mode -{ - timeline_mode_default, - timeline_mode_graph -}; - -struct pen_state { - bool32 IsActive; -}; - -enum brush_type -{ - brush_normal, - brush_wacky1, - brush_wacky2, - brush_wacky3, - brush_amount -}; - -char *BrushNames[brush_amount] = { - "brush_normal", - "brush_wacky1", - "brush_wacky2", - "brush_wacky3" -}; - -struct brush_state -{ - ImVec2 UIPos; // Initial position when ctrl is held - real32 Size = 256; // Maxes at 1024 for now - real32 Hardness = 0.55f; // From 1 to 100 - real32 Spacing = 1.0f; - bool32 EraseMode = 0; - brush_type Type = brush_normal; - GLuint GLTexture; - v2 PrevPos; - void *PaintBuffer; - void *TransientBitmap; - uint32 LayerToPaint_Index = -1; - rectangle CacheBounds = { 99999, 99999, -99999, -99999 }; -}; - -enum interact_type -{ - interact_type_none, - interact_type_timeline_scrub, - interact_type_slider_scrub, - interact_type_layer_move, - interact_type_layer_timeadjust, - interact_type_viewport_transform, - interact_type_keyframe_move, - interact_type_keyframe_scale, - interact_type_keyframe_rotate, - interact_type_brush -}; - -char *ToolName[] { - "Move", - "Crop", - "Brush", - "Pen" -}; - -enum tool { - tool_default, - tool_crop, - tool_brush, - tool_pen, - tool_count -}; - -struct interact_transform -{ - v2 Min; - v2 Max; - real32 Radians; - v2 Position; - real32 Scale = 1.0f; - ImVec2 OGPos; - uint32 TransformMode; -}; - -enum hotkey_input -{ - hotkey_none, - hotkey_newpaintlayer, - hotkey_newlayerfromsource, - hotkey_deletelayer, - hotkey_undo, - hotkey_redo, -}; - -enum property_display_type -{ - property_display_type_standard, - property_display_type_blendmode, - property_display_type_color -}; - -struct header_property -{ - char *Name; - real32 DefaultValue; - property_display_type DisplayType; - real32 MinVal; - real32 MaxVal; - bool32 AlwaysInteger; - -}; - -struct gl_effect_layer { - bool32 Initialized; - GLuint Texture; - GLuint FramebufferObject; - uint32 Color_Renderbuffer; - uint32 Stencil_Renderbuffer; -}; - - -enum effect_display_type -{ - effect_display_type_standard, - effect_display_type_levels, - effect_display_type_curves -}; - -struct block_effect -{ - uint8 Occupied; - char ID[8]; - bool32 IsToggled; - uint16 Index; - uint32 Block_Property_Index[MAX_PROPERTIES_PER_EFFECT]; - real32 ExtraData[16]; -}; - -struct header_effect -{ - char *Name; - char *ID; // Eight-letter string that's used in the actual file - void (*func)(real32 *, int, int, int, void *, uint16); - uint16 PropertyStartIndex; - uint16 Property_Count; - effect_display_type DisplayType; - bool32 UseGL; - uint32 GLShaderIndex; -}; - -enum imgui_popups -{ - popup_none, - popup_saveas, - popup_keybinds -}; - -struct project_state -{ - bool32 UpdateKeyframes = 0; - bool32 UpdateFrame = 1; // only refreshes frame; set UpdateKeyframes to update animation - bool32 DebugDisableCache = 1; - - render_state Render; - render_queue Queue; - - int32 Frame_Current; - tool Tool = tool_default; - // GLuint ToolIconTex[(int)tool_count]; - pen_state Pen = {}; - brush_state Brush; - -#if STABLE - int32 CurlActive = 0; - char JSONPayload[1024*1024*4]; - real32 SDPercentDone; - real32 SDTimeEstimate; - real64 SDTimer; -#endif - - header_effect Effect[128]; - header_property Property[512]; - uint16 Playhead_Effect; - uint16 Playhead_Property; - - int32 PreviewLayer = -1; - int32 PreviewSource = -1; - - hotkey_input HotkeyInput; - - void *Dump1; - void *Dump2; - - char DummyName[512]; - char DummyName2[512]; - - bool32 IsRunning = 1; - bool32 IsPlaying; - bool32 FirstFrame = 1; - - void *ClipboardBuffer; - uint64 ClipboardSize; - - int16 MostRecentlySelectedLayer = -1; - - // NOTE(fox): Try to use this only where you actually need it (the - // ambiguous case of copying keyframes versus layers), since this state - // transfer will get buggy if you expand it to everything. - selection_type RecentSelectionType = selection_type_none; - - interact_type Interact_Active; - int32 Interact_Modifier; - real32 Interact_Offset[12]; - void *Interact_Address; - - int32 Initializing = 3; - - int32 MsgTime; // currently in "frames" - char *Msg; - - imgui_popups ImGuiPopups; - char Filename[512]; - - ImGuiTextFilter filter; // This filter API is pretty ballin'. - bool32 RerouteEffects; // Allows shift+space hotkey to gain focus on the effects panel. - - ImDrawListSplitter Test; - ImDrawListSplitter Split_KeybindUI; - - int32 Warp_X = 0; - int32 Warp_Y = 0; - bool32 Warp_WantSetPos = false; - ImVec2 Warp_PositionToSet; - real32 Warp_PositionInitial; - int32 Warp_Direction; - - uint32 InteractTransformMode; // Whether a drag on the Shift+T UI is scale (1), rotation (2), or position (3). - - timeline_mode TimelineMode; - - bool32 BoxSelect; - - focused_window FocusedWindow; // Convenience for adding window-specific hotkeys. - bool32 SetFocus; - v2 TempZoomRatio = V2(1, 1); -}; - -// UI info that's saved to the file and is not part of the history tree -struct ui -{ - ImVec2 CompZoom; // In screen pixels, not percentage. - ImVec2 CompPos; - - // Under 1 is zoomed in! - ImVec2 TimelinePercentZoomed; - ImVec2 TimelinePercentOffset; - - ImVec2 GraphZoomSize; - ImVec2 GraphMoveSize; - - v4 Color = {1, 1, 1, 1}; - v4 AltColor = {0, 0, 0, 1}; - bool32 IsPrimary; - -#if STABLE - sd_state SD; - bool32 StableEnabled = 0; -#endif - - ImU32 LayerColors[16] = { - 0xff8b1f1f, - 0xffc25909, - 0xff57c20a, - 0xff8ee6da, - 0xffa48fb7, - 0xffd14061, - 0xff38b683, - 0xff3fdbe5, - 0xffc9c9c9, - 0xff978489, - 0xfffaf5ab, - 0xff101010, - 0xffa024ca, - 0xfffae920, - 0xff208dfa, - 0xfffa2051 - }; -}; - - -struct project_data -{ - uint8 Occupied; - uint16 Layer_Count; - uint16 Source_Count; - uint16 Comp_Count; - uint16 PrincipalCompIndex; - ui UI; -}; - -struct block_composition -{ - uint8 Occupied; - - uint16 Name_String_Index; - - uint16 Width; - uint16 Height; - uint16 FPS; - uint16 BytesPerPixel; - - uint32 Frame_Count; - int32 Frame_Start; - int32 Frame_End; -}; - -enum source_type { - source_type_none, - source_type_principal, - source_type_principal_temp, - source_type_file -}; - -struct layer_transforms -{ - real32 x; - real32 y; - real32 ax; - real32 ay; - real32 rotation; - real32 scale; -}; - -struct block_source -{ - uint8 Occupied; - - bool32 IsSelected; - - uint16 Path_String_Index; - uint16 Name_String_Index; - - // Only used for type_principal - uint16 Bitmap_Index; - - uint16 Width; - uint16 Height; - uint16 BytesPerPixel; - - uint32 RelativeTimestamp; // - GLuint ThumbnailTex; - - source_type Type; -}; - -struct property_channel { - uint8 Occupied; - uint16 Block_Bezier_Index[MAX_KEYFRAME_BLOCKS]; - uint16 Block_Bezier_Count; - uint16 Keyframe_Count; - - int32 Identifier; - - real32 CurrentValue; - real32 MaxVal; - real32 MinVal; - bool32 AlwaysInteger; - real32 ScrubVal; // increment when dragging on sliders, etc. - - bool32 IsToggled; -}; - -char *DefaultChannel[] = { "X Position", "Y Position", "Anchor X", "Anchor Y", - "Rotation", "Scale", "Opacity", "Frame Number" }; - -struct block_layer { - uint8 Occupied; - - bool32 IsPrecomp; - bool32 Precomp_Toggled; - uint16 Block_Source_Index; // also used for precomp - uint16 Block_String_Index; - uint16 Block_Composition_Index; - - uint16 Block_Mask_Index[MAX_MASKS]; - uint16 Block_Mask_Count; - - uint16 Block_Effect_Index[MAX_EFFECTS]; - uint16 Block_Effect_Count; - - blend_mode BlendMode; - - union - { - property_channel Property[8]; - struct - { - property_channel x; - property_channel y; - property_channel ax; - property_channel ay; - property_channel rotation; - property_channel scale; - property_channel opacity; - property_channel time; - }; - }; - - bool32 IsSelected; - bool32 IsVisible; - bool32 IsAdjustment; - - int32 Frame_Offset; - int32 Frame_Start; - int32 Frame_End; - - real32 Vertical_Offset; - real32 Vertical_Height = 1; - - uint16 ColIndex; -}; - -struct render_byte_info { - uint32 MaskPixel; - uint32 ByteOffset; - uint32 Bits; - real32 Normalized; -}; - -struct transform_info { - real32 XAxisPX; - real32 XAxisPY; - real32 YAxisPX; - real32 YAxisPY; - - real32 LayerWidth; - real32 LayerHeight; - real32 LayerBytesPerPixel; - real32 LayerPitch; - render_byte_info LayerBits; - - real32 BufferWidth; - real32 BufferHeight; - real32 BufferBytesPerPixel; - real32 BufferPitch; - render_byte_info BufferBits; - - real32 LayerOpacity; - real32 OriginX; - real32 OriginY; - blend_mode BlendMode; - - bool32 IsAdjustment; - - rectangle ClipRect; - void *SourceBuffer; -}; - -struct direct_info { - real32 BufferWidth; - real32 BufferHeight; - real32 BufferBytesPerPixel; - real32 BufferPitch; - render_byte_info BufferBits; - - real32 Opacity; - - blend_mode BlendMode; - rectangle ClipRect; - void *SourceBuffer; - - bool32 SwapActive; - bool32 OnlyBlendAlpha; -}; - -struct brush_info { - uint32 BrushLength; - rectangle LayerBounds; - uint32 LayerPitch; - uint32 BrushPitch; - int32 ExtraX; - int32 ExtraY; - render_byte_info LayerBits; - render_byte_info BrushBits; - int BytesPerPixel; - int SourceWidth; - int SourceBytesPerPixel; - void *SourceBuffer; - void *BrushBuffer; - real32 R_Brush; - real32 G_Brush; - real32 B_Brush; - real32 A_Brush; - bool32 EraseMode; - uint8 *BrushRow; -}; - -enum render_type { - render_type_main, - render_type_notransform, - render_type_notransform_swap, - render_type_brush -}; - -struct render_entry { - void *RenderData; - void *OutputBuffer; - render_type RenderType; - rectangle RenderRegion; -}; - |