a
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
#include "../imgui/backends/imgui_impl_glfw.h"
|
#include "../imgui/backends/imgui_impl_glfw.h"
|
||||||
#include "../imgui/backends/imgui_impl_opengl3.h"
|
#include "../imgui/backends/imgui_impl_opengl3.h"
|
||||||
#include <GLFW/glfw3.h>
|
#include <GLFW/glfw3.h>
|
||||||
|
#include "../stb/stb_image.h"
|
||||||
|
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
@@ -24,6 +25,11 @@ std::mutex m;
|
|||||||
std::atomic<bool> isGenerating{false};
|
std::atomic<bool> isGenerating{false};
|
||||||
std::future<void> generationFuture;
|
std::future<void> generationFuture;
|
||||||
|
|
||||||
|
std::mutex previewMutex;
|
||||||
|
std::atomic<bool> updatePreview{false};
|
||||||
|
frame currentPreviewFrame;
|
||||||
|
GLuint previewTexture = 0;
|
||||||
|
|
||||||
struct AnimationConfig {
|
struct AnimationConfig {
|
||||||
int width = 1024;
|
int width = 1024;
|
||||||
int height = 1024;
|
int height = 1024;
|
||||||
@@ -50,7 +56,7 @@ Grid2 setup(AnimationConfig config) {
|
|||||||
return grid;
|
return grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Preview(Grid2 grid) {
|
void Preview(Grid2& grid) {
|
||||||
TIME_FUNCTION;
|
TIME_FUNCTION;
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
@@ -63,6 +69,14 @@ void Preview(Grid2 grid) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void livePreview(GLFWwindow* window, Grid2& grid) {
|
||||||
|
// frame Frame = grid.getGridAsFrame(frame::colormap::RGB);
|
||||||
|
// int image_width = Frame.getWidth();
|
||||||
|
// int image_height = Frame.getHeight();
|
||||||
|
// auto data = reinterpret_cast<char*>(Frame.getData());
|
||||||
|
// uint8_t* image_data = stbi_load_from_memory((const unsigned char*)data, (int)data.size(), &image_width, &image_height, 3, 4);
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<std::tuple<size_t, Vec2, Vec4>> pickSeeds(Grid2 grid, AnimationConfig config) {
|
std::vector<std::tuple<size_t, Vec2, Vec4>> pickSeeds(Grid2 grid, AnimationConfig config) {
|
||||||
TIME_FUNCTION;
|
TIME_FUNCTION;
|
||||||
std::random_device rd;
|
std::random_device rd;
|
||||||
@@ -187,12 +201,12 @@ bool exportavi(std::vector<frame> frames, AnimationConfig config) {
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mainLogic(const AnimationConfig& config) {
|
void mainLogic(const AnimationConfig& config, Grid2& grid) {
|
||||||
isGenerating = true;
|
isGenerating = true;
|
||||||
try {
|
try {
|
||||||
Grid2 grid = setup(config);
|
grid = setup(config);
|
||||||
Preview(grid);
|
Preview(grid);
|
||||||
std::vector<std::tuple<size_t, Vec2, Vec4>> seeds = pickSeeds(grid,config);
|
std::vector<std::tuple<size_t, Vec2, Vec4>> seeds = pickSeeds(grid, config);
|
||||||
std::vector<frame> frames;
|
std::vector<frame> frames;
|
||||||
|
|
||||||
for (int i = 0; i < config.totalFrames; ++i){
|
for (int i = 0; i < config.totalFrames; ++i){
|
||||||
@@ -322,6 +336,7 @@ int main() {
|
|||||||
static int i4 = 8;
|
static int i4 = 8;
|
||||||
|
|
||||||
std::future<void> mainlogicthread;
|
std::future<void> mainlogicthread;
|
||||||
|
Grid2 grid;
|
||||||
while (!glfwWindowShouldClose(window)) {
|
while (!glfwWindowShouldClose(window)) {
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
|
|
||||||
@@ -329,8 +344,6 @@ int main() {
|
|||||||
ImGui_ImplOpenGL3_NewFrame();
|
ImGui_ImplOpenGL3_NewFrame();
|
||||||
ImGui_ImplGlfw_NewFrame();
|
ImGui_ImplGlfw_NewFrame();
|
||||||
ImGui::NewFrame();
|
ImGui::NewFrame();
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
ImGui::Begin("Gradient settings");
|
ImGui::Begin("Gradient settings");
|
||||||
@@ -348,7 +361,7 @@ int main() {
|
|||||||
|
|
||||||
if (ImGui::Button("Generate Animation")) {
|
if (ImGui::Button("Generate Animation")) {
|
||||||
AnimationConfig config = AnimationConfig(i1, i2, i3, f, i4);
|
AnimationConfig config = AnimationConfig(i1, i2, i3, f, i4);
|
||||||
mainlogicthread = std::async(std::launch::async, mainLogic, config);
|
mainlogicthread = std::async(std::launch::async, mainLogic, config, std::ref(grid));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isGenerating) {
|
if (isGenerating) {
|
||||||
@@ -367,6 +380,43 @@ int main() {
|
|||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ImGui::NewFrame();
|
||||||
|
// {
|
||||||
|
// ImGui::Begin("Live Preview");
|
||||||
|
|
||||||
|
// if (previewTexture != 0) {
|
||||||
|
// // Get available space
|
||||||
|
// ImVec2 availableSize = ImGui::GetContentRegionAvail();
|
||||||
|
|
||||||
|
// // Maintain aspect ratio (assuming square or config width/height)
|
||||||
|
// float aspectRatio = static_cast<float>(currentPreviewFrame.getWidth()) /
|
||||||
|
// static_cast<float>(currentPreviewFrame.getHeight());
|
||||||
|
|
||||||
|
// ImVec2 imageSize;
|
||||||
|
// if (availableSize.x / aspectRatio <= availableSize.y) {
|
||||||
|
// imageSize.x = availableSize.x;
|
||||||
|
// imageSize.y = availableSize.x / aspectRatio;
|
||||||
|
// } else {
|
||||||
|
// imageSize.y = availableSize.y;
|
||||||
|
// imageSize.x = availableSize.y * aspectRatio;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// ImGui::Image((ImTextureID)(intptr_t)previewTexture, imageSize);
|
||||||
|
|
||||||
|
// ImGui::Text("Frame: %dx%d", currentPreviewFrame.getWidth(), currentPreviewFrame.getHeight());
|
||||||
|
// if (isGenerating) {
|
||||||
|
// ImGui::TextColored(ImVec4(0, 1, 0, 1), "Generating...");
|
||||||
|
// } else {
|
||||||
|
// ImGui::Text("Ready");
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// ImGui::Text("No preview available");
|
||||||
|
// ImGui::Text("Start generation to see live preview");
|
||||||
|
// }
|
||||||
|
|
||||||
|
// ImGui::End();
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
ImGui::Render();
|
ImGui::Render();
|
||||||
int display_w, display_h;
|
int display_w, display_h;
|
||||||
@@ -386,6 +436,10 @@ int main() {
|
|||||||
ImGui::DestroyContext();
|
ImGui::DestroyContext();
|
||||||
|
|
||||||
glfwDestroyWindow(window);
|
glfwDestroyWindow(window);
|
||||||
|
if (previewTexture != 0) {
|
||||||
|
glDeleteTextures(1, &previewTexture);
|
||||||
|
previewTexture = 0;
|
||||||
|
}
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
FunctionTimer::printStats(FunctionTimer::Mode::ENHANCED);
|
FunctionTimer::printStats(FunctionTimer::Mode::ENHANCED);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user