IF(NOT EMSCRIPTEN)
  find_package(OpenGL REQUIRED COMPONENTS GLES3)
ENDIF()

IF(NOT WIN32 AND NOT EMSCRIPTEN)
  IF(APPLE)
    FIND_LIBRARY(CARBON NAMES Carbon)
    FIND_LIBRARY(COCOA NAMES Cocoa)
  ELSE()
    FIND_PACKAGE(X11)
    FIND_PACKAGE(XF86VidMode)
  ENDIF()
ENDIF()

SET(SOURCE_DIR ${CMAKE_SOURCE_DIR}/nel/src/3d/driver/opengl3)

FILE(GLOB SRC CONFIGURE_DEPENDS ${SOURCE_DIR}/*.cpp ${SOURCE_DIR}/*.h ${SOURCE_DIR}/*.def *.rc)

IF(APPLE AND NOT EMSCRIPTEN)
  FILE(GLOB MAC_SRC CONFIGURE_DEPENDS ${SOURCE_DIR}/mac/*.h ${SOURCE_DIR}/mac/*.m ${SOURCE_DIR}/mac/*.mm ${SOURCE_DIR}/mac/*.cpp)
  SET(SRC ${SRC} ${MAC_SRC})
  SET_SOURCE_FILES_PROPERTIES(${SRC} PROPERTIES COMPILE_FLAGS "-x objective-c++")
ENDIF()

IF(WIN32)
  SET(NLDRV_OGLES3_LIB "nel_drv_opengles3_win")
ELSE()
  SET(NLDRV_OGLES3_LIB "nel_drv_opengles3")
ENDIF()

NL_TARGET_DRIVER(${NLDRV_OGLES3_LIB} ${SRC})

TARGET_LINK_LIBRARIES(${NLDRV_OGLES3_LIB} NeL::3d NeL::misc)
TARGET_INCLUDE_DIRECTORIES(${NLDRV_OGLES3_LIB} PRIVATE ${SOURCE_DIR})
TARGET_COMPILE_DEFINITIONS(${NLDRV_OGLES3_LIB} PRIVATE USE_OPENGLES3)

IF(EMSCRIPTEN)
  TARGET_COMPILE_OPTIONS(${NLDRV_OGLES3_LIB} PRIVATE "SHELL:-s USE_WEBGL2=1" "SHELL:-s FULL_ES3=1")
  TARGET_LINK_OPTIONS(${NLDRV_OGLES3_LIB} PRIVATE "SHELL:-s USE_WEBGL2=1" "SHELL:-s FULL_ES3=1")
ELSE()
  TARGET_LINK_LIBRARIES(${NLDRV_OGLES3_LIB} OpenGL::GLES3)
ENDIF()

NL_DEFAULT_PROPS(${NLDRV_OGLES3_LIB} "NeL, Driver, Video: OpenGL ES 3.0")
NL_ADD_LIB_SUFFIX(${NLDRV_OGLES3_LIB})
NL_ADD_RUNTIME_FLAGS(${NLDRV_OGLES3_LIB})

IF(WIN32)
  TARGET_COMPILE_DEFINITIONS(${NLDRV_OGLES3_LIB} PRIVATE DRIVER_OPENGLES3_EXPORTS)
ENDIF()

IF(APPLE AND NOT EMSCRIPTEN)
  TARGET_LINK_LIBRARIES(${NLDRV_OGLES3_LIB} ${CARBON})
  TARGET_LINK_LIBRARIES(${NLDRV_OGLES3_LIB} ${COCOA})
ENDIF()

IF(UNIX AND NOT APPLE AND NOT EMSCRIPTEN)
  TARGET_LINK_LIBRARIES(${NLDRV_OGLES3_LIB} ${X11_X11_LIB})
  IF(XF86VidMode_FOUND)
    TARGET_INCLUDE_DIRECTORIES(${NLDRV_OGLES3_LIB} PRIVATE ${XF86VidMode_INCLUDE_DIR})
    TARGET_COMPILE_DEFINITIONS(${NLDRV_OGLES3_LIB} PRIVATE ${XF86VidMode_DEFINITIONS})
    TARGET_LINK_LIBRARIES(${NLDRV_OGLES3_LIB} ${XF86VidMode_LIBRARY})
  ENDIF()
  IF(X11_Xrandr_FOUND)
    TARGET_INCLUDE_DIRECTORIES(${NLDRV_OGLES3_LIB} PRIVATE ${X11_Xrandr_INCLUDE_PATH})
    TARGET_COMPILE_DEFINITIONS(${NLDRV_OGLES3_LIB} PRIVATE HAVE_XRANDR)
    TARGET_LINK_LIBRARIES(${NLDRV_OGLES3_LIB} ${X11_Xrandr_LIB})
  ENDIF()
  IF(X11_Xrender_FOUND)
    TARGET_INCLUDE_DIRECTORIES(${NLDRV_OGLES3_LIB} PRIVATE ${X11_Xrender_INCLUDE_PATH})
    TARGET_COMPILE_DEFINITIONS(${NLDRV_OGLES3_LIB} PRIVATE HAVE_XRENDER)
    TARGET_LINK_LIBRARIES(${NLDRV_OGLES3_LIB} ${X11_Xrender_LIB})
  ENDIF()
  IF(X11_Xcursor_FOUND)
    TARGET_INCLUDE_DIRECTORIES(${NLDRV_OGLES3_LIB} PRIVATE ${X11_Xcursor_INCLUDE_PATH})
    TARGET_COMPILE_DEFINITIONS(${NLDRV_OGLES3_LIB} PRIVATE HAVE_XCURSOR)
    TARGET_LINK_LIBRARIES(${NLDRV_OGLES3_LIB} ${X11_Xcursor_LIB})
  ENDIF()
ENDIF()

IF(WITH_PCH AND NOT EMSCRIPTEN)
  target_precompile_headers(${NLDRV_OGLES3_LIB} PRIVATE ${SOURCE_DIR}/stdopengl3.h)
ENDIF()

IF(WITH_INSTALL_LIBRARIES OR NOT WITH_STATIC_DRIVERS)
  INSTALL(TARGETS ${NLDRV_OGLES3_LIB} EXPORT "${project_export_name}" LIBRARY DESTINATION ${NL_DRIVER_PREFIX} ARCHIVE DESTINATION ${NL_LIB_PREFIX} RUNTIME DESTINATION ${NL_DRIVER_PREFIX} COMPONENT drivers3d)
  IF(WITH_MAXPLUGIN)
    INSTALL(TARGETS ${NLDRV_OGLES3_LIB} RUNTIME DESTINATION maxplugin COMPONENT drivers3d)
  ENDIF()
ENDIF()
