summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFox Caminiti <fox@foxcam.net>2022-11-23 11:47:09 -0500
committerFox Caminiti <fox@foxcam.net>2022-11-23 11:47:09 -0500
commit6799b157bae5654d77d0fc2685a1ef3e4a7d9f4c (patch)
tree0c53120d0e72ce8027dfba4e02e101aa1bcdc93f
parent1da96e0dbe95f5078623e2b0469152692833a096 (diff)
graph improvements
-rw-r--r--createcalls.cpp16
-rw-r--r--defines.h2
-rw-r--r--main.cpp32
-rw-r--r--main.h1
-rw-r--r--my_imgui_widgets.cpp225
-rw-r--r--stable_diffusion.h1
6 files changed, 232 insertions, 45 deletions
diff --git a/createcalls.cpp b/createcalls.cpp
index 12fb2de..b6ce7e1 100644
--- a/createcalls.cpp
+++ b/createcalls.cpp
@@ -214,7 +214,8 @@ Bezier_EvaluateValue(project_state *State, bezier_point *PointAddress, v2 *Pos,
if (PointAddress->IsSelected) {
if (State->Interact_Active == interact_type_keyframe_move) {
Pos[PointAddress->IsSelected - 1].x += (int32)State->Interact_Offset[0];
- Pos[PointAddress->IsSelected - 1].y -= (State->Interact_Offset[1] / GraphZoomHeight / Y_Increment);
+ if (State->Interact_Modifier != 1)
+ Pos[PointAddress->IsSelected - 1].y -= (State->Interact_Offset[1] / GraphZoomHeight / Y_Increment);
} else if (State->Interact_Active == interact_type_keyframe_scale) {
Pos[1].x += State->Interact_Offset[0];
Pos[2].x -= State->Interact_Offset[0];
@@ -901,8 +902,8 @@ void Source_UICreateButton(project_data *File, project_state *State, memory *Mem
}
block_layer *Layer = Layer_Init(File, Memory);
Layer->Block_Source_Index = i;
- Layer->x.CurrentValue = Source->Width / 2;
- Layer->y.CurrentValue = Source->Height / 2;
+ Layer->x.CurrentValue = Comp->Width/2;
+ Layer->y.CurrentValue = Comp->Height/2;
Layer->Vertical_Offset = TopOffset-1;
Layer->Frame_Start = Comp->Frame_Start;
Layer->Frame_End = Comp->Frame_End;
@@ -1100,8 +1101,7 @@ void Bitmap_SwapData(uint8 *Address_0, uint8 *Address_1, uint64 Size, uint16 Byt
#if NEON
Assert(InstructionMode != instruction_mode_neon);
-#endif
-
+#else
if (BytesPerPixel == 4) {
uint32 Temp = 0;
while (i < Size) {
@@ -1146,6 +1146,8 @@ void Bitmap_SwapData(uint8 *Address_0, uint8 *Address_1, uint64 Size, uint16 Byt
} else {
Assert(0);
}
+#endif
+
}
@@ -1219,6 +1221,8 @@ PaintTest(brush_info B, void *Buffer, rectangle RenderRegion)
}
}
+#if ARM
+#else
static void
PaintTest_AVX2(brush_info B, void *Buffer, rectangle RenderRegion)
{
@@ -1300,7 +1304,7 @@ Brush_Render(project_state *State, ui *UI, layer_transforms T_Layer, block_compo
PaintTest(B, BitmapAddress, B.LayerBounds);
}
}
-
+#endif
#if 0
diff --git a/defines.h b/defines.h
index 1e8a933..49a1426 100644
--- a/defines.h
+++ b/defines.h
@@ -42,7 +42,7 @@ typedef uint64 ptrsize; // is there a compiler variable for 32 vs 64 bit like
#define AmountOf(Array) sizeof((Array)) / sizeof((Array)[1])
#if ARM
-#define GetCPUTime() Assert(0)
+#define GetCPUTime() 0
#else
#define GetCPUTime() __rdtsc()
#endif
diff --git a/main.cpp b/main.cpp
index 9d8c968..9c05334 100644
--- a/main.cpp
+++ b/main.cpp
@@ -329,8 +329,8 @@ Render_Comp(project_data *File, project_state *State, memory *Memory, ImGuiIO io
int32 Offset = (State->Interact_Active == interact_type_keyframe_move) ? (int32)State->Interact_Offset[0] : 0;
for (int h = 0; h < AmountOf(Layer->Property); h++) {
property_channel *Property = &Layer->Property[h];
- sorted_property_info *InfoLocation = Property_GetSortedInfo(SortedPropertyInfo, i, h);
- uint16 *ArrayLocation = Property_GetSortedArray(SortedPropertyArray, i, h);
+ sorted_property_info *InfoLocation = Property_GetSortedInfo(SortedPropertyInfo, Index_Physical, h);
+ uint16 *ArrayLocation = Property_GetSortedArray(SortedPropertyArray, Index_Physical, h);
if (Property->Block_Bezier_Count) {
real32 MinY, MaxY;
Property_MinMax_Y(Memory, State, Property, InfoLocation, &MinY, &MaxY);
@@ -380,14 +380,11 @@ Render_Comp(project_data *File, project_state *State, memory *Memory, ImGuiIO io
uint64 ScratchActive = 0;
if (!Layer->IsPrecomp) {
block_source *Source;
- if (State->PreviewSource == -1) {
- Source = (block_source *)Memory_Block_AddressAtIndex(Memory, F_Sources, Layer->Block_Source_Index);
- } else {
+ if ((State->PreviewSource != -1) && Layer->IsSelected) {
Source = (block_source *)Memory_Block_AddressAtIndex(Memory, F_Sources, State->PreviewSource);
+ } else {
+ Source = (block_source *)Memory_Block_AddressAtIndex(Memory, F_Sources, Layer->Block_Source_Index);
}
- Width = Source->Width;
- Height = Source->Height;
- BytesPerPixel = Source->BytesPerPixel;
if (Source->Type == source_type_principal || Source->Type == source_type_principal_temp) {
if (State->Interact_Active == interact_type_brush && State->Brush.LayerToPaint_Index == Index_Physical) {
Assert(Source->Type == source_type_principal);
@@ -428,7 +425,9 @@ Render_Comp(project_data *File, project_state *State, memory *Memory, ImGuiIO io
}
BitmapAddress = Memory_Block_Bitmap_AddressAtIndex(Memory, Entry->Block_StartIndex);
}
-
+ Width = Source->Width;
+ Height = Source->Height;
+ BytesPerPixel = Source->BytesPerPixel;
} else {
block_composition *Precomp = (block_composition *)Memory_Block_AddressAtIndex(Memory, F_Precomps, Layer->Block_Source_Index);
BitmapAddress = Render_Comp(File, State, Memory, io, SortedCompArray, SortedLayerArray,
@@ -453,6 +452,8 @@ Render_Comp(project_data *File, project_state *State, memory *Memory, ImGuiIO io
}
*/
+ Assert(Width);
+ Assert(Height);
transform_info T = Transform_Calculate(State, Memory, File, Layer, Comp, Width, Height, BytesPerPixel);
T.SourceBuffer = BitmapAddress;
rectangle RenderRegion = {0, 0, Comp->Width, Comp->Height};
@@ -588,19 +589,24 @@ int main(int argc, char *argv[]) {
#if 0
{
- uint16 SourceIndex = Source_Generate(File, State, &Memory, (void *)"../asset/t_a.png");
+ uint16 SourceIndex = Source_Generate(File, State, &Memory, (void *)"../asset/hand/a.png");
block_source *Source = (block_source *)Memory_Block_AddressAtIndex(&Memory, F_Sources, 0);
Source->IsSelected = true;
}
{
- uint16 SourceIndex = Source_Generate(File, State, &Memory, (void *)"../asset/t_b.png");
+ uint16 SourceIndex = Source_Generate(File, State, &Memory, (void *)"../asset/hand/b.jpg");
block_source *Source = (block_source *)Memory_Block_AddressAtIndex(&Memory, F_Sources, 1);
Source->IsSelected = true;
}
{
- uint16 SourceIndex = Source_Generate(File, State, &Memory, (void *)"../asset/t_c.png");
+ uint16 SourceIndex = Source_Generate(File, State, &Memory, (void *)"../asset/hand/c.png");
+ block_source *Source = (block_source *)Memory_Block_AddressAtIndex(&Memory, F_Sources, 2);
+ Source->IsSelected = true;
+ }
+ {
+ uint16 SourceIndex = Source_Generate(File, State, &Memory, (void *)"../asset/hand/d.png");
block_source *Source = (block_source *)Memory_Block_AddressAtIndex(&Memory, F_Sources, 2);
Source->IsSelected = true;
}
@@ -711,7 +717,7 @@ int main(int argc, char *argv[]) {
Brush_CalcBitmapAlphaFromSize(&Memory, &State->Brush, 4);
State_BindBrushTexture(&Memory, &State->Brush, 4);
- // File_Open(File, State, &Memory, "test");
+ File_Open(File, State, &Memory, "test");
#if STABLE
curl_global_init(CURL_GLOBAL_ALL);
diff --git a/main.h b/main.h
index 4068966..5b92039 100644
--- a/main.h
+++ b/main.h
@@ -358,6 +358,7 @@ struct project_state
// selection_type RecentSelectionType = selection_none;
interact_type Interact_Active;
+ int32 Interact_Modifier;
real32 Interact_Offset[12];
void *Interact_Address;
diff --git a/my_imgui_widgets.cpp b/my_imgui_widgets.cpp
index cf33666..2ecdf9e 100644
--- a/my_imgui_widgets.cpp
+++ b/my_imgui_widgets.cpp
@@ -288,14 +288,6 @@ ImGui_SD_Thumbnail(project_data *File, project_state *State, ui *UI, memory *Mem
draw_list->AddImage((void *)(intptr_t)Source->ThumbnailTex, ImgMin, ImgMax);
if (ImGui::IsItemHovered()) {
- int h = 0, c = 0, a = 0;
- while (Block_Loop(Memory, F_Layers, File->Layer_Count, &h, &c, &a)) {
- block_layer *Layer = (block_layer *)Memory_Block_AddressAtIndex(Memory, F_Layers, a);
- if (Layer->Block_Source_Index == SourceArray[i] && Layer->IsSelected) {
- State->PreviewLayer = a;
- break;
- }
- }
State->PreviewSource = SourceArray[i];
State->UpdateFrame = true;
Active = true;
@@ -311,7 +303,6 @@ ImGui_SD_Thumbnail(project_data *File, project_state *State, ui *UI, memory *Mem
}
if (State->PreviewSource != -1 && !Active) {
State->PreviewSource = -1;
- State->PreviewLayer = -1;
State->UpdateFrame = true;
}
if (ImGui::BeginPopup("temptosource")) {
@@ -418,6 +409,7 @@ ImGui_SD_Prompt(project_data *File, project_state *State, ui *UI, memory *Memory
if (SD->Mode) {
ImGui::SliderFloat("Denoising strength", &SD->DenoisingStrength, 0, 1, "%.2f");
}
+ ImGui::SliderInt("Batch size", &SD->BatchSize, 1, 8, "%i");
ImGui::InputInt("Seed", &SD->Seed);
ImGui::End();
}
@@ -804,18 +796,35 @@ ImGui_TransformUI(project_data *File, project_state *State, memory *Memory, ui *
// Second condition so you don't have to reach for Enter.
if (ImGui::IsKeyPressed(ImGuiKey_Enter) || (ImGui::IsMouseClicked(ImGuiMouseButton_Left) && io.KeyCtrl)) {
int h = 0, c = 0, i = 0;
- History_Entry_Commit(Memory, "Transform layers");
+ if (!io.KeyCtrl)
+ History_Entry_Commit(Memory, "Transform layers");
while (Block_Loop(Memory, F_Layers, File->Layer_Count, &h, &c, &i)) {
block_layer *Layer = (block_layer *)Memory_Block_AddressAtIndex(Memory, F_Layers, i);
if (Layer->IsSelected) {
- History_Action_Swap(Memory, F_File, sizeof(Layer->x.CurrentValue), &Layer->x.CurrentValue);
- History_Action_Swap(Memory, F_File, sizeof(Layer->y.CurrentValue), &Layer->y.CurrentValue);
- History_Action_Swap(Memory, F_File, sizeof(Layer->scale.CurrentValue), &Layer->scale.CurrentValue);
- History_Action_Swap(Memory, F_File, sizeof(Layer->rotation.CurrentValue), &Layer->rotation.CurrentValue);
- Transform_ApplyInteractive(*(interact_transform *)&State->Interact_Offset[0], &Layer->x.CurrentValue, &Layer->y.CurrentValue, &Layer->rotation.CurrentValue, &Layer->scale.CurrentValue);
+ if (io.KeyCtrl) {
+ layer_transforms T = Layer_GetTransforms(Layer);
+ Transform_ApplyInteractive(*(interact_transform *)&State->Interact_Offset[0], &T.x, &T.y, &T.rotation, &T.scale);
+ property_channel *Property[4] = { &Layer->x, &Layer->y, &Layer->rotation, &Layer->scale };
+ real32 Val[4] = { T.x, T.y, T.rotation, T.scale };
+ for (int a = 0; a < 4; a++) {
+ if (Property[a]->CurrentValue != Val[a]) {
+ History_Entry_Commit(Memory, "Add keyframe");
+ bezier_point Point = { 1, {(real32)State->Frame_Current, Val[a], -1, 0, 1, 0}, interpolation_type_linear, 0, {0, 0, 0}, 0 };
+ Bezier_Add(Memory, Property[a], Point);
+ History_Entry_End(Memory);
+ }
+ }
+ } else {
+ History_Action_Swap(Memory, F_File, sizeof(Layer->x.CurrentValue), &Layer->x.CurrentValue);
+ History_Action_Swap(Memory, F_File, sizeof(Layer->y.CurrentValue), &Layer->y.CurrentValue);
+ History_Action_Swap(Memory, F_File, sizeof(Layer->scale.CurrentValue), &Layer->scale.CurrentValue);
+ History_Action_Swap(Memory, F_File, sizeof(Layer->rotation.CurrentValue), &Layer->rotation.CurrentValue);
+ Transform_ApplyInteractive(*(interact_transform *)&State->Interact_Offset[0], &Layer->x.CurrentValue, &Layer->y.CurrentValue, &Layer->rotation.CurrentValue, &Layer->scale.CurrentValue);
+ }
}
}
- History_Entry_End(Memory);
+ if (!io.KeyCtrl)
+ History_Entry_End(Memory);
State->Interact_Active = interact_type_none;
State->UpdateFrame = true;
}
@@ -2041,18 +2050,14 @@ ImGui_Timeline(project_data *File, project_state *State, memory *Memory, ui *UI,
if (State->Interact_Active == interact_type_keyframe_move ||
State->Interact_Active == interact_type_keyframe_rotate ||
State->Interact_Active == interact_type_keyframe_scale) {
- // bool32 CommitAction = 0;
- // if (!CommitAction) {
- // History_Entry_Commit(Memory, "Delete source");
- // CommitAction = 1;
- History_Entry_Commit(Memory, "Add keyframe");
+ History_Entry_Commit(Memory, "Move keyframe");
int h = 0, c = 0, i = 0;
while (Block_Loop(Memory, F_Layers, File->Layer_Count, &h, &c, &i)) {
block_layer *Layer = (block_layer *)Memory_Block_AddressAtIndex(Memory, F_Layers, i);
if (!Layer->IsSelected)
continue;
for (int h = 0; h < AmountOf(Layer->Property); h++) {
- uint16 *ArrayLocation = SortedPropertyArray + (i * 7 * MAX_KEYFRAMES_PER_BLOCK) + (h * MAX_KEYFRAMES_PER_BLOCK);
+ uint16 *ArrayLocation = Property_GetSortedArray(SortedPropertyArray, i, h);
property_channel *Property = &Layer->Property[h];
for (int p = 0; p < Property->Keyframe_Count; p++) {
int k = ArrayLocation[p];
@@ -2074,6 +2079,7 @@ ImGui_Timeline(project_data *File, project_state *State, memory *Memory, ui *UI,
State->Interact_Offset[2] = 0;
State->Interact_Offset[3] = 0;
State->Interact_Active = interact_type_none;
+ State->Interact_Modifier = 0;
}
UI->BoxSelect = true;
}
@@ -2127,9 +2133,16 @@ ImGui_ProcessInputs(project_data *File, project_state *State, ui *UI, memory *Me
}
}
if (ImGui::IsKeyPressed(ImGuiKey_X)) {
- v4 Temp = UI->Color;
- UI->Color = UI->AltColor;
- UI->AltColor = Temp;
+ if (State->Interact_Active == interact_type_keyframe_move) {
+ if (State->Interact_Modifier != 1)
+ State->Interact_Modifier = 1;
+ else
+ State->Interact_Modifier = 0;
+ } else {
+ v4 Temp = UI->Color;
+ UI->Color = UI->AltColor;
+ UI->AltColor = Temp;
+ }
}
if (ImGui::IsKeyPressed(ImGuiKey_V)) {
State->Tool = tool_default;
@@ -3799,6 +3812,168 @@ static char ImGuiPrefs[] = "[Window][DockSpaceViewport_11111111]"
"\n DockNode ID=0x00000008 Parent=0x00000006 SizeRef=502,256 Selected=0x812F222D"
"\n DockNode ID=0x00000002 Parent=0x8B93E3BD SizeRef=3200,627 HiddenTabBar=1 Selected=0x0F18B61B";
+[Window][DockSpaceViewport_11111111]
+Pos=0,0
+Size=3200,1800
+Collapsed=0
+
+[Window][Debug##Default]
+Pos=122,442
+Size=400,400
+Collapsed=0
+
+[Window][Viewport]
+Pos=596,34
+Size=2079,1149
+Collapsed=0
+DockId=0x00000010,0
+
+[Window][###Properties]
+Pos=0,34
+Size=594,452
+Collapsed=0
+DockId=0x0000000B,0
+
+[Window][Timeline]
+Pos=0,1185
+Size=3200,615
+Collapsed=0
+DockId=0x0000000A,0
+
+[Window][Dear ImGui Demo]
+Pos=2677,34
+Size=523,633
+Collapsed=0
+DockId=0x00000011,1
+
+[Window][Files]
+Pos=2677,669
+Size=523,514
+Collapsed=0
+DockId=0x00000012,0
+
+[Window][Effects list]
+Pos=2717,414
+Size=483,623
+Collapsed=0
+DockId=0x00000008,0
+
+[Window][Graph editor]
+Pos=0,949
+Size=3200,526
+Collapsed=0
+DockId=0x00000009,0
+
+[Window][undotree]
+Pos=2367,83
+Size=256,565
+Collapsed=0
+
+[Window][memoryviewer]
+Pos=50,273
+Size=800,200
+Collapsed=0
+
+[Window][Example: Custom rendering]
+Pos=758,789
+Size=485,414
+Collapsed=0
+
+[Window][Memory viewer]
+Pos=2677,669
+Size=523,514
+Collapsed=0
+DockId=0x00000012,1
+
+[Window][Graph info]
+Pos=1303,1142
+Size=235,353
+Collapsed=0
+
+[Window][Properties]
+Pos=0,34
+Size=495,1056
+Collapsed=0
+DockId=0x0000000F,0
+
+[Window][Colors]
+Pos=2677,34
+Size=523,633
+Collapsed=0
+DockId=0x00000011,0
+
+[Window][Menu]
+Pos=0,0
+Size=3200,32
+Collapsed=0
+DockId=0x0000000D,0
+
+[Window][Stable Diffusion]
+Pos=2206,684
+Size=421,462
+Collapsed=0
+
+[Window][SD prompt input]
+Pos=2677,669
+Size=523,514
+Collapsed=0
+DockId=0x00000012,2
+
+[Window][Example: Console]
+Pos=747,851
+Size=520,600
+Collapsed=0
+
+[Window][SD gallery]
+Pos=0,488
+Size=594,695
+Collapsed=0
+DockId=0x0000000C,0
+
+[Table][0x861D378E,3]
+Column 0 Weight=1.0000
+Column 1 Weight=1.0000
+Column 2 Weight=1.0000
+
+[Table][0x1F146634,3]
+RefScale=13
+Column 0 Width=63
+Column 1 Width=63
+Column 2 Width=63
+
+[Table][0x64418101,3]
+RefScale=13
+Column 0 Width=63
+Column 1 Width=63
+Column 2 Width=63
+
+[Table][0xC9935533,3]
+Column 0 Weight=1.0000
+Column 1 Weight=1.0000
+Column 2 Weight=1.0000
+
+[Docking][Data]
+DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,0 Size=3200,1800 Split=Y Selected=0x13926F0B
+ DockNode ID=0x0000000D Parent=0x8B93E3BD SizeRef=3200,32 HiddenTabBar=1 Selected=0xA57AB2C6
+ DockNode ID=0x0000000E Parent=0x8B93E3BD SizeRef=3200,1766 Split=Y
+ DockNode ID=0x00000001 Parent=0x0000000E SizeRef=3200,1149 Split=X Selected=0x13926F0B
+ DockNode ID=0x00000003 Parent=0x00000001 SizeRef=594,1171 Split=Y Selected=0xDBB8CEFA
+ DockNode ID=0x0000000B Parent=0x00000003 SizeRef=521,452 Selected=0xDBB8CEFA
+ DockNode ID=0x0000000C Parent=0x00000003 SizeRef=521,695 Selected=0x56290987
+ DockNode ID=0x00000004 Parent=0x00000001 SizeRef=2604,1171 Split=X Selected=0x13926F0B
+ DockNode ID=0x00000005 Parent=0x00000004 SizeRef=2079,1171 Split=X Selected=0x13926F0B
+ DockNode ID=0x0000000F Parent=0x00000005 SizeRef=495,856 Selected=0x199AB496
+ DockNode ID=0x00000010 Parent=0x00000005 SizeRef=2199,856 CentralNode=1 Selected=0x13926F0B
+ DockNode ID=0x00000006 Parent=0x00000004 SizeRef=523,1171 Split=Y Selected=0x86FA2F90
+ DockNode ID=0x00000007 Parent=0x00000006 SizeRef=502,412 Split=Y Selected=0x86FA2F90
+ DockNode ID=0x00000011 Parent=0x00000007 SizeRef=483,633 Selected=0xBF7DFDC9
+ DockNode ID=0x00000012 Parent=0x00000007 SizeRef=483,514 Selected=0x59A2A092
+ DockNode ID=0x00000008 Parent=0x00000006 SizeRef=502,623 Selected=0x812F222D
+ DockNode ID=0x00000002 Parent=0x0000000E SizeRef=3200,615 Split=Y Selected=0x0F18B61B
+ DockNode ID=0x00000009 Parent=0x00000002 SizeRef=3250,526 Selected=0xA1F22F4D
+ DockNode ID=0x0000000A Parent=0x00000002 SizeRef=3250,323 HiddenTabBar=1 Selected=0x0F18B61B
+
+
/*
// Graph window
diff --git a/stable_diffusion.h b/stable_diffusion.h
index 19d0acf..b498a7c 100644
--- a/stable_diffusion.h
+++ b/stable_diffusion.h
@@ -26,6 +26,7 @@ struct sd_state
int32 Height = 512;
int32 SamplerIndex = 0;
real32 CFG = 7;
+ int32 BatchSize = 4;
real32 DenoisingStrength = 0.4;
int32 Seed = -1;
};