# Copyright (c) 2020-2024, Bradley Austin Davis
# Copyright (c) 2020-2024, Arm Limited
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 the "License";
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# The OpenGL interoperability only works on Linux and Windows, and only if glfw is present 
# (implying NOT DIRECT_TO_DISPLAY)
# In theory it could work on Android as well, but would need a compeltely different set of code to 
# create an offscreen OpenGL context.  Further, only a tiny fraction of devices (none of which I have
# access to) appear to support the required semaphore extension: 
# https://opengles.gpuinfo.org/listreports.php?extension=GL_EXT_semaphore
# 
get_filename_component(FOLDER_NAME ${CMAKE_CURRENT_LIST_DIR} NAME)
get_filename_component(PARENT_DIR ${CMAKE_CURRENT_LIST_DIR} PATH)
get_filename_component(CATEGORY_NAME ${PARENT_DIR} NAME)

# Needed for the OpenGL interoperability example
set(GLAD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/glad")
set(GLAD_SOURCES
    ${GLAD_DIR}/src/glad.c
    ${GLAD_DIR}/include/glad/glad.h
    ${GLAD_DIR}/include/KHR/khrplatform.h
)
add_library(glad STATIC ${GLAD_SOURCES})
target_sources(glad PRIVATE ${GLAD_SOURCES})
target_include_directories(glad PUBLIC ${GLAD_DIR}/include)
set_target_properties(glad PROPERTIES FOLDER "ThirdParty" POSITION_INDEPENDENT_CODE ON)

# Only Compile on platforms that support glfw
if (NOT (ANDROID OR DIRECT_TO_DISPLAY OR IOS))
    target_link_libraries( glad PUBLIC glfw )
    add_sample_with_tags(
        ID ${FOLDER_NAME}
        CATEGORY ${CATEGORY_NAME}
        AUTHOR "Bradley Austin Davis"
        NAME "OpenGL Interoperability"
        DESCRIPTION "Example showing sharing resources between OpenGL and Vulkan"
        TAGS
            "opengl"
        LIBS
            glad
        FILES
            offscreen_context.h
            offscreen_context.cpp
        SHADER_FILES_GLSL
            "texture_loading/glsl/texture.vert"
            "texture_loading/glsl/texture.frag"
        SHADER_FILES_HLSL
            "texture_loading/hlsl/texture.vert.hlsl"
            "texture_loading/hlsl/texture.frag.hlsl")
endif()