diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a7894b..031171a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,36 +1,65 @@ -cmake_minimum_required(VERSION 3.24) -project(RaylibStuff) +cmake_minimum_required(VERSION 3.10) -# nvim/fleet users (ONLY WORKS WITH MINGW/NINJA BUILDERS) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +# Set the project name +project(RaylibDmx) -# Deps -add_subdirectory(lib/raylib) -add_subdirectory(lib/imgui) -add_subdirectory(lib/rlImGui) +# Set the C++ standard +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) -# add source code -file(GLOB_RECURSE PROJECT_SOURCES CONFIGURE_DEPENDS "${CMAKE_CURRENT_LIST_DIR}/src/*.cpp") -set(PROJECT_INCLUDE "${CMAKE_CURRENT_LIST_DIR}/src") +# Include FetchContent module +include(FetchContent) -# exe -add_executable(${PROJECT_NAME}) -target_sources(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCES}) -target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_INCLUDE}) +# Download and configure raylib +FetchContent_Declare( + raylib + GIT_REPOSITORY https://github.com/raysan5/raylib.git + GIT_TAG 4.5.0 # or the latest version you want to use +) +FetchContent_MakeAvailable(raylib) -# THIS IS WHEREE THE OTHER LIBRARIES ARE LINKED -# SCREW YOU LINKER -target_link_libraries(${PROJECT_NAME} PRIVATE imgui raylib rlImGui) +# Download and configure ImGui +FetchContent_Declare( + imgui + GIT_REPOSITORY https://github.com/ocornut/imgui.git + GIT_TAG v1.89.2 # or the latest version you want to use +) +FetchContent_MakeAvailable(imgui) -# Web Configurations -if (${PLATFORM} STREQUAL "Web") - # Tell Emscripten to build an example.html file. - set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".html") -endif() +# Build ImGui as a static library +add_library(ImGui STATIC + ${imgui_SOURCE_DIR}/imgui.cpp + ${imgui_SOURCE_DIR}/imgui_demo.cpp + ${imgui_SOURCE_DIR}/imgui_draw.cpp + ${imgui_SOURCE_DIR}/imgui_tables.cpp + ${imgui_SOURCE_DIR}/imgui_widgets.cpp +) +target_include_directories(ImGui PUBLIC ${imgui_SOURCE_DIR}) -# Checks if OSX and links appropriate frameworks (Only required on MacOS) -if (APPLE) - target_link_libraries(${PROJECT_NAME} "-framework IOKit") - target_link_libraries(${PROJECT_NAME} "-framework Cocoa") - target_link_libraries(${PROJECT_NAME} "-framework OpenGL") -endif() +# Download and configure rlImGui (raylib backend for ImGui) +FetchContent_Declare( + rlimgui + GIT_REPOSITORY https://github.com/raylib-extras/rlImGui.git + GIT_TAG main # Use the correct branch name +) +FetchContent_MakeAvailable(rlimgui) + +# Add executable target with the source files +file(GLOB_RECURSE SOURCES "src/*.cpp") +add_executable(${PROJECT_NAME} ${SOURCES}) + +# Link raylib to your project +target_link_libraries(${PROJECT_NAME} raylib) + +# Add rlImGui to the project +set(RLIMGUI_SOURCES + ${rlimgui_SOURCE_DIR}/rlImGui.cpp +) + +# Create the rlImGui library +add_library(rlImGui STATIC ${RLIMGUI_SOURCES}) +target_include_directories(rlImGui PUBLIC ${rlimgui_SOURCE_DIR} ${imgui_SOURCE_DIR}) +target_link_libraries(rlImGui raylib ImGui) + +# Link ImGui and rlImGui to your project +target_link_libraries(${PROJECT_NAME} ImGui rlImGui) diff --git a/lib/imgui/CMakeLists.txt b/lib/imgui/CMakeLists.txt deleted file mode 100644 index a14113b..0000000 --- a/lib/imgui/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -include(FetchContent) - -FetchContent_Declare( - imgui - GIT_REPOSITORY https://github.com/ocornut/imgui.git - GIT_SHALLOW TRUE - GIT_TAG master -) -FetchContent_MakeAvailable(imgui) - -add_library(imgui STATIC - ${imgui_SOURCE_DIR}/imgui.cpp - ${imgui_SOURCE_DIR}/imgui_draw.cpp - ${imgui_SOURCE_DIR}/imgui_tables.cpp - ${imgui_SOURCE_DIR}/imgui_widgets.cpp - ${imgui_SOURCE_DIR}/imgui_demo.cpp -) - -target_include_directories(imgui PUBLIC - ${imgui_SOURCE_DIR} -) \ No newline at end of file diff --git a/lib/raylib/CMakeLists.txt b/lib/raylib/CMakeLists.txt deleted file mode 100644 index 635fc24..0000000 --- a/lib/raylib/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -# Use FetchContent to download and build raylib -# This is a faster alternative to using a git repo, since this just downloads the source -# while the git repo pull takes a lot longer. Not sure why, other repos don't seem to have this issue - -# If you would like to use git instead, use this: -# - - - - - - - - - - - - - - - - - - - - - - - - -#FetchContent_Declare( -# raylib -# GIT_REPOSITORY "https://github.com/raysan5/raylib.git" -# GIT_TAG "master" -# GIT_SHALLOW TRUE -# GIT_PROGRESS TRUE -#) -# - - - - - - - - - - - - - - - - - - - - - - - - - -include(FetchContent) - -set(FETCHCONTENT_QUIET FALSE) -set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) # don't build the supplied examples -set(BUILD_GAMES OFF CACHE BOOL "" FORCE) # don't build the supplied example games - -FetchContent_Declare( - raylib - URL https://github.com/raysan5/raylib/archive/refs/tags/4.5.0.tar.gz -) -FetchContent_MakeAvailable(raylib) - -# Raylib conf -set(raylib_VERBOSE 1) # not 100 % sure if this does anything... \ No newline at end of file diff --git a/lib/rlImGui/CMakeLists.txt b/lib/rlImGui/CMakeLists.txt deleted file mode 100644 index c5acae8..0000000 --- a/lib/rlImGui/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -cmake_minimum_required(VERSION 3.24) -project(rlImGui) - -include(FetchContent) - -FetchContent_Declare( - rlImGui - GIT_REPOSITORY https://github.com/raylib-extras/rlImGui.git - GIT_SHALLOW TRUE - GIT_TAG main -) - -FetchContent_MakeAvailable(rlImGui) - -include_directories(${rlImGui_SOURCE_DIR}) -include_directories(${CMAKE_SOURCE_DIR}/imgui) -include_directories(${CMAKE_SOURCE_DIR}/raylib/src) - -add_library(rlImGui STATIC - ${rlImGui_SOURCE_DIR}/rlImGui.h - ${rlImGui_SOURCE_DIR}/imgui_impl_raylib.h - ${rlImGui_SOURCE_DIR}/rlImGuiColors.h -) - -target_sources(rlImGui PRIVATE - ${CMAKE_SOURCE_DIR}/imgui/imgui.cpp - ${CMAKE_SOURCE_DIR}/imgui/imgui_draw.cpp - ${CMAKE_SOURCE_DIR}/imgui/imgui_demo.cpp - ${CMAKE_SOURCE_DIR}/imgui/imgui_tables.cpp - ${CMAKE_SOURCE_DIR}/imgui/imgui_widgets.cpp - ${CMAKE_SOURCE_DIR}/imgui/backends/imgui_impl_opengl3.cpp -) - -target_link_libraries(rlImGui PRIVATE raylib imgui) - -if (APPLE) - target_link_libraries(rlImGui "-framework IOKit" "-framework Cocoa" "-framework OpenGL") -elseif(UNIX) - target_link_libraries(rlImGui PRIVATE GL m pthread dl X11) -elseif(WIN32) - target_link_libraries(rlImGui PRIVATE opengl32 gdi32 winmm) -endif() - -target_include_directories(rlImGui PUBLIC - ${rlImGui_SOURCE_DIR} - ${CMAKE_SOURCE_DIR}/imgui - ${CMAKE_SOURCE_DIR}/raylib/src -) \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 7b239d2..8305a5b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,42 +3,31 @@ #include "panel.h" #include "imgui.h" + int main() { const int screenWidth = 1920; const int screenHeight = 1080; - // Initialize Raylib InitWindow(screenWidth, screenHeight, "DMX Raylib UI"); SetTargetFPS(60); - // Initialize rlImGui rlImGuiSetup(true); // Use true for dark theme, false for light theme - // Create the timeline and properties panels Panel timelinePanel = {{0, 0, screenWidth * 0.75f, screenHeight * 0.6f}, "Timeline", LIGHTGRAY, DARKGRAY, true}; Panel propertiesPanel = {{screenWidth * 0.75f, 0, screenWidth * 0.25f, screenHeight}, "Properties", LIGHTGRAY, DARKGRAY, true}; while (!WindowShouldClose()) { - // Update panels timelinePanel.Update(); propertiesPanel.Update(); BeginDrawing(); ClearBackground(RAYWHITE); - // Start ImGui frame rlImGuiBegin(); - - // Create a simple ImGui window (you can expand this with more GUI elements) - ImGui::Begin("ImGui Panel"); - ImGui::Text("Hello, world!"); - // ImGui::SliderFloat("Slider", &timelinePanel.position.x, 0.0f, (float)screenWidth); - ImGui::End(); - - // End ImGui frame + bool open = true; + ImGui::ShowDemoWindow(&open); rlImGuiEnd(); - // Draw Raylib panels if (timelinePanel.isVisible) timelinePanel.Draw(); if (propertiesPanel.isVisible) propertiesPanel.Draw(); @@ -46,9 +35,8 @@ int main() { EndDrawing(); } - // Shutdown rlImGui rlImGuiShutdown(); - CloseWindow(); + return 0; }