From 1709a4ad2bc686e813cf149f0aa70a574219867e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 5 Apr 2025 15:14:27 +0200 Subject: [PATCH] Shaders: allow building this library with MAGNUM_TARGET_GL turned off. So far it contains just the uniform definitions and utilities related to line drawing, nothing else, but especially the line utilities were needed to be able to build MeshTools tests on a GL-less build. --- CMakeLists.txt | 2 +- doc/building.dox | 6 +- doc/changelog.dox | 3 + doc/custom-buildsystems-order.dot | 2 +- modules/FindMagnum.cmake | 5 +- src/Magnum/Shaders/CMakeLists.txt | 141 ++-- src/Magnum/Shaders/DistanceFieldVector.h | 4 +- src/Magnum/Shaders/DistanceFieldVectorGL.h | 20 + src/Magnum/Shaders/Flat.h | 4 +- src/Magnum/Shaders/FlatGL.h | 20 + src/Magnum/Shaders/Generic.h | 2 +- src/Magnum/Shaders/GenericGL.h | 8 + src/Magnum/Shaders/LineGL.h | 22 +- src/Magnum/Shaders/MeshVisualizer.h | 4 +- src/Magnum/Shaders/MeshVisualizerGL.h | 16 + src/Magnum/Shaders/Phong.h | 4 +- src/Magnum/Shaders/PhongGL.h | 12 + src/Magnum/Shaders/Shaders.h | 12 +- src/Magnum/Shaders/Test/CMakeLists.txt | 869 +++++++++++---------- src/Magnum/Shaders/Vector.h | 4 +- src/Magnum/Shaders/VectorGL.h | 20 + src/Magnum/Shaders/VertexColor.h | 8 +- src/Magnum/Shaders/VertexColorGL.h | 20 + 23 files changed, 682 insertions(+), 526 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d2fbff84d..cad3d375a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -245,7 +245,7 @@ cmake_dependent_option(MAGNUM_WITH_SHADERTOOLS "Build ShaderTools library" ON "N cmake_dependent_option(MAGNUM_WITH_TEXT "Build Text library" ON "NOT MAGNUM_WITH_FONTCONVERTER;NOT MAGNUM_WITH_MAGNUMFONT;NOT MAGNUM_WITH_MAGNUMFONTCONVERTER" ON) cmake_dependent_option(MAGNUM_WITH_TEXTURETOOLS "Build TextureTools library" ON "NOT MAGNUM_WITH_TEXT;NOT MAGNUM_WITH_DISTANCEFIELDCONVERTER" ON) cmake_dependent_option(MAGNUM_WITH_TRADE "Build Trade library" ON "NOT MAGNUM_WITH_MATERIALTOOLS;NOT MAGNUM_WITH_MESHTOOLS;NOT MAGNUM_WITH_PRIMITIVES;NOT MAGNUM_WITH_SCENETOOLS;NOT MAGNUM_WITH_IMAGECONVERTER;NOT MAGNUM_WITH_ANYIMAGEIMPORTER;NOT MAGNUM_WITH_ANYIMAGECONVERTER;NOT MAGNUM_WITH_ANYSCENEIMPORTER;NOT MAGNUM_WITH_OBJIMPORTER;NOT MAGNUM_WITH_TGAIMAGECONVERTER;NOT MAGNUM_WITH_TGAIMPORTER" ON) -cmake_dependent_option(MAGNUM_WITH_GL "Build GL library" ON "NOT MAGNUM_WITH_SHADERS;NOT MAGNUM_WITH_GL_INFO;NOT MAGNUM_WITH_ANDROIDAPPLICATION;NOT MAGNUM_WITH_WINDOWLESSIOSAPPLICATION;NOT MAGNUM_WITH_WINDOWLESSCGLAPPLICATION;NOT MAGNUM_WITH_WINDOWLESSGLXAPPLICATION;NOT MAGNUM_WITH_CGLCONTEXT;NOT MAGNUM_WITH_GLXAPPLICATION;NOT MAGNUM_WITH_GLXCONTEXT;NOT MAGNUM_WITH_XEGLAPPLICATION;NOT MAGNUM_WITH_WINDOWLESSWGLAPPLICATION;NOT MAGNUM_WITH_WGLCONTEXT;NOT MAGNUM_WITH_DISTANCEFIELDCONVERTER" ON) +cmake_dependent_option(MAGNUM_WITH_GL "Build GL library" ON "NOT MAGNUM_WITH_GL_INFO;NOT MAGNUM_WITH_ANDROIDAPPLICATION;NOT MAGNUM_WITH_WINDOWLESSIOSAPPLICATION;NOT MAGNUM_WITH_WINDOWLESSCGLAPPLICATION;NOT MAGNUM_WITH_WINDOWLESSGLXAPPLICATION;NOT MAGNUM_WITH_CGLCONTEXT;NOT MAGNUM_WITH_GLXAPPLICATION;NOT MAGNUM_WITH_GLXCONTEXT;NOT MAGNUM_WITH_XEGLAPPLICATION;NOT MAGNUM_WITH_WINDOWLESSWGLAPPLICATION;NOT MAGNUM_WITH_WGLCONTEXT;NOT MAGNUM_WITH_DISTANCEFIELDCONVERTER" ON) cmake_dependent_option(MAGNUM_TARGET_GL "Build libraries with OpenGL interoperability" ON "MAGNUM_WITH_GL" OFF) diff --git a/doc/building.dox b/doc/building.dox index 3a309b8c0..45a09f52f 100644 --- a/doc/building.dox +++ b/doc/building.dox @@ -563,8 +563,7 @@ can specify which parts will be built and which not: - `MAGNUM_WITH_AUDIO` --- Build the @ref Audio library. Depends on [OpenAL](https://www.openal.org/), not enabled by default. - `MAGNUM_WITH_DEBUGTOOLS` --- Build the @ref DebugTools library. -- `MAGNUM_WITH_GL` --- Build the @ref GL library. Enabled automatically if - `MAGNUM_WITH_SHADERS` is enabled. +- `MAGNUM_WITH_GL` --- Build the @ref GL library - `MAGNUM_WITH_MATERIALTOOLS` --- Build the @ref MaterialTools library. Enables also building of the @ref Trade library. - `MAGNUM_WITH_MESHTOOLS` --- Build the @ref MeshTools library. Enables also @@ -574,8 +573,7 @@ can specify which parts will be built and which not: - `MAGNUM_WITH_SCENEGRAPH` --- Build the @ref SceneGraph library - `MAGNUM_WITH_SCENETOOLS` --- Build the @ref SceneTools library. Enables also building of the @ref Trade library. -- `MAGNUM_WITH_SHADERS` --- Build the @ref Shaders library. Enables also - building of the @ref GL library. +- `MAGNUM_WITH_SHADERS` --- Build the @ref Shaders library - `MAGNUM_WITH_SHADERTOOLS` --- Build the @ref ShaderTools library - `MAGNUM_WITH_TEXT` --- Build the @ref Text library. Enables also building of the @ref TextureTools library. diff --git a/doc/changelog.dox b/doc/changelog.dox index 0987c64c1..73776610b 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -892,6 +892,9 @@ See also: @subsubsection changelog-latest-changes-shaders Shaders library +- This library no longer has a hard dependency on OpenGL. If + @ref MAGNUM_TARGET_GL is not enabled, this library will contain just + uniform struct definitions and related utilities. - In the original implementation of normal mapping in @ref Shaders::PhongGL, there shader didn't provide a way to supply bitangent direction, forcing users to patch normal maps. This is now possible using newly added diff --git a/doc/custom-buildsystems-order.dot b/doc/custom-buildsystems-order.dot index f7bd8fe26..02cdbd72d 100644 --- a/doc/custom-buildsystems-order.dot +++ b/doc/custom-buildsystems-order.dot @@ -92,7 +92,7 @@ digraph "Magnum library dependency order" { MagnumSceneGraph -> Magnum - MagnumShaders -> MagnumGL + MagnumShaders -> MagnumGL [style=dotted] MagnumShaderTools -> Magnum MagnumShaderTools -> CorradePluginManager diff --git a/modules/FindMagnum.cmake b/modules/FindMagnum.cmake index 2c5482be7..03656d1a6 100644 --- a/modules/FindMagnum.cmake +++ b/modules/FindMagnum.cmake @@ -491,7 +491,10 @@ endif() set(_MAGNUM_SceneGraph_DEPENDENCIES ) set(_MAGNUM_SceneTools_DEPENDENCIES Trade) -set(_MAGNUM_Shaders_DEPENDENCIES GL) +set(_MAGNUM_Shaders_DEPENDENCIES ) +if(MAGNUM_TARGET_GL) + list(APPEND _MAGNUM_Shaders_DEPENDENCIES GL) +endif() set(_MAGNUM_Text_DEPENDENCIES TextureTools) if(MAGNUM_TARGET_GL) diff --git a/src/Magnum/Shaders/CMakeLists.txt b/src/Magnum/Shaders/CMakeLists.txt index d7672852b..dc6ec56c7 100644 --- a/src/Magnum/Shaders/CMakeLists.txt +++ b/src/Magnum/Shaders/CMakeLists.txt @@ -28,92 +28,103 @@ # property that would have to be set on each target separately. set(CMAKE_FOLDER "Magnum/Shaders") -if(NOT MAGNUM_WITH_GL) - message(SEND_ERROR "Shaders are available only if MAGNUM_WITH_GL is enabled") -endif() - -if(MAGNUM_TARGET_GLES2) - corrade_add_resource(MagnumShaders_RESOURCES_GL resources-gles2.conf) -else() - corrade_add_resource(MagnumShaders_RESOURCES_GL resources-gl.conf) -endif() - -set(MagnumShaders_SRCS - ${MagnumShaders_RESOURCES_GL}) +set(MagnumShaders_SRCS ) set(MagnumShaders_GracefulAssert_SRCS - DistanceFieldVectorGL.cpp - FlatGL.cpp - Line.cpp - MeshVisualizerGL.cpp - PhongGL.cpp - VectorGL.cpp - VertexColorGL.cpp - - glShaderWrapper.cpp) + Line.cpp) set(MagnumShaders_HEADERS DistanceFieldVector.h - DistanceFieldVectorGL.h Flat.h - FlatGL.h Generic.h - GenericGL.h Line.h MeshVisualizer.h - MeshVisualizerGL.h Phong.h - PhongGL.h Shaders.h Vector.h - VectorGL.h - VertexColorGL.h - glShaderWrapper.h visibility.h) # Header files to display in project view of IDEs only set(MagnumShaders_PRIVATE_HEADERS Implementation/lineMiterLimit.h) -if(NOT MAGNUM_TARGET_GLES2) +if(MAGNUM_TARGET_GL) + if(MAGNUM_TARGET_GLES2) + corrade_add_resource(MagnumShaders_RESOURCES_GL resources-gles2.conf) + else() + corrade_add_resource(MagnumShaders_RESOURCES_GL resources-gl.conf) + endif() + + list(APPEND MagnumShaders_SRCS + ${MagnumShaders_RESOURCES_GL}) + list(APPEND MagnumShaders_GracefulAssert_SRCS - LineGL.cpp) + DistanceFieldVectorGL.cpp + FlatGL.cpp + MeshVisualizerGL.cpp + PhongGL.cpp + VectorGL.cpp + VertexColorGL.cpp - list(APPEND MagnumShaders_HEADERS - LineGL.h) -endif() + glShaderWrapper.cpp) -if(MAGNUM_BUILD_DEPRECATED) list(APPEND MagnumShaders_HEADERS - VertexColor.h) -endif() + DistanceFieldVectorGL.h + FlatGL.h + GenericGL.h + MeshVisualizerGL.h + PhongGL.h + VectorGL.h + VertexColorGL.h + + glShaderWrapper.h) + + if(NOT MAGNUM_TARGET_GLES2) + list(APPEND MagnumShaders_GracefulAssert_SRCS + LineGL.cpp) + + list(APPEND MagnumShaders_HEADERS + LineGL.h) + endif() -# Objects shared between main and test library -add_library(MagnumShadersObjects OBJECT - ${MagnumShaders_SRCS} - ${MagnumShaders_HEADERS} - ${MagnumShaders_PRIVATE_HEADERS}) -if(MAGNUM_BUILD_STATIC) - # On the static build we're importing the resources manually, so no need to - # have the implicit initializers as well. - set_property(SOURCE ${MagnumShaders_RCS} APPEND PROPERTY COMPILE_DEFINITIONS - "CORRADE_AUTOMATIC_INITIALIZER=CORRADE_NOOP" - "CORRADE_AUTOMATIC_FINALIZER=CORRADE_NOOP") -endif() -target_include_directories(MagnumShadersObjects PUBLIC - $ - $) -if(NOT MAGNUM_BUILD_STATIC) - target_compile_definitions(MagnumShadersObjects PRIVATE "MagnumShadersObjects_EXPORTS") + if(MAGNUM_BUILD_DEPRECATED) + list(APPEND MagnumShaders_HEADERS + VertexColor.h) + endif() endif() -if(NOT MAGNUM_BUILD_STATIC OR MAGNUM_BUILD_STATIC_PIC) - set_target_properties(MagnumShadersObjects PROPERTIES POSITION_INDEPENDENT_CODE ON) + +# Objects shared between main and test library. On non-GL builds contains +# nothing so it's not even defined. +if(MAGNUM_TARGET_GL) + add_library(MagnumShadersObjects OBJECT + ${MagnumShaders_SRCS} + ${MagnumShaders_HEADERS} + ${MagnumShaders_PRIVATE_HEADERS}) + if(MAGNUM_BUILD_STATIC) + # On the static build we're importing the resources manually, so no need to + # have the implicit initializers as well. + set_property(SOURCE ${MagnumShaders_RCS} APPEND PROPERTY COMPILE_DEFINITIONS + "CORRADE_AUTOMATIC_INITIALIZER=CORRADE_NOOP" + "CORRADE_AUTOMATIC_FINALIZER=CORRADE_NOOP") + endif() + target_include_directories(MagnumShadersObjects PUBLIC + $ + $) + if(NOT MAGNUM_BUILD_STATIC) + target_compile_definitions(MagnumShadersObjects PRIVATE "MagnumShadersObjects_EXPORTS") + endif() + if(NOT MAGNUM_BUILD_STATIC OR MAGNUM_BUILD_STATIC_PIC) + set_target_properties(MagnumShadersObjects PROPERTIES POSITION_INDEPENDENT_CODE ON) + endif() + set(MagnumShadersObjects_OBJECTS $) +else() + set(MagnumShadersObjects_OBJECTS ) endif() # Main Shaders library add_library(MagnumShaders ${SHARED_OR_STATIC} - $ + ${MagnumShadersObjects_OBJECTS} ${MagnumShaders_GracefulAssert_SRCS}) set_target_properties(MagnumShaders PROPERTIES DEBUG_POSTFIX "-d") if(NOT MAGNUM_BUILD_STATIC) @@ -121,9 +132,10 @@ if(NOT MAGNUM_BUILD_STATIC) elseif(MAGNUM_BUILD_STATIC_PIC) set_target_properties(MagnumShaders PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() -target_link_libraries(MagnumShaders PUBLIC - Magnum - MagnumGL) +target_link_libraries(MagnumShaders PUBLIC Magnum) +if(MAGNUM_TARGET_GL) + target_link_libraries(MagnumShaders PUBLIC MagnumGL) +endif() install(TARGETS MagnumShaders RUNTIME DESTINATION ${MAGNUM_BINARY_INSTALL_DIR} @@ -134,7 +146,7 @@ install(FILES ${MagnumShaders_HEADERS} DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR} if(MAGNUM_BUILD_TESTS) # Library with graceful assert for testing add_library(MagnumShadersTestLib ${SHARED_OR_STATIC} ${EXCLUDE_FROM_ALL_IF_TEST_TARGET} - $ + ${MagnumShadersObjects_OBJECTS} ${MagnumShaders_GracefulAssert_SRCS}) set_target_properties(MagnumShadersTestLib PROPERTIES DEBUG_POSTFIX "-d") target_compile_definitions(MagnumShadersTestLib PRIVATE @@ -142,9 +154,10 @@ if(MAGNUM_BUILD_TESTS) if(MAGNUM_BUILD_STATIC_PIC) set_target_properties(MagnumShadersTestLib PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() - target_link_libraries(MagnumShadersTestLib PUBLIC - Magnum - MagnumGL) + target_link_libraries(MagnumShadersTestLib PUBLIC Magnum) + if(MAGNUM_TARGET_GL) + target_link_libraries(MagnumShadersTestLib PUBLIC MagnumGL) + endif() add_subdirectory(Test ${EXCLUDE_FROM_ALL_IF_TEST_TARGET}) endif() diff --git a/src/Magnum/Shaders/DistanceFieldVector.h b/src/Magnum/Shaders/DistanceFieldVector.h index fe4ef6cc9..a0dd5f08d 100644 --- a/src/Magnum/Shaders/DistanceFieldVector.h +++ b/src/Magnum/Shaders/DistanceFieldVector.h @@ -33,7 +33,7 @@ #include "Magnum/Magnum.h" #include "Magnum/Math/Color.h" -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) #include #include "Magnum/Shaders/DistanceFieldVectorGL.h" @@ -247,7 +247,7 @@ struct DistanceFieldVectorMaterialUniform { #endif }; -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) /** @brief @copybrief DistanceFieldVectorGL * @m_deprecated_since_latest Use @ref DistanceFieldVectorGL instead. */ diff --git a/src/Magnum/Shaders/DistanceFieldVectorGL.h b/src/Magnum/Shaders/DistanceFieldVectorGL.h index 8b25b2e08..0efcd19a9 100644 --- a/src/Magnum/Shaders/DistanceFieldVectorGL.h +++ b/src/Magnum/Shaders/DistanceFieldVectorGL.h @@ -27,11 +27,16 @@ DEALINGS IN THE SOFTWARE. */ +#ifdef MAGNUM_TARGET_GL /** @file * @brief Class @ref Magnum::Shaders::DistanceFieldVectorGL, typedef @ref Magnum::Shaders::DistanceFieldVectorGL2D, @ref Magnum::Shaders::DistanceFieldVectorGL3D * @m_since_latest */ +#endif + +#include "Magnum/configure.h" +#ifdef MAGNUM_TARGET_GL #include #include "Magnum/DimensionTraits.h" @@ -80,6 +85,10 @@ working on the framebuffer, you need to enable @image html shaders-distancefieldvector.png width=256px +@note This class is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. + @section Shaders-DistanceFieldVectorGL-usage Example usage Common mesh setup: @@ -883,12 +892,20 @@ template class DistanceFieldVectorGL::Compil /** @brief Two-dimensional distance field vector OpenGL shader @m_since_latest + +@note This typedef is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. */ typedef DistanceFieldVectorGL<2> DistanceFieldVectorGL2D; /** @brief Three-dimensional distance field vector OpenGL shader @m_since_latest + +@note This typedef is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. */ typedef DistanceFieldVectorGL<3> DistanceFieldVectorGL3D; @@ -906,5 +923,8 @@ namespace Implementation { #endif }} +#else +#error this header is available only in the OpenGL build +#endif #endif diff --git a/src/Magnum/Shaders/Flat.h b/src/Magnum/Shaders/Flat.h index 742fa945e..89ab63849 100644 --- a/src/Magnum/Shaders/Flat.h +++ b/src/Magnum/Shaders/Flat.h @@ -33,7 +33,7 @@ #include "Magnum/Magnum.h" #include "Magnum/Math/Color.h" -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) #include #include "Magnum/Shaders/FlatGL.h" @@ -274,7 +274,7 @@ struct FlatMaterialUniform { #endif }; -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) /** @brief @copybrief FlatGL * @m_deprecated_since_latest Use @ref FlatGL instead. */ diff --git a/src/Magnum/Shaders/FlatGL.h b/src/Magnum/Shaders/FlatGL.h index 6e0a92260..f3e7d7a79 100644 --- a/src/Magnum/Shaders/FlatGL.h +++ b/src/Magnum/Shaders/FlatGL.h @@ -27,11 +27,16 @@ DEALINGS IN THE SOFTWARE. */ +#ifdef MAGNUM_TARGET_GL /** @file * @brief Class @ref Magnum::Shaders::FlatGL, typedef @ref Magnum::Shaders::FlatGL2D, @ref Magnum::Shaders::FlatGL3D * @m_since_latest */ +#endif + +#include "Magnum/configure.h" +#ifdef MAGNUM_TARGET_GL #include #include "Magnum/DimensionTraits.h" @@ -85,6 +90,10 @@ configure the shader. @image html shaders-flat.png width=256px +@note This function is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. + @section Shaders-FlatGL-colored Colored rendering Common mesh setup: @@ -1590,12 +1599,20 @@ template class FlatGL::CompileState: public /** @brief 2D flat OpenGL shader @m_since_latest + +@note This typedef is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. */ typedef FlatGL<2> FlatGL2D; /** @brief 3D flat OpenGL shader @m_since_latest + +@note This typedef is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. */ typedef FlatGL<3> FlatGL3D; @@ -1613,5 +1630,8 @@ namespace Implementation { #endif }} +#else +#error this header is available only in the OpenGL build +#endif #endif diff --git a/src/Magnum/Shaders/Generic.h b/src/Magnum/Shaders/Generic.h index 31d836b2d..bd9c3cc84 100644 --- a/src/Magnum/Shaders/Generic.h +++ b/src/Magnum/Shaders/Generic.h @@ -34,7 +34,7 @@ #include "Magnum/Math/Matrix3.h" #include "Magnum/Math/Matrix4.h" -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) #include #include "Magnum/Shaders/GenericGL.h" diff --git a/src/Magnum/Shaders/GenericGL.h b/src/Magnum/Shaders/GenericGL.h index 2229e1920..286985aae 100644 --- a/src/Magnum/Shaders/GenericGL.h +++ b/src/Magnum/Shaders/GenericGL.h @@ -27,11 +27,16 @@ DEALINGS IN THE SOFTWARE. */ +#ifdef MAGNUM_TARGET_GL /** @file * @brief Struct @ref Magnum::Shaders::GenericGL, typedef @ref Magnum::Shaders::GenericGL2D, @ref Magnum::Shaders::GenericGL3D * @m_since_latest */ +#endif + +#include "Magnum/configure.h" +#ifdef MAGNUM_TARGET_GL #include "Magnum/GL/Attribute.h" #include "Magnum/Shaders/Shaders.h" @@ -632,5 +637,8 @@ typedef CORRADE_DEPRECATED("use GenericGL3D instead") GenericGL3D Generic3D; #endif }} +#else +#error this header is available only in the OpenGL build +#endif #endif diff --git a/src/Magnum/Shaders/LineGL.h b/src/Magnum/Shaders/LineGL.h index 2e8bab90d..7c48af7ff 100644 --- a/src/Magnum/Shaders/LineGL.h +++ b/src/Magnum/Shaders/LineGL.h @@ -26,13 +26,16 @@ DEALINGS IN THE SOFTWARE. */ -#ifndef MAGNUM_TARGET_GLES2 +#if defined(MAGNUM_TARGET_GL) && !defined(MAGNUM_TARGET_GLES2) /** @file * @brief Class @ref Magnum::Shaders::LineGL, typedef @ref Magnum::Shaders::LineGL2D, @ref Magnum::Shaders::LineGL3D * @m_since_latest */ #endif +#include "Magnum/configure.h" + +#if defined(MAGNUM_TARGET_GL) && !defined(MAGNUM_TARGET_GLES2) #include #include "Magnum/DimensionTraits.h" @@ -41,7 +44,6 @@ #include "Magnum/Shaders/glShaderWrapper.h" #include "Magnum/Shaders/visibility.h" -#ifndef MAGNUM_TARGET_GLES2 namespace Magnum { namespace Shaders { namespace Implementation { @@ -72,6 +74,10 @@ styles, and antialiased independently of MSAA being used or not. @experimental +@note This class is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. + @requires_gl30 Extension @gl_extension{EXT,gpu_shader4} @requires_gles30 Requires integer support in shaders which is not available in OpenGL ES 2.0. @@ -1144,12 +1150,20 @@ template class LineGL::CompileState: public /** @brief 2D line OpenGL shader @m_since_latest + +@note This typedef is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. */ typedef LineGL<2> LineGL2D; /** @brief 3D LineGL OpenGL shader @m_since_latest + +@note This typedef is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. */ typedef LineGL<3> LineGL3D; @@ -1173,8 +1187,10 @@ namespace Implementation { #endif }} -#else +#elif defined(MAGNUM_TARGET_GLES2) #error this header is not available in the OpenGL ES 2.0 / WebGL 1.0 build +#else +#error this header is available only in the OpenGL build #endif #endif diff --git a/src/Magnum/Shaders/MeshVisualizer.h b/src/Magnum/Shaders/MeshVisualizer.h index a24282128..9da804828 100644 --- a/src/Magnum/Shaders/MeshVisualizer.h +++ b/src/Magnum/Shaders/MeshVisualizer.h @@ -34,7 +34,7 @@ #include "Magnum/Math/Color.h" #include "Magnum/Math/Matrix.h" -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) #include #include "Magnum/Shaders/MeshVisualizerGL.h" @@ -598,7 +598,7 @@ struct MeshVisualizerMaterialUniform { #endif }; -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) /** @brief @copybrief MeshVisualizerGL2D * @m_deprecated_since_latest Use @ref MeshVisualizerGL2D instead. */ diff --git a/src/Magnum/Shaders/MeshVisualizerGL.h b/src/Magnum/Shaders/MeshVisualizerGL.h index e8982887e..acf029b7a 100644 --- a/src/Magnum/Shaders/MeshVisualizerGL.h +++ b/src/Magnum/Shaders/MeshVisualizerGL.h @@ -27,11 +27,16 @@ DEALINGS IN THE SOFTWARE. */ +#ifdef MAGNUM_TARGET_GL /** @file * @brief Class @ref Magnum::Shaders::MeshVisualizerGL2D, @ref Magnum::Shaders::MeshVisualizerGL3D * @m_since_latest */ +#endif + +#include "Magnum/configure.h" +#ifdef MAGNUM_TARGET_GL #include #include @@ -180,6 +185,10 @@ behavior with nothing enabled. The shader is a 2D variant of @ref MeshVisualizerGL3D with mostly identical workflow. See its documentation for more information, workflows that differ are shown below. +@note This class is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. + @section Shaders-MeshVisualizerGL2D-instancing Instanced rendering Enabling @ref Flag::InstancedTransformation will turn the shader into an @@ -1421,6 +1430,10 @@ visualization or object/primitive ID visualization by passing an appropriate @ref Flag to @ref Configuration::setFlags() --- there's no default behavior with nothing enabled. +@note This class is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. + @section Shaders-MeshVisualizerGL3D-wireframe Wireframe visualization Wireframe visualization is done by enabling @ref Flag::Wireframe. It is done @@ -3420,5 +3433,8 @@ CORRADE_ENUMSET_OPERATORS(MeshVisualizerGL2D::Flags) CORRADE_ENUMSET_OPERATORS(MeshVisualizerGL3D::Flags) }} +#else +#error this header is available only in the OpenGL build +#endif #endif diff --git a/src/Magnum/Shaders/Phong.h b/src/Magnum/Shaders/Phong.h index 1001358af..2a24630f9 100644 --- a/src/Magnum/Shaders/Phong.h +++ b/src/Magnum/Shaders/Phong.h @@ -35,7 +35,7 @@ #include "Magnum/Math/Color.h" #include "Magnum/Math/Matrix.h" -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) #include #include "Magnum/Shaders/PhongGL.h" @@ -549,7 +549,7 @@ struct PhongLightUniform { #endif }; -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) /** @brief @copybrief PhongGL * @m_deprecated_since_latest Use @ref PhongGL instead. */ diff --git a/src/Magnum/Shaders/PhongGL.h b/src/Magnum/Shaders/PhongGL.h index 9ff67d802..10f672329 100644 --- a/src/Magnum/Shaders/PhongGL.h +++ b/src/Magnum/Shaders/PhongGL.h @@ -28,11 +28,16 @@ DEALINGS IN THE SOFTWARE. */ +#ifdef MAGNUM_TARGET_GL /** @file * @brief Class @ref Magnum::Shaders::PhongGL * @m_since_latest */ +#endif + +#include "Magnum/configure.h" +#ifdef MAGNUM_TARGET_GL #include #include @@ -56,6 +61,10 @@ shader. @image html shaders-phong.png width=256px +@note This class is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. + @section Shaders-PhongGL-colored Colored rendering Common mesh setup: @@ -2434,5 +2443,8 @@ MAGNUM_SHADERS_EXPORT Debug& operator<<(Debug& debug, PhongGL::Flags value); CORRADE_ENUMSET_OPERATORS(PhongGL::Flags) }} +#else +#error this header is available only in the OpenGL build +#endif #endif diff --git a/src/Magnum/Shaders/Shaders.h b/src/Magnum/Shaders/Shaders.h index 5717666f4..7b3f4a9a1 100644 --- a/src/Magnum/Shaders/Shaders.h +++ b/src/Magnum/Shaders/Shaders.h @@ -32,13 +32,17 @@ #include "Magnum/Types.h" -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) #include #endif #ifndef DOXYGEN_GENERATING_OUTPUT namespace Magnum { namespace Shaders { +enum class LineCapStyle: UnsignedByte; +enum class LineJoinStyle: UnsignedByte; + +#ifdef MAGNUM_TARGET_GL template class DistanceFieldVectorGL; typedef DistanceFieldVectorGL<2> DistanceFieldVectorGL2D; typedef DistanceFieldVectorGL<3> DistanceFieldVectorGL3D; @@ -57,12 +61,9 @@ typedef CORRADE_DEPRECATED("use FlatGL2D instead") FlatGL2D Flat2D; typedef CORRADE_DEPRECATED("use FlatGL3D instead") FlatGL3D Flat3D; #endif -/* Generic is used only statically */ +/* GenericGL is used only statically */ #ifndef MAGNUM_TARGET_GLES2 -enum class LineCapStyle: UnsignedByte; -enum class LineJoinStyle: UnsignedByte; - template class LineGL; typedef LineGL<2> LineGL2D; typedef LineGL<3> LineGL3D; @@ -98,6 +99,7 @@ template using VertexColor CORRADE_DEPRECATED_ALIAS("use typedef CORRADE_DEPRECATED("use VertexColorGL2D instead") VertexColorGL2D VertexColor2D; typedef CORRADE_DEPRECATED("use VertexColorGL3D instead") VertexColorGL3D VertexColor3D; #endif +#endif }} #endif diff --git a/src/Magnum/Shaders/Test/CMakeLists.txt b/src/Magnum/Shaders/Test/CMakeLists.txt index aef455808..6f365db04 100644 --- a/src/Magnum/Shaders/Test/CMakeLists.txt +++ b/src/Magnum/Shaders/Test/CMakeLists.txt @@ -31,446 +31,381 @@ set(CMAKE_FOLDER "Magnum/Shaders/Test") corrade_add_test(ShadersDistanceFieldVectorTest DistanceFieldVectorTest.cpp LIBRARIES MagnumShaders) corrade_add_test(ShadersFlatTest FlatTest.cpp LIBRARIES MagnumShaders) corrade_add_test(ShadersGenericTest GenericTest.cpp LIBRARIES MagnumShaders) -corrade_add_test(ShadersGLShaderWrapperTest GLShaderWrapperTest.cpp LIBRARIES MagnumShaders) corrade_add_test(ShadersMeshVisualizerTest MeshVisualizerTest.cpp LIBRARIES MagnumShaders) corrade_add_test(ShadersPhongTest PhongTest.cpp LIBRARIES MagnumShaders) +corrade_add_test(ShadersLineTest LineTest.cpp LIBRARIES MagnumShadersTestLib) +target_compile_definitions(ShadersLineTest PRIVATE "CORRADE_GRACEFUL_ASSERT") corrade_add_test(ShadersVectorTest VectorTest.cpp LIBRARIES MagnumShaders) -# There's an underscore between GL and Test to disambiguate from GLTest, which -# is a common suffix used to mark tests that need a GL context. Ugly, I know. -corrade_add_test(ShadersDistanceFieldVectorGL_Test DistanceFieldVectorGL_Test.cpp LIBRARIES MagnumShaders) -corrade_add_test(ShadersFlatGL_Test FlatGL_Test.cpp LIBRARIES MagnumShadersTestLib) -corrade_add_test(ShadersGenericGL_Test GenericGL_Test.cpp LIBRARIES MagnumShaders) -corrade_add_test(ShadersMeshVisualizerGL_Test MeshVisualizerGL_Test.cpp LIBRARIES MagnumShadersTestLib) -corrade_add_test(ShadersPhongGL_Test PhongGL_Test.cpp LIBRARIES MagnumShadersTestLib) -corrade_add_test(ShadersVectorGL_Test VectorGL_Test.cpp LIBRARIES MagnumShaders) -corrade_add_test(ShadersVertexColorGL_Test VertexColorGL_Test.cpp LIBRARIES MagnumShaders) +if(MAGNUM_TARGET_GL) + corrade_add_test(ShadersGLShaderWrapperTest GLShaderWrapperTest.cpp LIBRARIES MagnumShaders) -if(NOT MAGNUM_TARGET_GLES2) - corrade_add_test(ShadersLineTest LineTest.cpp LIBRARIES MagnumShadersTestLib) - target_compile_definitions(ShadersLineTest PRIVATE "CORRADE_GRACEFUL_ASSERT") + # There's an underscore between GL and Test to disambiguate from GLTest, + # which is a common suffix used to mark tests that need a GL context. Ugly, + # I know. + corrade_add_test(ShadersDistanceFieldVectorGL_Test DistanceFieldVectorGL_Test.cpp LIBRARIES MagnumShaders) + corrade_add_test(ShadersFlatGL_Test FlatGL_Test.cpp LIBRARIES MagnumShadersTestLib) + corrade_add_test(ShadersGenericGL_Test GenericGL_Test.cpp LIBRARIES MagnumShaders) + corrade_add_test(ShadersMeshVisualizerGL_Test MeshVisualizerGL_Test.cpp LIBRARIES MagnumShadersTestLib) + corrade_add_test(ShadersPhongGL_Test PhongGL_Test.cpp LIBRARIES MagnumShadersTestLib) + corrade_add_test(ShadersVectorGL_Test VectorGL_Test.cpp LIBRARIES MagnumShaders) + corrade_add_test(ShadersVertexColorGL_Test VertexColorGL_Test.cpp LIBRARIES MagnumShaders) - corrade_add_test(ShadersLineGL_Test LineGL_Test.cpp LIBRARIES MagnumShaders) -endif() - -if(MAGNUM_BUILD_GL_TESTS) - # Otherwise CMake complains that Corrade::PluginManager is not found, wtf - find_package(Corrade REQUIRED PluginManager) - - if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID) - set(SHADERS_TEST_DIR ".") - else() - set(SHADERS_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}) - endif() - - if(NOT MAGNUM_BUILD_PLUGINS_STATIC) - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - set(ANYIMAGEIMPORTER_PLUGIN_FILENAME $) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - set(TGAIMPORTER_PLUGIN_FILENAME $) - endif() + if(NOT MAGNUM_TARGET_GLES2) + corrade_add_test(ShadersLineGL_Test LineGL_Test.cpp LIBRARIES MagnumShaders) endif() - # First replace ${} variables, then $<> generator expressions - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake - ${CMAKE_CURRENT_BINARY_DIR}/configure.h.in) - file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$/configure.h - INPUT ${CMAKE_CURRENT_BINARY_DIR}/configure.h.in) + if(MAGNUM_BUILD_GL_TESTS) + # Otherwise CMake complains that Corrade::PluginManager is not found, + # wtf + find_package(Corrade REQUIRED PluginManager) - set(ShadersDistanceFieldVectorGLTest_SRCS DistanceFieldVectorGLTest.cpp) - if(CORRADE_TARGET_IOS) - list(APPEND ShadersDistanceFieldVectorGLTest_SRCS TestFiles VectorTestFiles) - endif() - corrade_add_test(ShadersDistanceFieldVectorGLTest ${ShadersDistanceFieldVectorGLTest_SRCS} - LIBRARIES - MagnumDebugTools - MagnumMeshTools - MagnumPrimitives - MagnumShadersTestLib - MagnumOpenGLTester - FILES - TestFiles/vector-distancefield.tga - - VectorTestFiles/defaults.tga - VectorTestFiles/defaults-distancefield.tga - VectorTestFiles/smooth0.1-2D.tga - VectorTestFiles/smooth0.1-3D.tga - VectorTestFiles/smooth0.2-2D.tga - VectorTestFiles/smooth0.2-3D.tga - VectorTestFiles/outline2D.tga - VectorTestFiles/outline3D.tga - VectorTestFiles/multidraw2D-distancefield.tga - VectorTestFiles/multidraw3D-distancefield.tga) - target_include_directories(ShadersDistanceFieldVectorGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) - if(MAGNUM_BUILD_PLUGINS_STATIC) - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - target_link_libraries(ShadersDistanceFieldVectorGLTest PRIVATE AnyImageImporter) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - target_link_libraries(ShadersDistanceFieldVectorGLTest PRIVATE TgaImporter) - endif() - else() - # So the plugins get properly built when building the test - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - add_dependencies(ShadersDistanceFieldVectorGLTest AnyImageImporter) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - add_dependencies(ShadersDistanceFieldVectorGLTest TgaImporter) + if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID) + set(SHADERS_TEST_DIR ".") + else() + set(SHADERS_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}) endif() - endif() - - set(ShadersFlatGLTest_SRCS FlatGLTest.cpp) - if(CORRADE_TARGET_IOS) - list(APPEND ShadersFlatGLTest_SRCS TestFiles FlatTestFiles) - endif() - corrade_add_test(ShadersFlatGLTest ${ShadersFlatGLTest_SRCS} - LIBRARIES - MagnumDebugTools - MagnumMeshTools - MagnumPrimitives - MagnumShadersTestLib - MagnumOpenGLTester - FILES - TestFiles/diffuse-alpha-texture.tga - TestFiles/diffuse-texture.tga - TestFiles/alpha-mask1.0.tga - TestFiles/skinning.tga - TestFiles/skinning-default.tga - TestFiles/skinning-instanced.tga - TestFiles/skinning-multi.tga - FlatTestFiles/colored2D.tga - FlatTestFiles/colored3D.tga - FlatTestFiles/defaults.tga - FlatTestFiles/instanced2D.tga - FlatTestFiles/instanced3D.tga - FlatTestFiles/instanced-textured2D.tga - FlatTestFiles/instanced-textured3D.tga - FlatTestFiles/textured2D.tga - FlatTestFiles/textured3D.tga - FlatTestFiles/textured2D-alpha.tga - FlatTestFiles/textured3D-alpha.tga - FlatTestFiles/textured2D-alpha-mask0.5.tga - FlatTestFiles/textured3D-alpha-mask0.5.tga - FlatTestFiles/vertexColor2D.tga - FlatTestFiles/vertexColor3D.tga - FlatTestFiles/multidraw2D.tga - FlatTestFiles/multidraw3D.tga - FlatTestFiles/multidraw-textured2D.tga - FlatTestFiles/multidraw-textured3D.tga) - target_include_directories(ShadersFlatGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) - if(MAGNUM_BUILD_PLUGINS_STATIC) - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - target_link_libraries(ShadersFlatGLTest PRIVATE AnyImageImporter) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - target_link_libraries(ShadersFlatGLTest PRIVATE TgaImporter) - endif() - else() - # So the plugins get properly built when building the test - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - add_dependencies(ShadersFlatGLTest AnyImageImporter) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - add_dependencies(ShadersFlatGLTest TgaImporter) + if(NOT MAGNUM_BUILD_PLUGINS_STATIC) + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + set(ANYIMAGEIMPORTER_PLUGIN_FILENAME $) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + set(TGAIMPORTER_PLUGIN_FILENAME $) + endif() endif() - endif() - corrade_add_test(ShadersGLShaderWrapperGLTest GLShaderWrapperGLTest.cpp LIBRARIES MagnumShaders MagnumOpenGLTester) + # First replace ${} variables, then $<> generator expressions + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake + ${CMAKE_CURRENT_BINARY_DIR}/configure.h.in) + file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$/configure.h + INPUT ${CMAKE_CURRENT_BINARY_DIR}/configure.h.in) - set(ShadersMeshVisualizerGLTest_SRCS MeshVisualizerGLTest.cpp) - if(CORRADE_TARGET_IOS) - list(APPEND ShadersMeshVisualizerGLTest_SRCS FlatTestFiles MeshVisualizerTestFiles) - endif() - corrade_add_test(ShadersMeshVisualizerGLTest ${ShadersMeshVisualizerGLTest_SRCS} - LIBRARIES - MagnumDebugTools - MagnumMeshTools - MagnumPrimitives - MagnumShadersTestLib - MagnumOpenGLTester - FILES - MeshVisualizerTestFiles/bitangents-from-tangents.tga - MeshVisualizerTestFiles/defaults-instancedobjectid2D.tga - MeshVisualizerTestFiles/defaults-instancedobjectid3D.tga - MeshVisualizerTestFiles/defaults-objectid2D.tga - MeshVisualizerTestFiles/defaults-objectid3D.tga - MeshVisualizerTestFiles/defaults-primitiveid2D.tga - MeshVisualizerTestFiles/defaults-primitiveid3D.tga - MeshVisualizerTestFiles/defaults-tbn.tga - MeshVisualizerTestFiles/defaults-vertexid2D.tga - MeshVisualizerTestFiles/defaults-vertexid3D.tga - MeshVisualizerTestFiles/defaults-wireframe2D.tga - MeshVisualizerTestFiles/defaults-wireframe3D.tga - MeshVisualizerTestFiles/instancedobjectid2D.tga - MeshVisualizerTestFiles/instancedobjectid3D.tga - MeshVisualizerTestFiles/objectid-tn.tga - MeshVisualizerTestFiles/objectid2D.tga - MeshVisualizerTestFiles/objectid3D.tga - MeshVisualizerTestFiles/objectidtexture2D.tga - MeshVisualizerTestFiles/objectidtexture3D.tga - MeshVisualizerTestFiles/primitiveid-tn.tga - MeshVisualizerTestFiles/primitiveid2D.tga - MeshVisualizerTestFiles/primitiveid3D.tga - MeshVisualizerTestFiles/tbn-wide.tga - MeshVisualizerTestFiles/tbn.tga - MeshVisualizerTestFiles/vertexid-tn.tga - MeshVisualizerTestFiles/vertexid2D.tga - MeshVisualizerTestFiles/vertexid3D.tga - MeshVisualizerTestFiles/wireframe-nogeo2D.tga - MeshVisualizerTestFiles/wireframe-nogeo3D.tga - MeshVisualizerTestFiles/wireframe-instancedobjectid2D.tga - MeshVisualizerTestFiles/wireframe-instancedobjectid3D.tga - MeshVisualizerTestFiles/wireframe-nogeo-instancedobjectid2D.tga - MeshVisualizerTestFiles/wireframe-nogeo-instancedobjectid3D.tga - MeshVisualizerTestFiles/wireframe-objectidtexture2D.tga - MeshVisualizerTestFiles/wireframe-objectidtexture3D.tga - MeshVisualizerTestFiles/wireframe-perspective.tga - MeshVisualizerTestFiles/wireframe-primitiveid-tn.tga - MeshVisualizerTestFiles/wireframe-tn-smooth.tga - MeshVisualizerTestFiles/wireframe-vertexid2D.tga - MeshVisualizerTestFiles/wireframe-vertexid3D.tga - MeshVisualizerTestFiles/wireframe-wide2D.tga - MeshVisualizerTestFiles/wireframe-wide3D.tga - MeshVisualizerTestFiles/wireframe2D.tga - MeshVisualizerTestFiles/wireframe3D.tga - MeshVisualizerTestFiles/instanced-wireframe2D.tga - MeshVisualizerTestFiles/instanced-wireframe3D.tga - MeshVisualizerTestFiles/instanced-wireframe-nogeo2D.tga - MeshVisualizerTestFiles/instanced-wireframe-nogeo3D.tga - MeshVisualizerTestFiles/instanced-wireframe-tbn3D.tga - MeshVisualizerTestFiles/instanced-vertexid2D.tga - MeshVisualizerTestFiles/instanced-vertexid3D.tga - MeshVisualizerTestFiles/instanced-instancedobjectid2D.tga - MeshVisualizerTestFiles/instanced-instancedobjectid3D.tga - MeshVisualizerTestFiles/instanced-instancedobjectidtexture2D.tga - MeshVisualizerTestFiles/instanced-instancedobjectidtexture3D.tga - MeshVisualizerTestFiles/instanced-objectidtexture2D.tga - MeshVisualizerTestFiles/instanced-objectidtexture3D.tga - MeshVisualizerTestFiles/multidraw-wireframe2D.tga - MeshVisualizerTestFiles/multidraw-wireframe3D.tga - MeshVisualizerTestFiles/multidraw-wireframe-tbn3D.tga - MeshVisualizerTestFiles/multidraw-wireframe-nogeo2D.tga - MeshVisualizerTestFiles/multidraw-wireframe-nogeo3D.tga - MeshVisualizerTestFiles/multidraw-vertexid2D.tga - MeshVisualizerTestFiles/multidraw-vertexid3D.tga - MeshVisualizerTestFiles/multidraw-instancedobjectid2D.tga - MeshVisualizerTestFiles/multidraw-instancedobjectid3D.tga - MeshVisualizerTestFiles/multidraw-objectidtexture2D.tga - MeshVisualizerTestFiles/multidraw-objectidtexture3D.tga - MeshVisualizerTestFiles/skinning.tga - MeshVisualizerTestFiles/skinning-default.tga - MeshVisualizerTestFiles/skinning-instanced.tga - MeshVisualizerTestFiles/skinning-multi.tga) - target_include_directories(ShadersMeshVisualizerGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) - if(MAGNUM_BUILD_PLUGINS_STATIC) - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - target_link_libraries(ShadersMeshVisualizerGLTest PRIVATE AnyImageImporter) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - target_link_libraries(ShadersMeshVisualizerGLTest PRIVATE TgaImporter) - endif() - else() - # So the plugins get properly built when building the test - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - add_dependencies(ShadersMeshVisualizerGLTest AnyImageImporter) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - add_dependencies(ShadersMeshVisualizerGLTest TgaImporter) + set(ShadersDistanceFieldVectorGLTest_SRCS DistanceFieldVectorGLTest.cpp) + if(CORRADE_TARGET_IOS) + list(APPEND ShadersDistanceFieldVectorGLTest_SRCS TestFiles VectorTestFiles) endif() - endif() - - set(ShadersPhongGLTest_SRCS PhongGLTest.cpp) - if(CORRADE_TARGET_IOS) - list(APPEND ShadersPhongGLTest_SRCS TestFiles PhongTestFiles FlatTestFiles) - endif() - corrade_add_test(ShadersPhongGLTest ${ShadersPhongGLTest_SRCS} - LIBRARIES - MagnumDebugTools - MagnumMeshTools - MagnumPrimitives - MagnumShadersTestLib - MagnumOpenGLTester - FILES - TestFiles/alpha-texture.tga - TestFiles/ambient-texture.tga - TestFiles/diffuse-alpha-texture.tga - TestFiles/diffuse-texture.tga - TestFiles/normal-texture.tga - TestFiles/specular-texture.tga - TestFiles/alpha-mask1.0.tga - TestFiles/skinning.tga - TestFiles/skinning-default.tga - TestFiles/skinning-instanced.tga - TestFiles/skinning-multi.tga - - PhongTestFiles/colored.tga - PhongTestFiles/defaults.tga - PhongTestFiles/double-sided.tga - PhongTestFiles/instanced.tga - PhongTestFiles/instanced-textured.tga - PhongTestFiles/instanced-normal.tga - PhongTestFiles/low-light-angle.tga - PhongTestFiles/shininess-no-specular.tga - PhongTestFiles/shininess0-overflow.tga - PhongTestFiles/shininess0.tga - PhongTestFiles/shininess10.tga - PhongTestFiles/shininess80.tga - PhongTestFiles/textured-ambient.tga - PhongTestFiles/textured-diffuse-alpha.tga - PhongTestFiles/textured-diffuse-alpha-mask0.5.tga - PhongTestFiles/textured-diffuse-alpha.tga - PhongTestFiles/textured-diffuse.tga - PhongTestFiles/textured-diffuse-transformed.tga - PhongTestFiles/textured-normal.tga - PhongTestFiles/textured-normal-left.tga - PhongTestFiles/textured-normal0.0.tga - PhongTestFiles/textured-normal0.5.tga - PhongTestFiles/textured-specular.tga - PhongTestFiles/textured.tga - PhongTestFiles/vertexColor.tga - PhongTestFiles/light-directional-intensity2.tga - PhongTestFiles/light-directional.tga - PhongTestFiles/light-none.tga - PhongTestFiles/light-point-attenuated-specular.tga - PhongTestFiles/light-point-intensity10-range1.0.tga - PhongTestFiles/light-point-range1.5.tga - PhongTestFiles/light-point-specular-color.tga - PhongTestFiles/light-point.tga - PhongTestFiles/multidraw.tga - PhongTestFiles/multidraw-textured.tga + corrade_add_test(ShadersDistanceFieldVectorGLTest ${ShadersDistanceFieldVectorGLTest_SRCS} + LIBRARIES + MagnumDebugTools + MagnumMeshTools + MagnumPrimitives + MagnumShadersTestLib + MagnumOpenGLTester + FILES + TestFiles/vector-distancefield.tga - # For zero lights test (equivalency to Flat3D) - FlatTestFiles/textured3D-alpha-mask0.5.tga) - target_include_directories(ShadersPhongGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) - if(MAGNUM_BUILD_PLUGINS_STATIC) - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - target_link_libraries(ShadersPhongGLTest PRIVATE AnyImageImporter) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - target_link_libraries(ShadersPhongGLTest PRIVATE TgaImporter) + VectorTestFiles/defaults.tga + VectorTestFiles/defaults-distancefield.tga + VectorTestFiles/smooth0.1-2D.tga + VectorTestFiles/smooth0.1-3D.tga + VectorTestFiles/smooth0.2-2D.tga + VectorTestFiles/smooth0.2-3D.tga + VectorTestFiles/outline2D.tga + VectorTestFiles/outline3D.tga + VectorTestFiles/multidraw2D-distancefield.tga + VectorTestFiles/multidraw3D-distancefield.tga) + target_include_directories(ShadersDistanceFieldVectorGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) + if(MAGNUM_BUILD_PLUGINS_STATIC) + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + target_link_libraries(ShadersDistanceFieldVectorGLTest PRIVATE AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + target_link_libraries(ShadersDistanceFieldVectorGLTest PRIVATE TgaImporter) + endif() + else() + # So the plugins get properly built when building the test + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + add_dependencies(ShadersDistanceFieldVectorGLTest AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + add_dependencies(ShadersDistanceFieldVectorGLTest TgaImporter) + endif() endif() - else() - # So the plugins get properly built when building the test - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - add_dependencies(ShadersPhongGLTest AnyImageImporter) + + set(ShadersFlatGLTest_SRCS FlatGLTest.cpp) + if(CORRADE_TARGET_IOS) + list(APPEND ShadersFlatGLTest_SRCS TestFiles FlatTestFiles) endif() - if(MAGNUM_WITH_TGAIMPORTER) - add_dependencies(ShadersPhongGLTest TgaImporter) + corrade_add_test(ShadersFlatGLTest ${ShadersFlatGLTest_SRCS} + LIBRARIES + MagnumDebugTools + MagnumMeshTools + MagnumPrimitives + MagnumShadersTestLib + MagnumOpenGLTester + FILES + TestFiles/diffuse-alpha-texture.tga + TestFiles/diffuse-texture.tga + TestFiles/alpha-mask1.0.tga + TestFiles/skinning.tga + TestFiles/skinning-default.tga + TestFiles/skinning-instanced.tga + TestFiles/skinning-multi.tga + + FlatTestFiles/colored2D.tga + FlatTestFiles/colored3D.tga + FlatTestFiles/defaults.tga + FlatTestFiles/instanced2D.tga + FlatTestFiles/instanced3D.tga + FlatTestFiles/instanced-textured2D.tga + FlatTestFiles/instanced-textured3D.tga + FlatTestFiles/textured2D.tga + FlatTestFiles/textured3D.tga + FlatTestFiles/textured2D-alpha.tga + FlatTestFiles/textured3D-alpha.tga + FlatTestFiles/textured2D-alpha-mask0.5.tga + FlatTestFiles/textured3D-alpha-mask0.5.tga + FlatTestFiles/vertexColor2D.tga + FlatTestFiles/vertexColor3D.tga + FlatTestFiles/multidraw2D.tga + FlatTestFiles/multidraw3D.tga + FlatTestFiles/multidraw-textured2D.tga + FlatTestFiles/multidraw-textured3D.tga) + target_include_directories(ShadersFlatGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) + if(MAGNUM_BUILD_PLUGINS_STATIC) + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + target_link_libraries(ShadersFlatGLTest PRIVATE AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + target_link_libraries(ShadersFlatGLTest PRIVATE TgaImporter) + endif() + else() + # So the plugins get properly built when building the test + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + add_dependencies(ShadersFlatGLTest AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + add_dependencies(ShadersFlatGLTest TgaImporter) + endif() endif() - endif() - set(ShadersVectorGLTest_SRCS VectorGLTest.cpp) - if(CORRADE_TARGET_IOS) - list(APPEND ShadersVectorGLTest_SRCS TestFiles VectorTestFiles) - endif() - corrade_add_test(ShadersVectorGLTest ${ShadersVectorGLTest_SRCS} - LIBRARIES - MagnumDebugTools - MagnumMeshTools - MagnumPrimitives - MagnumShadersTestLib - MagnumOpenGLTester - FILES - TestFiles/vector.tga + corrade_add_test(ShadersGLShaderWrapperGLTest GLShaderWrapperGLTest.cpp LIBRARIES MagnumShaders MagnumOpenGLTester) - VectorTestFiles/defaults.tga - VectorTestFiles/vector2D.tga - VectorTestFiles/vector3D.tga - VectorTestFiles/multidraw2D.tga - VectorTestFiles/multidraw3D.tga) - target_include_directories(ShadersVectorGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) - if(MAGNUM_BUILD_PLUGINS_STATIC) - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - target_link_libraries(ShadersVectorGLTest PRIVATE AnyImageImporter) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - target_link_libraries(ShadersVectorGLTest PRIVATE TgaImporter) + set(ShadersMeshVisualizerGLTest_SRCS MeshVisualizerGLTest.cpp) + if(CORRADE_TARGET_IOS) + list(APPEND ShadersMeshVisualizerGLTest_SRCS FlatTestFiles MeshVisualizerTestFiles) endif() - else() - # So the plugins get properly built when building the test - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - add_dependencies(ShadersVectorGLTest AnyImageImporter) + corrade_add_test(ShadersMeshVisualizerGLTest ${ShadersMeshVisualizerGLTest_SRCS} + LIBRARIES + MagnumDebugTools + MagnumMeshTools + MagnumPrimitives + MagnumShadersTestLib + MagnumOpenGLTester + FILES + MeshVisualizerTestFiles/bitangents-from-tangents.tga + MeshVisualizerTestFiles/defaults-instancedobjectid2D.tga + MeshVisualizerTestFiles/defaults-instancedobjectid3D.tga + MeshVisualizerTestFiles/defaults-objectid2D.tga + MeshVisualizerTestFiles/defaults-objectid3D.tga + MeshVisualizerTestFiles/defaults-primitiveid2D.tga + MeshVisualizerTestFiles/defaults-primitiveid3D.tga + MeshVisualizerTestFiles/defaults-tbn.tga + MeshVisualizerTestFiles/defaults-vertexid2D.tga + MeshVisualizerTestFiles/defaults-vertexid3D.tga + MeshVisualizerTestFiles/defaults-wireframe2D.tga + MeshVisualizerTestFiles/defaults-wireframe3D.tga + MeshVisualizerTestFiles/instancedobjectid2D.tga + MeshVisualizerTestFiles/instancedobjectid3D.tga + MeshVisualizerTestFiles/objectid-tn.tga + MeshVisualizerTestFiles/objectid2D.tga + MeshVisualizerTestFiles/objectid3D.tga + MeshVisualizerTestFiles/objectidtexture2D.tga + MeshVisualizerTestFiles/objectidtexture3D.tga + MeshVisualizerTestFiles/primitiveid-tn.tga + MeshVisualizerTestFiles/primitiveid2D.tga + MeshVisualizerTestFiles/primitiveid3D.tga + MeshVisualizerTestFiles/tbn-wide.tga + MeshVisualizerTestFiles/tbn.tga + MeshVisualizerTestFiles/vertexid-tn.tga + MeshVisualizerTestFiles/vertexid2D.tga + MeshVisualizerTestFiles/vertexid3D.tga + MeshVisualizerTestFiles/wireframe-nogeo2D.tga + MeshVisualizerTestFiles/wireframe-nogeo3D.tga + MeshVisualizerTestFiles/wireframe-instancedobjectid2D.tga + MeshVisualizerTestFiles/wireframe-instancedobjectid3D.tga + MeshVisualizerTestFiles/wireframe-nogeo-instancedobjectid2D.tga + MeshVisualizerTestFiles/wireframe-nogeo-instancedobjectid3D.tga + MeshVisualizerTestFiles/wireframe-objectidtexture2D.tga + MeshVisualizerTestFiles/wireframe-objectidtexture3D.tga + MeshVisualizerTestFiles/wireframe-perspective.tga + MeshVisualizerTestFiles/wireframe-primitiveid-tn.tga + MeshVisualizerTestFiles/wireframe-tn-smooth.tga + MeshVisualizerTestFiles/wireframe-vertexid2D.tga + MeshVisualizerTestFiles/wireframe-vertexid3D.tga + MeshVisualizerTestFiles/wireframe-wide2D.tga + MeshVisualizerTestFiles/wireframe-wide3D.tga + MeshVisualizerTestFiles/wireframe2D.tga + MeshVisualizerTestFiles/wireframe3D.tga + MeshVisualizerTestFiles/instanced-wireframe2D.tga + MeshVisualizerTestFiles/instanced-wireframe3D.tga + MeshVisualizerTestFiles/instanced-wireframe-nogeo2D.tga + MeshVisualizerTestFiles/instanced-wireframe-nogeo3D.tga + MeshVisualizerTestFiles/instanced-wireframe-tbn3D.tga + MeshVisualizerTestFiles/instanced-vertexid2D.tga + MeshVisualizerTestFiles/instanced-vertexid3D.tga + MeshVisualizerTestFiles/instanced-instancedobjectid2D.tga + MeshVisualizerTestFiles/instanced-instancedobjectid3D.tga + MeshVisualizerTestFiles/instanced-instancedobjectidtexture2D.tga + MeshVisualizerTestFiles/instanced-instancedobjectidtexture3D.tga + MeshVisualizerTestFiles/instanced-objectidtexture2D.tga + MeshVisualizerTestFiles/instanced-objectidtexture3D.tga + MeshVisualizerTestFiles/multidraw-wireframe2D.tga + MeshVisualizerTestFiles/multidraw-wireframe3D.tga + MeshVisualizerTestFiles/multidraw-wireframe-tbn3D.tga + MeshVisualizerTestFiles/multidraw-wireframe-nogeo2D.tga + MeshVisualizerTestFiles/multidraw-wireframe-nogeo3D.tga + MeshVisualizerTestFiles/multidraw-vertexid2D.tga + MeshVisualizerTestFiles/multidraw-vertexid3D.tga + MeshVisualizerTestFiles/multidraw-instancedobjectid2D.tga + MeshVisualizerTestFiles/multidraw-instancedobjectid3D.tga + MeshVisualizerTestFiles/multidraw-objectidtexture2D.tga + MeshVisualizerTestFiles/multidraw-objectidtexture3D.tga + MeshVisualizerTestFiles/skinning.tga + MeshVisualizerTestFiles/skinning-default.tga + MeshVisualizerTestFiles/skinning-instanced.tga + MeshVisualizerTestFiles/skinning-multi.tga) + target_include_directories(ShadersMeshVisualizerGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) + if(MAGNUM_BUILD_PLUGINS_STATIC) + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + target_link_libraries(ShadersMeshVisualizerGLTest PRIVATE AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + target_link_libraries(ShadersMeshVisualizerGLTest PRIVATE TgaImporter) + endif() + else() + # So the plugins get properly built when building the test + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + add_dependencies(ShadersMeshVisualizerGLTest AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + add_dependencies(ShadersMeshVisualizerGLTest TgaImporter) + endif() endif() - if(MAGNUM_WITH_TGAIMPORTER) - add_dependencies(ShadersVectorGLTest TgaImporter) + + set(ShadersPhongGLTest_SRCS PhongGLTest.cpp) + if(CORRADE_TARGET_IOS) + list(APPEND ShadersPhongGLTest_SRCS TestFiles PhongTestFiles FlatTestFiles) endif() - endif() + corrade_add_test(ShadersPhongGLTest ${ShadersPhongGLTest_SRCS} + LIBRARIES + MagnumDebugTools + MagnumMeshTools + MagnumPrimitives + MagnumShadersTestLib + MagnumOpenGLTester + FILES + TestFiles/alpha-texture.tga + TestFiles/ambient-texture.tga + TestFiles/diffuse-alpha-texture.tga + TestFiles/diffuse-texture.tga + TestFiles/normal-texture.tga + TestFiles/specular-texture.tga + TestFiles/alpha-mask1.0.tga + TestFiles/skinning.tga + TestFiles/skinning-default.tga + TestFiles/skinning-instanced.tga + TestFiles/skinning-multi.tga - set(ShadersVertexColorGLTest_SRCS VertexColorGLTest.cpp) - if(CORRADE_TARGET_IOS) - list(APPEND ShadersVertexColorGLTest_SRCS FlatTestFiles VertexColorTestFiles) - endif() - corrade_add_test(ShadersVertexColorGLTest ${ShadersVertexColorGLTest_SRCS} - LIBRARIES - MagnumDebugTools - MagnumMeshTools - MagnumPrimitives - MagnumShadersTestLib - MagnumOpenGLTester - FILES - FlatTestFiles/defaults.tga + PhongTestFiles/colored.tga + PhongTestFiles/defaults.tga + PhongTestFiles/double-sided.tga + PhongTestFiles/instanced.tga + PhongTestFiles/instanced-textured.tga + PhongTestFiles/instanced-normal.tga + PhongTestFiles/low-light-angle.tga + PhongTestFiles/shininess-no-specular.tga + PhongTestFiles/shininess0-overflow.tga + PhongTestFiles/shininess0.tga + PhongTestFiles/shininess10.tga + PhongTestFiles/shininess80.tga + PhongTestFiles/textured-ambient.tga + PhongTestFiles/textured-diffuse-alpha.tga + PhongTestFiles/textured-diffuse-alpha-mask0.5.tga + PhongTestFiles/textured-diffuse-alpha.tga + PhongTestFiles/textured-diffuse.tga + PhongTestFiles/textured-diffuse-transformed.tga + PhongTestFiles/textured-normal.tga + PhongTestFiles/textured-normal-left.tga + PhongTestFiles/textured-normal0.0.tga + PhongTestFiles/textured-normal0.5.tga + PhongTestFiles/textured-specular.tga + PhongTestFiles/textured.tga + PhongTestFiles/vertexColor.tga + PhongTestFiles/light-directional-intensity2.tga + PhongTestFiles/light-directional.tga + PhongTestFiles/light-none.tga + PhongTestFiles/light-point-attenuated-specular.tga + PhongTestFiles/light-point-intensity10-range1.0.tga + PhongTestFiles/light-point-range1.5.tga + PhongTestFiles/light-point-specular-color.tga + PhongTestFiles/light-point.tga + PhongTestFiles/multidraw.tga + PhongTestFiles/multidraw-textured.tga - VertexColorTestFiles/vertexColor2D.tga - VertexColorTestFiles/vertexColor3D.tga - VertexColorTestFiles/multidraw2D.tga - VertexColorTestFiles/multidraw3D.tga) - target_include_directories(ShadersVertexColorGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) - if(MAGNUM_BUILD_PLUGINS_STATIC) - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - target_link_libraries(ShadersVertexColorGLTest PRIVATE AnyImageImporter) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - target_link_libraries(ShadersVertexColorGLTest PRIVATE TgaImporter) - endif() - else() - # So the plugins get properly built when building the test - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - add_dependencies(ShadersVertexColorGLTest AnyImageImporter) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - add_dependencies(ShadersVertexColorGLTest TgaImporter) + # For zero lights test (equivalency to Flat3D) + FlatTestFiles/textured3D-alpha-mask0.5.tga) + target_include_directories(ShadersPhongGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) + if(MAGNUM_BUILD_PLUGINS_STATIC) + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + target_link_libraries(ShadersPhongGLTest PRIVATE AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + target_link_libraries(ShadersPhongGLTest PRIVATE TgaImporter) + endif() + else() + # So the plugins get properly built when building the test + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + add_dependencies(ShadersPhongGLTest AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + add_dependencies(ShadersPhongGLTest TgaImporter) + endif() endif() - endif() - corrade_add_test(ShadersGLBenchmark ShadersGLBenchmark.cpp - LIBRARIES - MagnumDebugTools - MagnumMeshTools - MagnumPrimitives - MagnumShaders - MagnumOpenGLTester - FILES - BenchmarkFiles/trivial.tga) - target_include_directories(ShadersGLBenchmark PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) - if(MAGNUM_BUILD_PLUGINS_STATIC) - if(MAGNUM_WITH_ANYIMAGEIMPORTER) - target_link_libraries(ShadersGLBenchmark PRIVATE AnyImageImporter) - endif() - if(MAGNUM_WITH_TGAIMPORTER) - target_link_libraries(ShadersGLBenchmark PRIVATE TgaImporter) + set(ShadersVectorGLTest_SRCS VectorGLTest.cpp) + if(CORRADE_TARGET_IOS) + list(APPEND ShadersVectorGLTest_SRCS TestFiles VectorTestFiles) endif() - endif() + corrade_add_test(ShadersVectorGLTest ${ShadersVectorGLTest_SRCS} + LIBRARIES + MagnumDebugTools + MagnumMeshTools + MagnumPrimitives + MagnumShadersTestLib + MagnumOpenGLTester + FILES + TestFiles/vector.tga - if(CORRADE_TARGET_IOS) - set_source_files_properties( - TestFiles - VectorTestFiles - FlatTestFiles - MeshVisualizerTestFiles - PhongTestFiles - VectorTestFiles - VertexColorTestFiles - PROPERTIES MACOSX_PACKAGE_LOCATION Resources) - endif() + VectorTestFiles/defaults.tga + VectorTestFiles/vector2D.tga + VectorTestFiles/vector3D.tga + VectorTestFiles/multidraw2D.tga + VectorTestFiles/multidraw3D.tga) + target_include_directories(ShadersVectorGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) + if(MAGNUM_BUILD_PLUGINS_STATIC) + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + target_link_libraries(ShadersVectorGLTest PRIVATE AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + target_link_libraries(ShadersVectorGLTest PRIVATE TgaImporter) + endif() + else() + # So the plugins get properly built when building the test + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + add_dependencies(ShadersVectorGLTest AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + add_dependencies(ShadersVectorGLTest TgaImporter) + endif() + endif() - if(NOT MAGNUM_TARGET_GLES2) - set(ShadersLineGLTest_SRCS LineGLTest.cpp) + set(ShadersVertexColorGLTest_SRCS VertexColorGLTest.cpp) if(CORRADE_TARGET_IOS) - list(APPEND ShadersLineGLTest_SRCS TestFiles LineTestFiles) + list(APPEND ShadersVertexColorGLTest_SRCS FlatTestFiles VertexColorTestFiles) endif() - corrade_add_test(ShadersLineGLTest ${ShadersLineGLTest_SRCS} + corrade_add_test(ShadersVertexColorGLTest ${ShadersVertexColorGLTest_SRCS} LIBRARIES MagnumDebugTools MagnumMeshTools @@ -478,48 +413,116 @@ if(MAGNUM_BUILD_GL_TESTS) MagnumShadersTestLib MagnumOpenGLTester FILES - LineTestFiles/caps-butt-joins-bevel.tga - LineTestFiles/caps-butt-joins-miter-flat.tga - LineTestFiles/caps-round-joins-miter.tga - LineTestFiles/caps-square-joins-bevel.tga - LineTestFiles/caps-square-joins-miter-flat.tga - LineTestFiles/caps-square-joins-miter-limit-36.tga - LineTestFiles/caps-square-joins-miter-limit-70deg.tga - LineTestFiles/caps-square-joins-miter-limit-91deg.tga - LineTestFiles/caps-square-joins-miter.tga - LineTestFiles/caps-triangle-joins-bevel.tga - LineTestFiles/cube3D-caps-butt-joins-bevel.tga - LineTestFiles/cube3D-caps-square-joins-miter.tga - LineTestFiles/cube3D-depth.tga - LineTestFiles/cube3D-flat-single-pixel.tga - LineTestFiles/defaults.tga - LineTestFiles/instanced.tga - LineTestFiles/multidraw.tga - LineTestFiles/perspective3D.tga - LineTestFiles/vertex-color.tga) - target_include_directories(ShadersLineGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) + FlatTestFiles/defaults.tga + + VertexColorTestFiles/vertexColor2D.tga + VertexColorTestFiles/vertexColor3D.tga + VertexColorTestFiles/multidraw2D.tga + VertexColorTestFiles/multidraw3D.tga) + target_include_directories(ShadersVertexColorGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) if(MAGNUM_BUILD_PLUGINS_STATIC) if(MAGNUM_WITH_ANYIMAGEIMPORTER) - target_link_libraries(ShadersLineGLTest PRIVATE AnyImageImporter) + target_link_libraries(ShadersVertexColorGLTest PRIVATE AnyImageImporter) endif() if(MAGNUM_WITH_TGAIMPORTER) - target_link_libraries(ShadersLineGLTest PRIVATE TgaImporter) + target_link_libraries(ShadersVertexColorGLTest PRIVATE TgaImporter) endif() else() # So the plugins get properly built when building the test if(MAGNUM_WITH_ANYIMAGEIMPORTER) - add_dependencies(ShadersLineGLTest AnyImageImporter) + add_dependencies(ShadersVertexColorGLTest AnyImageImporter) endif() if(MAGNUM_WITH_TGAIMPORTER) - add_dependencies(ShadersLineGLTest TgaImporter) + add_dependencies(ShadersVertexColorGLTest TgaImporter) + endif() + endif() + + corrade_add_test(ShadersGLBenchmark ShadersGLBenchmark.cpp + LIBRARIES + MagnumDebugTools + MagnumMeshTools + MagnumPrimitives + MagnumShaders + MagnumOpenGLTester + FILES + BenchmarkFiles/trivial.tga) + target_include_directories(ShadersGLBenchmark PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) + if(MAGNUM_BUILD_PLUGINS_STATIC) + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + target_link_libraries(ShadersGLBenchmark PRIVATE AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + target_link_libraries(ShadersGLBenchmark PRIVATE TgaImporter) endif() endif() if(CORRADE_TARGET_IOS) set_source_files_properties( - LineTestFiles + TestFiles + VectorTestFiles + FlatTestFiles + MeshVisualizerTestFiles + PhongTestFiles + VectorTestFiles + VertexColorTestFiles PROPERTIES MACOSX_PACKAGE_LOCATION Resources) endif() + + if(NOT MAGNUM_TARGET_GLES2) + set(ShadersLineGLTest_SRCS LineGLTest.cpp) + if(CORRADE_TARGET_IOS) + list(APPEND ShadersLineGLTest_SRCS TestFiles LineTestFiles) + endif() + corrade_add_test(ShadersLineGLTest ${ShadersLineGLTest_SRCS} + LIBRARIES + MagnumDebugTools + MagnumMeshTools + MagnumPrimitives + MagnumShadersTestLib + MagnumOpenGLTester + FILES + LineTestFiles/caps-butt-joins-bevel.tga + LineTestFiles/caps-butt-joins-miter-flat.tga + LineTestFiles/caps-round-joins-miter.tga + LineTestFiles/caps-square-joins-bevel.tga + LineTestFiles/caps-square-joins-miter-flat.tga + LineTestFiles/caps-square-joins-miter-limit-36.tga + LineTestFiles/caps-square-joins-miter-limit-70deg.tga + LineTestFiles/caps-square-joins-miter-limit-91deg.tga + LineTestFiles/caps-square-joins-miter.tga + LineTestFiles/caps-triangle-joins-bevel.tga + LineTestFiles/cube3D-caps-butt-joins-bevel.tga + LineTestFiles/cube3D-caps-square-joins-miter.tga + LineTestFiles/cube3D-depth.tga + LineTestFiles/cube3D-flat-single-pixel.tga + LineTestFiles/defaults.tga + LineTestFiles/instanced.tga + LineTestFiles/multidraw.tga + LineTestFiles/perspective3D.tga + LineTestFiles/vertex-color.tga) + target_include_directories(ShadersLineGLTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) + if(MAGNUM_BUILD_PLUGINS_STATIC) + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + target_link_libraries(ShadersLineGLTest PRIVATE AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + target_link_libraries(ShadersLineGLTest PRIVATE TgaImporter) + endif() + else() + # So the plugins get properly built when building the test + if(MAGNUM_WITH_ANYIMAGEIMPORTER) + add_dependencies(ShadersLineGLTest AnyImageImporter) + endif() + if(MAGNUM_WITH_TGAIMPORTER) + add_dependencies(ShadersLineGLTest TgaImporter) + endif() + endif() + + if(CORRADE_TARGET_IOS) + set_source_files_properties( + LineTestFiles + PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + endif() + endif() endif() endif() - diff --git a/src/Magnum/Shaders/Vector.h b/src/Magnum/Shaders/Vector.h index ab19b2a1e..4501c156b 100644 --- a/src/Magnum/Shaders/Vector.h +++ b/src/Magnum/Shaders/Vector.h @@ -33,7 +33,7 @@ #include "Magnum/Magnum.h" #include "Magnum/Math/Color.h" -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) #include #include "Magnum/Shaders/VectorGL.h" @@ -189,7 +189,7 @@ struct VectorMaterialUniform { #endif }; -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) /** @brief @copybrief Shaders::VectorGL * @m_deprecated_since_latest Use @ref Shaders::VectorGL "VectorGL" instead. */ diff --git a/src/Magnum/Shaders/VectorGL.h b/src/Magnum/Shaders/VectorGL.h index 3bbf67f96..c3439c46b 100644 --- a/src/Magnum/Shaders/VectorGL.h +++ b/src/Magnum/Shaders/VectorGL.h @@ -27,11 +27,16 @@ DEALINGS IN THE SOFTWARE. */ +#ifdef MAGNUM_TARGET_GL /** @file * @brief Class @ref Magnum::Shaders::VectorGL, typedef @ref Magnum::Shaders::VectorGL2D, @ref Magnum::Shaders::VectorGL3D * @m_since_latest */ +#endif + +#include "Magnum/configure.h" +#ifdef MAGNUM_TARGET_GL #include #include "Magnum/DimensionTraits.h" @@ -78,6 +83,10 @@ working on the framebuffer, you need to enable @ref GL::Renderer::Feature::Blending and set up the blending function. See @ref GL::Renderer::setBlendFunction() for details. +@note This class is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. + @section Shaders-VectorGL-usage Example usage Common mesh setup: @@ -837,12 +846,20 @@ template class VectorGL::CompileState: publi /** @brief Two-dimensional vector OpenGL shader @m_since_latest + +@note This typedef is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. */ typedef VectorGL<2> VectorGL2D; /** @brief Three-dimensional vector OpenGL shader @m_since_latest + +@note This typedef is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. */ typedef VectorGL<3> VectorGL3D; @@ -860,5 +877,8 @@ namespace Implementation { #endif }} +#else +#error this header is available only in the OpenGL build +#endif #endif diff --git a/src/Magnum/Shaders/VertexColor.h b/src/Magnum/Shaders/VertexColor.h index 10c16ee50..2515d52d7 100644 --- a/src/Magnum/Shaders/VertexColor.h +++ b/src/Magnum/Shaders/VertexColor.h @@ -26,7 +26,7 @@ DEALINGS IN THE SOFTWARE. */ -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) /** @file * @brief Typedef @ref Magnum::Shaders::VertexColor, alias @ref Magnum::Shaders::VertexColor2D, @ref Magnum::Shaders::VertexColor3D * @m_deprecated_since_latest Use @ref Magnum/Shaders/VertexColorGL.h, the @@ -37,7 +37,7 @@ #include "Magnum/configure.h" -#ifdef MAGNUM_BUILD_DEPRECATED +#if defined(MAGNUM_TARGET_GL) && defined(MAGNUM_BUILD_DEPRECATED) #include #include "Magnum/Shaders/VertexColorGL.h" @@ -64,8 +64,10 @@ typedef CORRADE_DEPRECATED("use VertexColorGL2D instead") VertexColorGL2D Vertex typedef CORRADE_DEPRECATED("use VertexColorGL3D instead") VertexColorGL3D VertexColor3D; }} -#else +#elif defined(MAGNUM_TARGET_GL) #error use Magnum/Shaders/VertexColorGL.h, the VertexColorGL class and related typedefs instead +#else +#error this header is available only in the OpenGL build #endif #endif diff --git a/src/Magnum/Shaders/VertexColorGL.h b/src/Magnum/Shaders/VertexColorGL.h index 5a7143b56..7c027200c 100644 --- a/src/Magnum/Shaders/VertexColorGL.h +++ b/src/Magnum/Shaders/VertexColorGL.h @@ -27,11 +27,16 @@ DEALINGS IN THE SOFTWARE. */ +#ifdef MAGNUM_TARGET_GL /** @file * @brief Class @ref Magnum::Shaders::VertexColorGL, typedef @ref Magnum::Shaders::VertexColorGL2D, @ref Magnum::Shaders::VertexColorGL3D * @m_since_latest */ +#endif + +#include "Magnum/configure.h" +#ifdef MAGNUM_TARGET_GL #include #include "Magnum/DimensionTraits.h" @@ -77,6 +82,10 @@ working on the framebuffer, you need to enable @ref GL::Renderer::Feature::Blending and set up the blending function. See @ref GL::Renderer::setBlendFunction() for details. +@note This class is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. + @section Shaders-VertexColorGL-example Example usage Common mesh setup. The shader accepts either three- or four-component color @@ -558,12 +567,20 @@ template class VertexColorGL::CompileState: /** @brief 2D vertex color OpenGL shader @m_since_latest + +@note This typedef is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. */ typedef VertexColorGL<2> VertexColorGL2D; /** @brief 3D vertex color OpenGL shader @m_since_latest + +@note This typedef is available only if Magnum is compiled with + @ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features + for more information. */ typedef VertexColorGL<3> VertexColorGL3D; @@ -581,5 +598,8 @@ namespace Implementation { #endif }} +#else +#error this header is available only in the OpenGL build +#endif #endif