# Cube example

set(SOURCES main.cpp)

add_executable(plume_cube ${SOURCES})

target_link_libraries(plume_cube PRIVATE plume ${SDL2_LIBRARIES})

# Platform-specific libraries
if(APPLE)
    target_link_libraries(plume_cube PRIVATE "-framework Metal -framework QuartzCore -framework CoreGraphics -framework Foundation -framework IOKit")

    set_target_properties(plume_cube PROPERTIES
        XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "-"
        XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${CMAKE_CURRENT_SOURCE_DIR}/../plume.entitlements
    )
elseif(WIN32)
    target_link_libraries(plume_cube PRIVATE d3d12 dxgi)

    if(EXISTS "${SDL2_BINDIR}/SDL2.dll")
        configure_file("${SDL2_BINDIR}/SDL2.dll" "${CMAKE_BINARY_DIR}/bin/SDL2.dll" COPYONLY)
    endif()
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
    find_package(X11 REQUIRED)
    target_include_directories(plume_cube PUBLIC ${X11_INCLUDE_DIR} ${X11_Xrandr_INCLUDE_PATH})
    target_link_libraries(plume_cube PRIVATE ${X11_LIBRARIES} ${X11_Xrandr_LIB})
endif()

target_include_directories(plume_cube PRIVATE
    ${CMAKE_SOURCE_DIR}
    ${CMAKE_SOURCE_DIR}/examples
    ${SDL2_INCLUDE_DIRS}
    ${CMAKE_BINARY_DIR}
    ${CMAKE_BINARY_DIR}/shaders
)

set_target_properties(plume_cube PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
)

# Compile shaders (HLSL to SPIR-V/DXIL/Metal)
plume_compile_vertex_shader(plume_cube "${CMAKE_CURRENT_SOURCE_DIR}/shaders/cube.vert.hlsl" "cubeVert" "VSMain")
plume_compile_pixel_shader(plume_cube "${CMAKE_CURRENT_SOURCE_DIR}/shaders/cube.frag.hlsl" "cubeFrag" "PSMain")
