project(libobs-opengl)


find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIR})

add_definitions(-DLIBOBS_EXPORTS)

if(WIN32)
	set(MODULE_DESCRIPTION "OBS Library OpenGL wrapper")
	configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in libobs-opengl.rc)
	set(libobs-opengl_PLATFORM_SOURCES
		gl-windows.c
		libobs-opengl.rc)
elseif(APPLE)
	set(libobs-opengl_PLATFORM_SOURCES
		gl-cocoa.m)

	set_source_files_properties(${libobs-opengl_PLATFORM_SOURCES}
		PROPERTIES
			LANGUAGE C)

	find_library(COCOA Cocoa)
	include_directories(${COCOA})
	mark_as_advanced(COCOA)

	find_library(IOSURF IOSurface)
	include_directories(${IOSURF})
	mark_as_advanced(${IOSURF})

	set(libobs-opengl_PLATFORM_DEPS
		${COCOA}
		${IOSURF}
		${OPENGL_gl_LIBRARY})
else() #This needs to change to be more specific to get ready for Wayland
	find_package(XCB COMPONENTS XCB REQUIRED)
	find_package(X11_XCB REQUIRED)

	include_directories(
		${XCB_INCLUDE_DIRS}
		${X11_XCB_INCLUDE_DIRS})

	add_definitions(
		${XCB_DEFINITIONS}
		${X11_XCB_DEFINITIONS})

	set(libobs-opengl_PLATFORM_DEPS
		${XCB_LIBRARIES}
		${X11_XCB_LIBRARIES})

	set(libobs-opengl_PLATFORM_SOURCES
		gl-x11.c)
endif()

set(libobs-opengl_SOURCES
	${libobs-opengl_PLATFORM_SOURCES}
	gl-helpers.c
	gl-indexbuffer.c
	gl-shader.c
	gl-shaderparser.c
	gl-stagesurf.c
	gl-subsystem.c
	gl-texture2d.c
	gl-texture3d.c
	gl-texturecube.c
	gl-vertexbuffer.c
	gl-zstencil.c)

set(libobs-opengl_HEADERS
	gl-helpers.h
	gl-shaderparser.h
	gl-subsystem.h)

if(WIN32 OR APPLE)
	add_library(libobs-opengl MODULE
		${libobs-opengl_SOURCES}
		${libobs-opengl_HEADERS})
else()
	add_library(libobs-opengl SHARED
		${libobs-opengl_SOURCES}
		${libobs-opengl_HEADERS})
endif()

if(WIN32 OR APPLE)
set_target_properties(libobs-opengl
	PROPERTIES
		OUTPUT_NAME libobs-opengl
		PREFIX "")
else()
set_target_properties(libobs-opengl
	PROPERTIES
		OUTPUT_NAME obs-opengl
		VERSION 0.0
		SOVERSION 0
		)
endif()

target_link_libraries(libobs-opengl
	libobs
	glad
	${libobs-opengl_PLATFORM_DEPS})

install_obs_core(libobs-opengl)
