From 5d4fb275939607901e0c7cb7f9295c9fe1fd7e42 Mon Sep 17 00:00:00 2001 From: StasJ Date: Thu, 2 Nov 2023 03:02:02 -0600 Subject: [PATCH 1/2] separate osgl --- CMakeLists.txt | 9 ++- conda/vapor/build.sh | 1 + conda/vapor/meta.yaml | 2 + include/vapor/glutil.h | 2 +- lib/CMakeLists.txt | 7 ++- lib/osgl/CMakeCopy.cmake | 52 --------------- lib/osgl/CMakeLists.txt | 63 ++++++------------- lib/osgl/README.md | 20 ++++++ lib/osgl/build.sh | 53 ---------------- lib/osgl/conda/build.sh | 44 +++++++++++++ lib/osgl/conda/meta.yaml | 22 +++++++ lib/osgl/include/{vapor => osgl}/GLAD.h | 0 lib/osgl/include/{vapor => osgl}/GLContext.h | 6 +- .../{vapor => osgl}/GLContextProvider.h | 6 +- .../{vapor => osgl}/GLContextProviderCommon.h | 15 ++++- .../{vapor => osgl}/GLContextProviderEGL.h | 6 +- .../{vapor => osgl}/GLContextProviderMacOS.h | 6 +- .../{vapor => osgl}/GLContextProviderMesa.h | 6 +- .../{vapor => osgl}/GLContextProviderNvidia.h | 6 +- .../{vapor => osgl}/GLContextProviderUtil.h | 6 +- lib/osgl/include/{vapor => osgl}/GLInclude.h | 0 lib/osgl/include/{vapor => osgl}/Log.h | 6 +- lib/osgl/meta.yaml | 47 -------------- lib/osgl/{ => src}/GLContext.cpp | 6 +- lib/osgl/{ => src}/GLContextProvider.cpp | 14 +++-- lib/osgl/{ => src}/GLContextProviderEGL.cpp | 6 +- lib/osgl/{ => src}/GLContextProviderMacOS.mm | 6 +- lib/osgl/{ => src}/GLContextProviderMesa.cpp | 6 +- .../{ => src}/GLContextProviderNvidia.cpp | 8 ++- lib/osgl/{ => src}/GLContextProviderUtil.cpp | 6 +- lib/osgl/{ => src}/Log.cpp | 4 +- lib/osgl/src/STLUtils.cpp | 52 +++++++++++++++ lib/osgl/src/STLUtils.h | 37 +++++++++++ lib/osgl/test_version.cpp | 12 ---- lib/osgl/tests/CMakeLists.txt | 11 ++++ lib/osgl/{ => tests}/stb_image_write.h | 0 .../test_framebuffer.cpp} | 9 +-- lib/osgl/tests/test_version.cpp | 11 ++++ lib/render/CMakeLists.txt | 2 +- lib/vapi/CMakeLists.txt | 2 +- lib/vapi/RenderManager.cpp | 3 +- lib/vapi/VPCommon.h | 3 +- lib/vapi/main.cpp | 6 +- 43 files changed, 335 insertions(+), 254 deletions(-) delete mode 100644 lib/osgl/CMakeCopy.cmake create mode 100644 lib/osgl/README.md delete mode 100644 lib/osgl/build.sh create mode 100644 lib/osgl/conda/build.sh create mode 100644 lib/osgl/conda/meta.yaml rename lib/osgl/include/{vapor => osgl}/GLAD.h (100%) rename lib/osgl/include/{vapor => osgl}/GLContext.h (83%) rename lib/osgl/include/{vapor => osgl}/GLContextProvider.h (90%) rename lib/osgl/include/{vapor => osgl}/GLContextProviderCommon.h (55%) rename lib/osgl/include/{vapor => osgl}/GLContextProviderEGL.h (93%) rename lib/osgl/include/{vapor => osgl}/GLContextProviderMacOS.h (91%) rename lib/osgl/include/{vapor => osgl}/GLContextProviderMesa.h (91%) rename lib/osgl/include/{vapor => osgl}/GLContextProviderNvidia.h (83%) rename lib/osgl/include/{vapor => osgl}/GLContextProviderUtil.h (71%) rename lib/osgl/include/{vapor => osgl}/GLInclude.h (100%) rename lib/osgl/include/{vapor => osgl}/Log.h (95%) delete mode 100644 lib/osgl/meta.yaml rename lib/osgl/{ => src}/GLContext.cpp (53%) rename lib/osgl/{ => src}/GLContextProvider.cpp (83%) rename lib/osgl/{ => src}/GLContextProviderEGL.cpp (98%) rename lib/osgl/{ => src}/GLContextProviderMacOS.mm (94%) rename lib/osgl/{ => src}/GLContextProviderMesa.cpp (96%) rename lib/osgl/{ => src}/GLContextProviderNvidia.cpp (95%) rename lib/osgl/{ => src}/GLContextProviderUtil.cpp (90%) rename lib/osgl/{ => src}/Log.cpp (93%) create mode 100644 lib/osgl/src/STLUtils.cpp create mode 100644 lib/osgl/src/STLUtils.h delete mode 100644 lib/osgl/test_version.cpp create mode 100644 lib/osgl/tests/CMakeLists.txt rename lib/osgl/{ => tests}/stb_image_write.h (100%) rename lib/osgl/{test_framebuffer_glad.cpp => tests/test_framebuffer.cpp} (93%) create mode 100644 lib/osgl/tests/test_version.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f64387ee6..e949748202 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,6 +102,7 @@ option (BUILD_TEST_APPS "Build test applications" OFF) option (DIST_INSTALLER "Generate installer for distributing vapor binaries. Will generate standard make install if off" OFF) option (USE_OMP "Use OpenMP on some calculations" OFF) option (CONDA_BUILD "Use Conda to build" OFF) +option (BUNDLED_OSGL "Use bundled copy of OSGL" ON) if( USE_OMP ) find_package(OpenMP REQUIRED) @@ -184,6 +185,11 @@ find_library(GEOTIFF geotiff) find_library(JPEG jpeg) find_library(HDF5_LIB hdf5) find_library(EXPAT expat) +if (BUNDLED_OSGL) + set(OSGL osgl) +else() + find_library(OSGL osgl) +endif() message("Library NETCDF = ${NETCDF}") message("Library UDUNITS2 = ${UDUNITS2}") @@ -191,7 +197,8 @@ message("Library FREETYPE = ${FREETYPE}") message("Library GEOTIFF = ${GEOTIFF}") message("Library JPEG = ${JPEG}") message("Library HDF5_LIB = ${HDF5_LIB}") -message("Library EXPAT = ${EXPAT}") +message("Library EXPAT = ${EXPAT}") +message("Library EXPAT = ${OSGL}") # find_package(Python) # Output diff --git a/conda/vapor/build.sh b/conda/vapor/build.sh index d291dd6c10..6ba0a2f9dc 100644 --- a/conda/vapor/build.sh +++ b/conda/vapor/build.sh @@ -84,6 +84,7 @@ cmake .. \ -DBUILD_UTL=OFF \ -DBUILD_GUI=OFF \ -DBUILD_OSP=OFF \ + -DBUNDLED_OSGL=OFF \ -DPython_EXECUTABLE="$PYTHON" \ -DCMAKE_INSTALL_PREFIX="$PREFIX" \ $CMAKE_EXTRA \ diff --git a/conda/vapor/meta.yaml b/conda/vapor/meta.yaml index e9e9183abb..e9be25e9ab 100644 --- a/conda/vapor/meta.yaml +++ b/conda/vapor/meta.yaml @@ -39,6 +39,7 @@ requirements: - mesalib=21.2.5 - expat=2.4 - libcxx=14.0 + - osgl run: # Run only - xarray=2022 #=2022.3.0 @@ -66,3 +67,4 @@ requirements: - {{ pin_compatible('mesalib') }} - {{ pin_compatible('expat') }} - {{ pin_compatible('libcxx') }} + - {{ pin_compatible('osgl') }} diff --git a/include/vapor/glutil.h b/include/vapor/glutil.h index 345e1a9e9a..67c9df9174 100644 --- a/include/vapor/glutil.h +++ b/include/vapor/glutil.h @@ -47,7 +47,7 @@ #define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED #endif -#include +#include #include #include #include diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index dedbfadc62..b5a3e83f24 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -9,7 +9,10 @@ endif() if (BUILD_GUI OR BUILD_PYTHON) - add_subdirectory(osgl) + if (BUNDLED_OSGL) + add_subdirectory(osgl) + export (TARGETS osgl NAMESPACE VAPOR:: APPEND FILE vapor-exports.cmake) + endif() add_subdirectory (params) add_subdirectory( flow ) add_subdirectory (render) @@ -17,6 +20,6 @@ if (BUILD_GUI OR BUILD_PYTHON) add_subdirectory (vapi) export (TARGETS vapi NAMESPACE VAPOR:: APPEND FILE vapor-exports.cmake) endif() - export (TARGETS render params flow osgl NAMESPACE VAPOR:: APPEND FILE vapor-exports.cmake) + export (TARGETS render params flow NAMESPACE VAPOR:: APPEND FILE vapor-exports.cmake) endif() diff --git a/lib/osgl/CMakeCopy.cmake b/lib/osgl/CMakeCopy.cmake deleted file mode 100644 index 849ede2f87..0000000000 --- a/lib/osgl/CMakeCopy.cmake +++ /dev/null @@ -1,52 +0,0 @@ -cmake_policy(SET CMP0057 NEW) - -function(COPY_HELPER FILE DESTINATION DEP_LIST) - get_filename_component(BASENAME "${FILE}" NAME) - if ("${BASENAME}" IN_LIST COPY_EXCLUDE) - return() - endif() - if (IS_DIRECTORY "${FILE}") - file(GLOB SUBFILES "${FILE}/*") - foreach (SUBFILE ${SUBFILES}) - COPY_HELPER("${SUBFILE}" "${DESTINATION}/${BASENAME}" "${DEP_LIST}") - endforeach() - else() - set(OUTFILE "${DESTINATION}/${BASENAME}") - add_custom_command( - OUTPUT "${OUTFILE}" - COMMAND ${CMAKE_COMMAND} -E copy "${FILE}" "${OUTFILE}" - MAIN_DEPENDENCY "${FILE}" - ) - list(APPEND DEP_LIST "${OUTFILE}") - # of course this does not work for custom targets - # add_dependencies(target ${OUTFILE}) - endif() - set(DEP_LIST "${DEP_LIST}" PARENT_SCOPE) -endfunction() - -set(COPY_HELPER_TARGET_COUNTER 0) - -function(COPY FILE DESTINATION) - include(CMakeParseArguments) - cmake_parse_arguments(PARSE_ARGV 2 - "COPY" - "" - "" - "EXCLUDE" - ) - - get_filename_component(FILE "${FILE}" REALPATH) - - list(APPEND DEP_LIST "") - COPY_HELPER("${FILE}" "${DESTINATION}" "${DEP_LIST}") - - math(EXPR COPY_HELPER_TARGET_COUNTER "${COPY_HELPER_TARGET_COUNTER}+1") - set(COPY_HELPER_TARGET_COUNTER ${COPY_HELPER_TARGET_COUNTER} PARENT_SCOPE) - - add_custom_target( - copy_helper_${COPY_HELPER_TARGET_COUNTER} - ALL - DEPENDS ${DEP_LIST} - ) -endfunction() - diff --git a/lib/osgl/CMakeLists.txt b/lib/osgl/CMakeLists.txt index 2057a2b542..6bd6ad6417 100644 --- a/lib/osgl/CMakeLists.txt +++ b/lib/osgl/CMakeLists.txt @@ -1,12 +1,12 @@ set(LIB osgl) -include(CMakeCopy.cmake) - set(BUILD_MESA_DEFAULT OFF) -if (BUILD_PYTHON AND (UNIX AND NOT APPLE)) +if (UNIX AND NOT APPLE) set(BUILD_MESA_DEFAULT ON) endif() + option (BUILD_MESA "Build with OSMesa" ${BUILD_MESA_DEFAULT}) +option (BUILD_OSGL_TESTS "Build tests" ON) option (SOFTWARE_ONLY "Disable EGL" OFF) if (NOT SOFTWARE_ONLY) @@ -19,11 +19,9 @@ if (NOT PROJECT_NAME) cmake_minimum_required (VERSION 3.10) project (${LIB}) set (CMAKE_CXX_STANDARD 11) - # find_package (OpenGL REQUIRED) - # include_directories (${OPENGL_INCLUDE_DIRS}) set(CMAKE_INSTALL_BINDIR bin) set(CMAKE_INSTALL_LIBDIR lib) - set(CMAKE_INSTALL_INCLUDEDIR include/vapor) + set(CMAKE_INSTALL_INCLUDEDIR include) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE) endif() @@ -33,25 +31,21 @@ else () set(CMAKE_INSTALL_INCLUDEDIR ${INSTALL_INCLUDE_DIR}) endif () -file (GLOB HDRS ./include/vapor/*.h) -file (GLOB SRCS ./*.cpp) +file (GLOB HDRS ./include/osgl/*.h) +file (GLOB SRCS ./src/*.cpp) if (APPLE) - file (GLOB OBJC_SRCS ./*.mm) + file (GLOB OBJC_SRCS ./src/*.mm) list (APPEND SRCS ${OBJC_SRCS}) endif () -list(FILTER SRCS EXCLUDE REGEX "test_[^/]*\\.cpp$") -list(FILTER SRCS EXCLUDE REGEX "ext_[^/]*\\.cpp$") - list(APPEND SRCS glad/src/egl.c glad/src/gl.c) -list(APPEND HDRS glad/include/glad/egl.h glad/include/glad/gl.h) -# file(COPY glad/include DESTINATION ${CMAKE_BINARY_DIR}) +# list(APPEND HDRS glad/include/glad/egl.h glad/include/glad/gl.h) +if (WIN32) + list(APPEND SRCS glad/src/wgl.c) + # list(APPEND HDRS glad/include/glad/wgl.h) +endif() add_library (${LIB} SHARED ${SRCS} ${HDRS}) -# if (NOT SOFTWARE_ONLY) -# target_link_libraries (${LIB} ${OPENGL_LIBRARIES}) -# endif() -target_link_libraries (${LIB} common) if (APPLE) find_library (APPKIT AppKit) @@ -70,27 +64,17 @@ if (UNIX AND NOT APPLE) endif () endif () -# if (CONDA_BUILD AND UNIX AND NOT APPLE) -# target_link_libraries (${LIB} rt) -# endif() - if (NOT WIN32) target_compile_options(${LIB} PRIVATE -Wno-deprecated-declarations) endif() -# target_compile_options(${LIB} PRIVATE -Wno-unknown-warning-option) - -# file(COPY ${HDRS} DESTINATION ${CMAKE_BINARY_DIR}/include/vapor) -# foreach (HDR ${HDRS}) -# copy(${HDR} ${CMAKE_BINARY_DIR}/include/vapor) # Does not work with xcode... -# endforeach() -# target_include_directories (${LIB} PUBLIC ${CMAKE_BINARY_DIR}/include) target_include_directories (${LIB} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) target_include_directories (${LIB} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/glad/include) if (WIN32) - add_definitions (-DOSGL_EXPORTS) - add_definitions (-DGLAD_API_CALL_EXPORT_BUILD) + target_compile_definitions(${LIB} PUBLIC GLAD_API_CALL_EXPORT=1) + target_compile_definitions(${LIB} PRIVATE GLAD_API_CALL_EXPORT_BUILD=1) + target_compile_definitions(${LIB} PRIVATE OSGL_EXPORTS=1) endif() install ( @@ -101,7 +85,7 @@ install ( install ( FILES ${HDRS} - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/osgl COMPONENT Libraries ) @@ -111,16 +95,7 @@ install ( COMPONENT Libraries ) -set (BUILD_OSGL_TESTS OFF) - -if (NOT WIN32 AND BUILD_OSGL_TESTS) - file (GLOB TESTS ./test_*.cpp) - foreach (TEST ${TESTS}) - get_filename_component(TEST_NAME "${TEST}" NAME_WE) - set(TEST_TARGET "${LIB}_${TEST_NAME}") - add_executable(${TEST_TARGET} "${TEST}") - target_link_libraries(${TEST_TARGET} ${LIB}) - target_compile_options(${TEST_TARGET} PRIVATE -Wno-deprecated-declarations) - install(TARGETS ${TEST_TARGET} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Libraries) - endforeach() +if (BUILD_OSGL_TESTS) + add_subdirectory (tests) endif() + diff --git a/lib/osgl/README.md b/lib/osgl/README.md new file mode 100644 index 0000000000..583d517f3d --- /dev/null +++ b/lib/osgl/README.md @@ -0,0 +1,20 @@ +# OSGL + +OSGL is an open source, cross-platform library designed to simplify the use of OpenGL in headless environments. It uses OS and vendor specific extensions, as well as EGL to aquire an OpenGL context without needing to go through the window manager. It will fallback to providing a software OpenGL context using OSMesa if getting a hardware context fails. + +Getting an OpenGL context is now as simple as this: +``` +#include +#include + +int main(int argc, char **argv) +{ + auto ctx = OSGL::GLContextProvider::CreateContext(); + printf("OpenGL Context: %s\n", glGetString(GL_VERSION)); + return 0; +} +``` + +Since the context will not be bound to a window, you need to create and bind your own target framebuffer. An complete example can be found in `tests/test_framebuffer.cpp`. + +OSGL currently supports macOS and Linux. Windows support is planned. diff --git a/lib/osgl/build.sh b/lib/osgl/build.sh deleted file mode 100644 index 488ad7c941..0000000000 --- a/lib/osgl/build.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash - -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= -export -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= - -mkdir build -cd build - -# Since optimizations are disabled, need to disable fortify source otherwise will get barraged with warnings -export CPPFLAGS="`echo $CPPFLAGS|sed 's/-D_FORTIFY_SOURCE=2//g'`" - -# Ignore extra warnings -export CPPFLAGS=" \ - $CPPFLAGS \ - " - -# Conda does not properly set CMake flags. This should fix it. -export CXXFLAGS="$CPPFLAGS $CXXFLAGS" -export CFLAGS="$CPPFLAGS $CFLAGS" - -cmake .. \ - -DCMAKE_INSTALL_PREFIX:PATH="$PREFIX" \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -DBUILD_SHARED_LIBS=ON \ - -DCMAKE_BUILD_TYPE=DEBUG \ - ${CMAKE_ARGS} \ - -DCMAKE_C_FLAGS_DEBUG="-g -O0" \ - -DCMAKE_CXX_FLAGS_DEBUG="-g -O0" \ - -DPython_EXECUTABLE="$PYTHON" - - -make -j$(($CPU_COUNT+1)) -make install - - -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= -echo build ======================================================================================= diff --git a/lib/osgl/conda/build.sh b/lib/osgl/conda/build.sh new file mode 100644 index 0000000000..ce2fd894c3 --- /dev/null +++ b/lib/osgl/conda/build.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +# Inputs +[[ -z "$DEBUG" ]] && DEBUG=false + +CMAKE_EXTRA="" + +# The env can be either PREFIX or BUILD_PREFIX depending on the build requirements. +# Conda does not configure its variables accordingly. +export ENV="$BUILD_PREFIX" +export PATH="$ENV/bin:$PATH" + +if $DEBUG; then + # If optimizations are disabled, need to disable fortify source otherwise will get barraged with warnings + export CPPFLAGS="`echo $CPPFLAGS|sed 's/-D_FORTIFY_SOURCE=2//g'`" + CMAKE_EXTRA="$CMAKE_EXTRA -DCMAKE_BUILD_TYPE=Debug" +else + CMAKE_EXTRA="$CMAKE_EXTRA -DCMAKE_BUILD_TYPE=Release" +fi + +export CPPFLAGS="$CPPFLAGS -isystem $ENV/include" + +# cmake ignores CPPFLAGS +export CXXFLAGS="$CXXFLAGS $CPPFLAGS" +export CFLAGS="$CFLAGS $CPPFLAGS" + +# Conda will sometimes set these to invalid values which end up breaking the build +unset CMAKE_ARGS +unset CMAKE_PREFIX_PATH + +# Prevent linking outside libraries +export CMAKE_LIBRARY_PATH="$PREFIX/lib:$BUILD_PREFIX/lib" +export CMAKE_PREFIX_PATH="$PREFIX:$BUILD_PREFIX" + +mkdir build +cd build + +cmake .. \ + -DCMAKE_INSTALL_PREFIX="$PREFIX" \ + $CMAKE_EXTRA \ + +make -j$(($CPU_COUNT+1)) +make install + diff --git a/lib/osgl/conda/meta.yaml b/lib/osgl/conda/meta.yaml new file mode 100644 index 0000000000..aba282f69d --- /dev/null +++ b/lib/osgl/conda/meta.yaml @@ -0,0 +1,22 @@ +package: + name: osgl + version: "0.9.0" + +source: + path: .. + +build: + script_env: + - DEBUG + +requirements: + build: + - {{ compiler('cxx') }} + - make=4.3 + - cmake=3.21.3 + - mesalib=21.2.5 # [not win] + - libcxx=14.0 # [not win] + - libcxx # [win] + run: + - {{ pin_compatible('mesalib') }} # [not win] + - {{ pin_compatible('libcxx') }} diff --git a/lib/osgl/include/vapor/GLAD.h b/lib/osgl/include/osgl/GLAD.h similarity index 100% rename from lib/osgl/include/vapor/GLAD.h rename to lib/osgl/include/osgl/GLAD.h diff --git a/lib/osgl/include/vapor/GLContext.h b/lib/osgl/include/osgl/GLContext.h similarity index 83% rename from lib/osgl/include/vapor/GLContext.h rename to lib/osgl/include/osgl/GLContext.h index 467b427c61..a92b2503c0 100644 --- a/lib/osgl/include/vapor/GLContext.h +++ b/lib/osgl/include/osgl/GLContext.h @@ -1,15 +1,19 @@ #pragma once -#include +#include //! \class GLContext //! \ingroup HeadlessGL //! \brief Object that abstracts an OpenGL context since they are differnet in every case. //! \author Stas Jaroszynski +namespace OSGL { + class OSGL_API GLContext { public: virtual ~GLContext() {} virtual void MakeCurrent() = 0; String GetVersion(); }; + +} diff --git a/lib/osgl/include/vapor/GLContextProvider.h b/lib/osgl/include/osgl/GLContextProvider.h similarity index 90% rename from lib/osgl/include/vapor/GLContextProvider.h rename to lib/osgl/include/osgl/GLContextProvider.h index a8cd7b51f6..c2aa44bdc8 100644 --- a/lib/osgl/include/vapor/GLContextProvider.h +++ b/lib/osgl/include/osgl/GLContextProvider.h @@ -1,12 +1,14 @@ #pragma once -#include +#include //! \class GLContextProvider //! \ingroup HeadlessGL //! \brief Interface for creating an OpenGL context. //! \author Stas Jaroszynski +namespace OSGL { + class OSGL_API GLContextProvider { public: //! Creates an OpenGL context. The returned pointer is optional for managing @@ -17,3 +19,5 @@ class OSGL_API GLContextProvider { private: static bool isContextOk(GLContext *ctx); }; + +} diff --git a/lib/osgl/include/vapor/GLContextProviderCommon.h b/lib/osgl/include/osgl/GLContextProviderCommon.h similarity index 55% rename from lib/osgl/include/vapor/GLContextProviderCommon.h rename to lib/osgl/include/osgl/GLContextProviderCommon.h index d384df6fa2..ec9dd0672b 100644 --- a/lib/osgl/include/vapor/GLContextProviderCommon.h +++ b/lib/osgl/include/osgl/GLContextProviderCommon.h @@ -1,12 +1,14 @@ #pragma once -#include #include #include #include + +namespace OSGL { typedef std::string String; using std::vector; +} #undef MacOS #undef Linux @@ -19,4 +21,15 @@ using std::vector; #define Windows 1 #endif +// #include +#ifdef WIN32 + #ifdef OSGL_EXPORTS + #define OSGL_API __declspec(dllexport) + #else + #define OSGL_API __declspec(dllimport) + #endif +#else + #define OSGL_API +#endif + #include "Log.h" diff --git a/lib/osgl/include/vapor/GLContextProviderEGL.h b/lib/osgl/include/osgl/GLContextProviderEGL.h similarity index 93% rename from lib/osgl/include/vapor/GLContextProviderEGL.h rename to lib/osgl/include/osgl/GLContextProviderEGL.h index a8b38c4d9d..a7a802cb28 100644 --- a/lib/osgl/include/vapor/GLContextProviderEGL.h +++ b/lib/osgl/include/osgl/GLContextProviderEGL.h @@ -1,11 +1,13 @@ #pragma once -#include +#include //! \class GLContextProviderEGL //! \ingroup HeadlessGL //! \brief Creates an OpenGL context using the EGL library. //! \author Stas Jaroszynski +namespace OSGL { + class OSGL_API GLContextProviderEGL { class GLContextEGL : public GLContext { void *_display = nullptr; @@ -25,3 +27,5 @@ class OSGL_API GLContextProviderEGL { static GLContext * createContextForDisplay(void *display); static const char *stringifyEGLError(int e); }; + +} diff --git a/lib/osgl/include/vapor/GLContextProviderMacOS.h b/lib/osgl/include/osgl/GLContextProviderMacOS.h similarity index 91% rename from lib/osgl/include/vapor/GLContextProviderMacOS.h rename to lib/osgl/include/osgl/GLContextProviderMacOS.h index cc3ad24d5f..fbd82213d5 100644 --- a/lib/osgl/include/vapor/GLContextProviderMacOS.h +++ b/lib/osgl/include/osgl/GLContextProviderMacOS.h @@ -1,12 +1,14 @@ #pragma once -#include +#include //! \class GLContextProviderMacOS //! \ingroup HeadlessGL //! \brief Creates an OpenGL context using macOS's libraries. //! \author Stas Jaroszynski +namespace OSGL { + class OSGL_API GLContextProviderMacOS { class GLContextMacOS : public GLContext { void *_ctx = nullptr; @@ -22,3 +24,5 @@ class OSGL_API GLContextProviderMacOS { public: static GLContext *CreateContext(); }; + +} diff --git a/lib/osgl/include/vapor/GLContextProviderMesa.h b/lib/osgl/include/osgl/GLContextProviderMesa.h similarity index 91% rename from lib/osgl/include/vapor/GLContextProviderMesa.h rename to lib/osgl/include/osgl/GLContextProviderMesa.h index d11e0223b6..09101fcb8d 100644 --- a/lib/osgl/include/vapor/GLContextProviderMesa.h +++ b/lib/osgl/include/osgl/GLContextProviderMesa.h @@ -1,11 +1,13 @@ #pragma once -#include +#include //! \class GLContextProviderMesa //! \ingroup HeadlessGL //! \brief Uses OSMesa for headless OpenGL Context creation. //! \author Stas Jaroszynski +namespace OSGL { + class OSGL_API GLContextProviderMesa { class GLContextMesa : public GLContext { void *_ctx = nullptr; @@ -21,3 +23,5 @@ class OSGL_API GLContextProviderMesa { public: static GLContext *CreateContext(); }; + +} diff --git a/lib/osgl/include/vapor/GLContextProviderNvidia.h b/lib/osgl/include/osgl/GLContextProviderNvidia.h similarity index 83% rename from lib/osgl/include/vapor/GLContextProviderNvidia.h rename to lib/osgl/include/osgl/GLContextProviderNvidia.h index e07e34d577..a37e083c66 100644 --- a/lib/osgl/include/vapor/GLContextProviderNvidia.h +++ b/lib/osgl/include/osgl/GLContextProviderNvidia.h @@ -1,13 +1,17 @@ #pragma once -#include +#include //! \class GLContextProviderNvidia //! \ingroup HeadlessGL //! \brief Implements nvidia's API for headless OpenGL Context creation. //! \author Stas Jaroszynski +namespace OSGL { + class OSGL_API GLContextProviderNvidia : private GLContextProviderEGL { public: static GLContext *CreateContext(); }; + +} diff --git a/lib/osgl/include/vapor/GLContextProviderUtil.h b/lib/osgl/include/osgl/GLContextProviderUtil.h similarity index 71% rename from lib/osgl/include/vapor/GLContextProviderUtil.h rename to lib/osgl/include/osgl/GLContextProviderUtil.h index afed1f8504..9010aa0e87 100644 --- a/lib/osgl/include/vapor/GLContextProviderUtil.h +++ b/lib/osgl/include/osgl/GLContextProviderUtil.h @@ -1,9 +1,13 @@ #pragma once -#include +#include + +namespace OSGL { class OSGL_API GLContextProviderUtil { public: static String GetGLVersion(); static void GetGLVersion(int *major, int *minor); }; + +} diff --git a/lib/osgl/include/vapor/GLInclude.h b/lib/osgl/include/osgl/GLInclude.h similarity index 100% rename from lib/osgl/include/vapor/GLInclude.h rename to lib/osgl/include/osgl/GLInclude.h diff --git a/lib/osgl/include/vapor/Log.h b/lib/osgl/include/osgl/Log.h similarity index 95% rename from lib/osgl/include/vapor/Log.h rename to lib/osgl/include/osgl/Log.h index 3065175a35..5c5c3bd2de 100644 --- a/lib/osgl/include/vapor/Log.h +++ b/lib/osgl/include/osgl/Log.h @@ -1,6 +1,8 @@ #pragma once -#include +#include + +namespace OSGL { class OSGL_API Log { template static void print(String fmt, Args... args) @@ -39,3 +41,5 @@ class OSGL_API Log { #define LogMessage(fmt, ...) _Log(Message, fmt, ##__VA_ARGS__) #define LogInfo(fmt, ...) _Log(Info, fmt, ##__VA_ARGS__) #define LogWarning(fmt, ...) _Log(Warning, fmt, ##__VA_ARGS__) + +} diff --git a/lib/osgl/meta.yaml b/lib/osgl/meta.yaml deleted file mode 100644 index bcbf5d27b0..0000000000 --- a/lib/osgl/meta.yaml +++ /dev/null @@ -1,47 +0,0 @@ -package: - name: osgl - version: "0.01" - -source: - path: /osgl - -#build: -# script: | -# echo build ======================================================================================= -# echo build ======================================================================================= -# echo build ======================================================================================= -# echo build ======================================================================================= -# echo SRC_DIR=${SRC_DIR} -# echo PREFIX=${PREFIX} -# cd ${SRC_DIR} -# pwd -# echo build ======================================================================================= -# echo build ======================================================================================= -# echo build ======================================================================================= -# echo build ======================================================================================= - -build: - skip_compile_pyc: - - "*.py" - -requirements: - build: - - make - - cmake=3.21.3 - - cppyy=2.2.0 - # missing from vapor website - - glm - # This does not provide opengl apparently - - mesalib - - libglu - - {{ cdt('mesa-libgl-devel') }} # [linux] - - {{ cdt('mesa-libgl') }} # [linux] - - {{ cdt('mesa-libegl-devel') }} # [linux] - # - mesa-libegl-devel-cos6-x86_64 - # - {{ cdt('mesa-dri-drivers') }} # [linux] - # - {{ cdt('libselinux') }} # [linux] - # - {{ cdt('libxdamage') }} # [linux] - # - {{ cdt('libxxf86vm') }} # [linux] - # - {{ cdt('libxext') }} # [linux] - run: - - mesalib diff --git a/lib/osgl/GLContext.cpp b/lib/osgl/src/GLContext.cpp similarity index 53% rename from lib/osgl/GLContext.cpp rename to lib/osgl/src/GLContext.cpp index c1099b0194..394130e1b8 100644 --- a/lib/osgl/GLContext.cpp +++ b/lib/osgl/src/GLContext.cpp @@ -1,5 +1,7 @@ -#include -#include +#include +#include + +using namespace OSGL; String GLContext::GetVersion() { diff --git a/lib/osgl/GLContextProvider.cpp b/lib/osgl/src/GLContextProvider.cpp similarity index 83% rename from lib/osgl/GLContextProvider.cpp rename to lib/osgl/src/GLContextProvider.cpp index 18ad525e9a..218a922abe 100644 --- a/lib/osgl/GLContextProvider.cpp +++ b/lib/osgl/src/GLContextProvider.cpp @@ -1,9 +1,11 @@ -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include + +using namespace OSGL; GLContext *GLContextProvider::CreateContext() { diff --git a/lib/osgl/GLContextProviderEGL.cpp b/lib/osgl/src/GLContextProviderEGL.cpp similarity index 98% rename from lib/osgl/GLContextProviderEGL.cpp rename to lib/osgl/src/GLContextProviderEGL.cpp index 3257992862..868a3bd465 100644 --- a/lib/osgl/GLContextProviderEGL.cpp +++ b/lib/osgl/src/GLContextProviderEGL.cpp @@ -1,4 +1,6 @@ -#include +#include + +using namespace OSGL; #if BUILD_EGL @@ -6,7 +8,7 @@ #error EGL only supported on linux #endif - #include + #include #include GLContextProviderEGL::GLContextEGL::GLContextEGL(void *display, void *surface, void *context) : _display(display), _surface(surface), _context(context) {} diff --git a/lib/osgl/GLContextProviderMacOS.mm b/lib/osgl/src/GLContextProviderMacOS.mm similarity index 94% rename from lib/osgl/GLContextProviderMacOS.mm rename to lib/osgl/src/GLContextProviderMacOS.mm index 860549cb62..202c3176ef 100644 --- a/lib/osgl/GLContextProviderMacOS.mm +++ b/lib/osgl/src/GLContextProviderMacOS.mm @@ -1,8 +1,10 @@ -#include +#include #include -#include +#include #include +using namespace OSGL; + // This uses the macOS native libraries which are written in Objective-C. GLContextProviderMacOS::GLContextMacOS::GLContextMacOS(void *ctx) diff --git a/lib/osgl/GLContextProviderMesa.cpp b/lib/osgl/src/GLContextProviderMesa.cpp similarity index 96% rename from lib/osgl/GLContextProviderMesa.cpp rename to lib/osgl/src/GLContextProviderMesa.cpp index 2b8a7c52fd..3b53d7eef1 100644 --- a/lib/osgl/GLContextProviderMesa.cpp +++ b/lib/osgl/src/GLContextProviderMesa.cpp @@ -1,7 +1,9 @@ -#include +#include + +using namespace OSGL; #if BUILD_MESA - #include + #include #include GLContextProviderMesa::GLContextMesa::GLContextMesa(void *ctx) : _ctx(ctx) {} diff --git a/lib/osgl/GLContextProviderNvidia.cpp b/lib/osgl/src/GLContextProviderNvidia.cpp similarity index 95% rename from lib/osgl/GLContextProviderNvidia.cpp rename to lib/osgl/src/GLContextProviderNvidia.cpp index d926372d01..424a4973ae 100644 --- a/lib/osgl/GLContextProviderNvidia.cpp +++ b/lib/osgl/src/GLContextProviderNvidia.cpp @@ -1,5 +1,7 @@ -#include -#include +#include +#include "STLUtils.h" + +using namespace OSGL; #if BUILD_EGL @@ -7,7 +9,7 @@ #error EGL only supported on linux #endif - #include + #include #include // Required if using system EGL diff --git a/lib/osgl/GLContextProviderUtil.cpp b/lib/osgl/src/GLContextProviderUtil.cpp similarity index 90% rename from lib/osgl/GLContextProviderUtil.cpp rename to lib/osgl/src/GLContextProviderUtil.cpp index a90d32700c..7c5467338c 100644 --- a/lib/osgl/GLContextProviderUtil.cpp +++ b/lib/osgl/src/GLContextProviderUtil.cpp @@ -1,5 +1,7 @@ -#include -#include +#include +#include + +using namespace OSGL; String GLContextProviderUtil::GetGLVersion() { const char *s = (const char *)glGetString(GL_VERSION); diff --git a/lib/osgl/Log.cpp b/lib/osgl/src/Log.cpp similarity index 93% rename from lib/osgl/Log.cpp rename to lib/osgl/src/Log.cpp index 02b4850142..25f72dece8 100644 --- a/lib/osgl/Log.cpp +++ b/lib/osgl/src/Log.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include @@ -8,6 +8,8 @@ #include #endif +using namespace OSGL; + bool Log::InfoLevelEnabled = true; void Log::printc(const char *format, ...) diff --git a/lib/osgl/src/STLUtils.cpp b/lib/osgl/src/STLUtils.cpp new file mode 100644 index 0000000000..394de49970 --- /dev/null +++ b/lib/osgl/src/STLUtils.cpp @@ -0,0 +1,52 @@ +#include "STLUtils.h" + +using namespace OSGL; +using std::string; +using std::vector; + +bool STLUtils::Contains(const std::string &toSearch, const std::string &query) { return toSearch.find(query) != string::npos; } + +bool STLUtils::ContainsIgnoreCase(const std::string &toSearch, const std::string &query) { return Contains(ToLower(toSearch), ToLower(query)); } + +bool STLUtils::EndsWith(const std::string &str, const std::string &match) { return str.size() >= match.size() && equal(match.begin(), match.end(), str.end() - match.size()); } + +bool STLUtils::BeginsWith(const std::string &str, const std::string &match) { return STLUtils::BeginsWith(str, match); } + +std::string STLUtils::ToLower(std::string str) +{ + std::transform(str.begin(), str.end(), str.begin(), ::tolower); + return str; +} + +std::vector STLUtils::Split(std::string str, const std::string &delimeter) +{ + size_t index; + vector parts; + while ((index = str.find(delimeter)) != string::npos) { + parts.push_back(str.substr(0, index)); + str.erase(0, index + delimeter.length()); + } + parts.push_back(str); + return parts; +} + +std::string STLUtils::Join(const std::vector &parts, const std::string &delimeter) +{ + string whole; + auto itr = parts.begin(); + if (itr != parts.end()) whole = *itr++; + for (; itr != parts.end(); ++itr) whole += delimeter + *itr; + return whole; +} + +std::string STLUtils::ReplaceAll(std::string source, const std::string &oldSegment, const std::string &newSegment) +{ + size_t start = 0; + + size_t index; + while ((index = source.find(oldSegment, start)) != string::npos) { + source.replace(index, oldSegment.length(), newSegment); + start = index + newSegment.length(); + } + return source; +} diff --git a/lib/osgl/src/STLUtils.h b/lib/osgl/src/STLUtils.h new file mode 100644 index 0000000000..647f4bc078 --- /dev/null +++ b/lib/osgl/src/STLUtils.h @@ -0,0 +1,37 @@ +#pragma once + +#include +#include +#include +#include + +namespace OSGL { + +namespace STLUtils { + +template bool Contains(const std::vector &toSearch, const T &object) { return std::find(toSearch.cbegin(), toSearch.cend(), object) != toSearch.cend(); } + +template void AppendTo(std::vector &a, const std::vector &b) { a.insert(a.end(), b.begin(), b.end()); } + +template std::vector Filter(const std::vector &v, std::function f) { + std::vector v2; + std::copy_if(v.begin(), v.end(), std::back_inserter(v2), f); + return v2; +} + +template bool BeginsWith(const T &str, const T &match) { + return str.size() >= match.size() && equal(match.begin(), match.end(), str.begin()); +} +bool BeginsWith(const std::string &str, const std::string &match); + +bool Contains(const std::string &toSearch, const std::string &query); +bool ContainsIgnoreCase(const std::string &toSearch, const std::string &query); +bool EndsWith(const std::string &str, const std::string &match); +std::string ToLower(std::string str); +std::vector Split(std::string str, const std::string &delimeter); +std::string Join(const std::vector &parts, const std::string &delimeter); +std::string ReplaceAll(std::string source, const std::string &oldSegment, const std::string &newSegment); + +} + +} diff --git a/lib/osgl/test_version.cpp b/lib/osgl/test_version.cpp deleted file mode 100644 index 26ad579cc0..0000000000 --- a/lib/osgl/test_version.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include - -int main(int argc, char **argv) -{ - LogMessage("Version Test"); - auto ctx = GLContextProvider::CreateContext(); - assert(ctx); - ctx->MakeCurrent(); - LogMessage("Context: %s", glGetString(GL_VERSION)); - return 0; -} diff --git a/lib/osgl/tests/CMakeLists.txt b/lib/osgl/tests/CMakeLists.txt new file mode 100644 index 0000000000..79ae8b77eb --- /dev/null +++ b/lib/osgl/tests/CMakeLists.txt @@ -0,0 +1,11 @@ +file (GLOB TESTS ./test_*.cpp) +foreach (TEST ${TESTS}) + get_filename_component(TEST_NAME "${TEST}" NAME_WE) + set(TEST_TARGET "${LIB}_${TEST_NAME}") + add_executable(${TEST_TARGET} "${TEST}") + target_link_libraries(${TEST_TARGET} ${LIB}) + if (NOT WIN32) + target_compile_options(${TEST_TARGET} PRIVATE -Wno-deprecated-declarations) + endif() + install(TARGETS ${TEST_TARGET} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Libraries) +endforeach() diff --git a/lib/osgl/stb_image_write.h b/lib/osgl/tests/stb_image_write.h similarity index 100% rename from lib/osgl/stb_image_write.h rename to lib/osgl/tests/stb_image_write.h diff --git a/lib/osgl/test_framebuffer_glad.cpp b/lib/osgl/tests/test_framebuffer.cpp similarity index 93% rename from lib/osgl/test_framebuffer_glad.cpp rename to lib/osgl/tests/test_framebuffer.cpp index 0211ca40ba..5d0e05fef9 100644 --- a/lib/osgl/test_framebuffer_glad.cpp +++ b/lib/osgl/tests/test_framebuffer.cpp @@ -1,10 +1,7 @@ -#include -#include -// #include - - -//#include +#include +#include +using namespace OSGL; #define STB_IMAGE_WRITE_IMPLEMENTATION #include "stb_image_write.h" diff --git a/lib/osgl/tests/test_version.cpp b/lib/osgl/tests/test_version.cpp new file mode 100644 index 0000000000..13a460fdc6 --- /dev/null +++ b/lib/osgl/tests/test_version.cpp @@ -0,0 +1,11 @@ +#include +#include + +int main(int argc, char **argv) +{ + auto ctx = OSGL::GLContextProvider::CreateContext(); + assert(ctx); + ctx->MakeCurrent(); + printf("OpenGL Context: %s\n", glGetString(GL_VERSION)); + return 0; +} diff --git a/lib/render/CMakeLists.txt b/lib/render/CMakeLists.txt index 141b04c70d..96558815c1 100644 --- a/lib/render/CMakeLists.txt +++ b/lib/render/CMakeLists.txt @@ -132,7 +132,7 @@ endif() add_library (render SHARED ${SRC} ${HEADERS}) -target_link_libraries (render PUBLIC common vdc params flow osgl ${FTGL} ${FREETYPE} ${GEOTIFF} ${JPEG} ${TIFF} ${ASSIMP}) +target_link_libraries (render PUBLIC common vdc params flow ${OSGL} ${FTGL} ${FREETYPE} ${GEOTIFF} ${JPEG} ${TIFF} ${ASSIMP}) # Omitted # - ${Python_LIBRARIES} # - ${GLEW} diff --git a/lib/vapi/CMakeLists.txt b/lib/vapi/CMakeLists.txt index ba94ad6214..7be4db84d4 100644 --- a/lib/vapi/CMakeLists.txt +++ b/lib/vapi/CMakeLists.txt @@ -18,7 +18,7 @@ add_library (vapi SHARED ${SRCS} ${HDRS}) target_link_libraries ( vapi render - osgl + ${OSGL} ) if (APPLE) diff --git a/lib/vapi/RenderManager.cpp b/lib/vapi/RenderManager.cpp index 9672d64856..d4b4950d71 100644 --- a/lib/vapi/RenderManager.cpp +++ b/lib/vapi/RenderManager.cpp @@ -8,13 +8,14 @@ #include #include -#include +#include #define INCLUDE_DEPRECATED_LEGACY_VECTOR_MATH #include using namespace VAPoR; +using namespace OSGL; RenderManager::RenderManager(ControlExec *ce) : _controlExec(ce) {} diff --git a/lib/vapi/VPCommon.h b/lib/vapi/VPCommon.h index e311460593..14683feee9 100644 --- a/lib/vapi/VPCommon.h +++ b/lib/vapi/VPCommon.h @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace VAPoR { class ControlExec; @@ -11,6 +11,7 @@ class ViewpointParams; class RenderParams; } // namespace VAPoR using namespace VAPoR; +using namespace OSGL; class GUIStateParams; class AnimationParams; class SettingsParams; diff --git a/lib/vapi/main.cpp b/lib/vapi/main.cpp index 9f9f7280fe..f2d0277070 100644 --- a/lib/vapi/main.cpp +++ b/lib/vapi/main.cpp @@ -1,9 +1,9 @@ //#include #include -#include -#include -#include +#include +#include +#include #include #include #include From 280f1fe44ea0402aa7e5ec71dd99e373bab6b6c4 Mon Sep 17 00:00:00 2001 From: StasJ Date: Thu, 14 Mar 2024 22:02:54 -0600 Subject: [PATCH 2/2] inc --- lib/osgl/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/osgl/CMakeLists.txt b/lib/osgl/CMakeLists.txt index 6bd6ad6417..510a083f40 100644 --- a/lib/osgl/CMakeLists.txt +++ b/lib/osgl/CMakeLists.txt @@ -1,7 +1,6 @@ set(LIB osgl) -set(BUILD_MESA_DEFAULT OFF) -if (UNIX AND NOT APPLE) +if (BUILD_PYTHON AND (UNIX AND NOT APPLE)) set(BUILD_MESA_DEFAULT ON) endif()