Skip to content

Commit d635816

Browse files
authored
Merge pull request #385 from gpx1000/opacity-micromaps-advanced-chapter
Opacity Micromaps and framework for simple engine courses
2 parents 6928adc + 4ce703f commit d635816

64 files changed

Lines changed: 6366 additions & 1638 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

antora/modules/ROOT/nav.adoc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,16 @@
129129
*** xref:Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc[Rendering approaches]
130130
*** xref:Building_a_Simple_Engine/Mobile_Development/05_vulkan_extensions.adoc[Vulkan extensions]
131131
*** xref:Building_a_Simple_Engine/Mobile_Development/06_conclusion.adoc[Conclusion]
132+
** Extra Courses
133+
*** Opacity Micromaps
134+
**** xref:Building_a_Simple_Engine/Courses/Opacity_Micromaps/00_introduction.adoc[Introduction]
135+
**** xref:Building_a_Simple_Engine/Courses/Opacity_Micromaps/01_the_shadow_problem.adoc[The shadow problem]
136+
**** xref:Building_a_Simple_Engine/Courses/Opacity_Micromaps/02_why_alpha_testing_is_expensive.adoc[Why alpha testing is expensive]
137+
**** xref:Building_a_Simple_Engine/Courses/Opacity_Micromaps/03_what_are_micromaps.adoc[What are micromaps]
138+
**** xref:Building_a_Simple_Engine/Courses/Opacity_Micromaps/04_hardware_traversal_with_omm.adoc[Hardware traversal with OMM]
139+
**** xref:Building_a_Simple_Engine/Courses/Opacity_Micromaps/05_implementation_overview.adoc[Implementation overview]
140+
**** xref:Building_a_Simple_Engine/Courses/Opacity_Micromaps/06_results_guidance_and_tradeoffs.adoc[Results, guidance and tradeoffs]
141+
**** xref:Building_a_Simple_Engine/Courses/Opacity_Micromaps/07_conclusion.adoc[Conclusion]
132142
** Advanced Topics
133143
*** xref:Building_a_Simple_Engine/Advanced_Topics/01_introduction.adoc[Introduction]
134144
*** xref:Building_a_Simple_Engine/Advanced_Topics/Rendering_Pipeline_Overview.adoc[Rendering pipeline overview]

attachments/simple_engine/CMake/FindKTX.cmake

Lines changed: 74 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -13,99 +13,92 @@
1313
# KTX::ktx
1414
#
1515

16-
# Check if we're on Linux - if so, we'll skip the search and directly use FetchContent
17-
if(UNIX AND NOT APPLE)
18-
# On Linux, we assume KTX is not installed and proceed directly to fetching it
19-
set(KTX_FOUND FALSE)
20-
else()
21-
# On non-Linux platforms, try to find KTX using pkg-config first
22-
find_package(PkgConfig QUIET)
23-
if(PKG_CONFIG_FOUND)
16+
# Try to find KTX using pkg-config first
17+
find_package(PkgConfig QUIET)
18+
if (PKG_CONFIG_FOUND)
2419
pkg_check_modules(PC_KTX QUIET ktx libktx ktx2 libktx2)
25-
endif()
20+
endif ()
2621

27-
# Try to find KTX using standard find_package
28-
find_path(KTX_INCLUDE_DIR
29-
NAMES ktx.h
30-
PATH_SUFFIXES include ktx KTX ktx2 KTX2
31-
HINTS
32-
${PC_KTX_INCLUDEDIR}
33-
/usr/include
34-
/usr/local/include
35-
$ENV{KTX_DIR}/include
36-
$ENV{VULKAN_SDK}/include
37-
${CMAKE_SOURCE_DIR}/external/ktx/include
38-
)
39-
40-
find_library(KTX_LIBRARY
41-
NAMES ktx ktx2 libktx libktx2
42-
PATH_SUFFIXES lib lib64
43-
HINTS
44-
${PC_KTX_LIBDIR}
45-
/usr/lib
46-
/usr/lib64
47-
/usr/local/lib
48-
/usr/local/lib64
49-
$ENV{KTX_DIR}/lib
50-
$ENV{VULKAN_SDK}/lib
51-
${CMAKE_SOURCE_DIR}/external/ktx/lib
52-
)
53-
54-
if (KTX_INCLUDE_DIR AND KTX_LIBRARY)
55-
set(KTX_FOUND TRUE)
56-
else ()
57-
set(KTX_FOUND FALSE)
58-
endif()
59-
endif()
22+
# Try to find KTX using standard find_path and find_library
23+
find_path(KTX_INCLUDE_DIR
24+
NAMES ktx.h
25+
PATH_SUFFIXES include ktx KTX ktx2 KTX2
26+
HINTS
27+
${PC_KTX_INCLUDEDIR}
28+
/usr/include
29+
/usr/local/include
30+
$ENV{KTX_DIR}/include
31+
$ENV{VULKAN_SDK}/include
32+
${CMAKE_SOURCE_DIR}/external/ktx/include
33+
)
6034

61-
if(KTX_FOUND)
62-
set(KTX_INCLUDE_DIRS ${KTX_INCLUDE_DIR})
63-
set(KTX_LIBRARIES ${KTX_LIBRARY})
35+
find_library(KTX_LIBRARY
36+
NAMES ktx ktx2 libktx libktx2
37+
PATH_SUFFIXES lib lib64
38+
HINTS
39+
${PC_KTX_LIBDIR}
40+
/usr/lib
41+
/usr/lib64
42+
/usr/local/lib
43+
/usr/local/lib64
44+
$ENV{KTX_DIR}/lib
45+
$ENV{VULKAN_SDK}/lib
46+
${CMAKE_SOURCE_DIR}/external/ktx/lib
47+
)
6448

65-
if(NOT TARGET KTX::ktx)
66-
add_library(KTX::ktx UNKNOWN IMPORTED)
67-
set_target_properties(KTX::ktx PROPERTIES
68-
IMPORTED_LOCATION "${KTX_LIBRARIES}"
69-
INTERFACE_INCLUDE_DIRECTORIES "${KTX_INCLUDE_DIRS}"
70-
)
71-
endif()
72-
else()
73-
# If not found, use FetchContent to download and build
74-
include(FetchContent)
49+
# If not found in the system, use FetchContent to download and build
50+
if (NOT KTX_INCLUDE_DIR OR NOT KTX_LIBRARY)
51+
include(FetchContent)
7552

76-
# Only show the message on non-Linux platforms
77-
if(NOT (UNIX AND NOT APPLE))
7853
message(STATUS "KTX not found, fetching from GitHub...")
79-
endif()
8054

81-
FetchContent_Declare(
82-
ktx
83-
GIT_REPOSITORY https://github.com/KhronosGroup/KTX-Software.git
84-
GIT_TAG v4.4.2 # Use a specific tag for stability
85-
)
86-
87-
# Set options to minimize build time and dependencies
88-
set(KTX_FEATURE_TOOLS OFF CACHE BOOL "Build KTX tools" FORCE)
89-
set(KTX_FEATURE_DOC OFF CACHE BOOL "Build KTX documentation" FORCE)
90-
set(KTX_FEATURE_TESTS OFF CACHE BOOL "Build KTX tests" FORCE)
55+
FetchContent_Declare(
56+
ktx
57+
GIT_REPOSITORY https://github.com/KhronosGroup/KTX-Software.git
58+
GIT_TAG v4.4.2
59+
)
9160

92-
FetchContent_MakeAvailable(ktx)
61+
# Minimize build time and dependencies
62+
set(KTX_FEATURE_TOOLS OFF CACHE BOOL "Build KTX tools" FORCE)
63+
set(KTX_FEATURE_DOC OFF CACHE BOOL "Build KTX documentation" FORCE)
64+
set(KTX_FEATURE_TESTS OFF CACHE BOOL "Build KTX tests" FORCE)
65+
set(KTX_FEATURE_STATIC_LIBRARY ON CACHE BOOL "Build KTX as static library" FORCE)
9366

94-
# Create an alias to match the expected target name
95-
if(NOT TARGET KTX::ktx)
96-
add_library(KTX::ktx ALIAS ktx)
97-
endif()
67+
FetchContent_MakeAvailable(ktx)
9868

99-
# Set variables to indicate that KTX was found and to satisfy find_package_handle_standard_args
100-
set(KTX_FOUND TRUE)
101-
FetchContent_GetProperties(ktx SOURCE_DIR ktx_SOURCE_DIR)
102-
set(KTX_INCLUDE_DIR "${ktx_SOURCE_DIR}/include")
103-
set(KTX_LIBRARY ktx)
104-
set(KTX_INCLUDE_DIRS ${KTX_INCLUDE_DIR})
105-
set(KTX_LIBRARIES ${KTX_LIBRARY})
106-
endif()
69+
if (TARGET ktx)
70+
get_target_property(KTX_TARGET_INCLUDE_DIR ktx INTERFACE_INCLUDE_DIRECTORIES)
71+
if (KTX_TARGET_INCLUDE_DIR)
72+
set(KTX_INCLUDE_DIR ${KTX_TARGET_INCLUDE_DIR})
73+
else ()
74+
FetchContent_GetProperties(ktx SOURCE_DIR ktx_SOURCE_DIR)
75+
set(KTX_INCLUDE_DIR ${ktx_SOURCE_DIR}/include)
76+
endif ()
77+
set(KTX_LIBRARY ktx)
78+
endif ()
79+
endif ()
10780

10881
include(FindPackageHandleStandardArgs)
10982
find_package_handle_standard_args(KTX
11083
REQUIRED_VARS KTX_INCLUDE_DIR KTX_LIBRARY
11184
)
85+
86+
if (KTX_FOUND)
87+
set(KTX_INCLUDE_DIRS ${KTX_INCLUDE_DIR})
88+
set(KTX_LIBRARIES ${KTX_LIBRARY})
89+
90+
if (NOT TARGET KTX::ktx)
91+
if (TARGET ktx)
92+
# FetchContent target already exists — alias it
93+
add_library(KTX::ktx ALIAS ktx)
94+
else ()
95+
add_library(KTX::ktx UNKNOWN IMPORTED)
96+
set_target_properties(KTX::ktx PROPERTIES
97+
IMPORTED_LOCATION "${KTX_LIBRARY}"
98+
INTERFACE_INCLUDE_DIRECTORIES "${KTX_INCLUDE_DIR}"
99+
)
100+
endif ()
101+
endif ()
102+
endif ()
103+
104+
mark_as_advanced(KTX_INCLUDE_DIR KTX_LIBRARY)

0 commit comments

Comments
 (0)