Skip to content

Conversation

@PetiteViking
Copy link
Contributor

Before I go, there is some code which I think would be nice to have available for the public. Unfortunately, I will not have time to put too much time into this so maybe we can make it a combined effort.

The code I added here includes some volume operations such as reduction, min/max, etc, implemented using compute shaders and the feature level-sets (FLS), also implemented using compute shaders.

Everything works well enough to use it for standard cases (floating-point input fields). There are some things though that might need some attention.

One things that comes to my mind is the injection of implicit functions into the shader code for FLS. Right now I have a number of placeholders and do a simple string replace. Maybe this is better done with Peter's new shader snippet thingy.

Another thing is that I have also not handled anything other than 32 bit floating point volumes as input since that is all I ever needed. Maybe dispatching should be added here.

In the shader code for volume reduction you can see that I tried using different samplers for different input data. The code compiles fine but the shader won't work for certain inputs (IIRC integer >16 bit).

I wrote a fair bit of documentation but I haven't checked for completeness.

@github-actions
Copy link

github-actions bot commented Jan 23, 2025

Cpp-Linter Report ⚠️

Some files did not pass the configured checks!

clang-format (v18.1.3) reports: 2 file(s) not formatted
  • misc/computeutils/src/algorithm/volumechannelsplitgl.cpp
  • multivis/featurelevelsetsgl/src/processors/featurelevelsetprocessorgl.cpp
clang-tidy (v18.1.3) reports: 67 concern(s)
  • misc/computeutils/include/inviwo/computeutils/algorithm/volumechannelsplitgl.h:42:35: warning: [cppcoreguidelines-special-member-functions]

    class 'VolumeChannelSplitGL' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator

       42 | class IVW_MODULE_COMPUTEUTILS_API VolumeChannelSplitGL {
          |                                   ^
  • misc/computeutils/include/inviwo/computeutils/algorithm/volumechannelsplitgl.h:45:5: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

       45 |     VolumeChannelSplitGL(Callback C) : VolumeChannelSplitGL() {
          |     ^
          |     explicit 
  • misc/computeutils/include/inviwo/computeutils/algorithm/volumeminmaxgl.h:43:35: warning: [cppcoreguidelines-special-member-functions]

    class 'VolumeMinMaxGL' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator

       43 | class IVW_MODULE_COMPUTEUTILS_API VolumeMinMaxGL {
          |                                   ^
  • misc/computeutils/include/inviwo/computeutils/algorithm/volumenormalizationgl.h:44:35: warning: [cppcoreguidelines-special-member-functions]

    class 'VolumeNormalizationGL' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator

       44 | class IVW_MODULE_COMPUTEUTILS_API VolumeNormalizationGL {
          |                                   ^
  • misc/computeutils/include/inviwo/computeutils/algorithm/volumenormalizationgl.h:47:5: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

       47 |     VolumeNormalizationGL(Callback C) : VolumeNormalizationGL() {
          |     ^
          |     explicit 
  • misc/computeutils/include/inviwo/computeutils/algorithm/volumereductiongl.h:38:12: warning: [performance-enum-size]

    enum 'ReductionOperator' uses a larger base type ('int', size: 4 bytes) than necessary for its value set, consider using 'std::uint8_t' (1 byte) as the base type to reduce its size

       38 | enum class ReductionOperator { Min = 0, Max = 1, Sum = 2, None = 3 };
          |            ^
  • misc/computeutils/include/inviwo/computeutils/algorithm/volumereductiongl.h:39:12: warning: [performance-enum-size]

    enum 'DisregardingStatus' uses a larger base type ('int', size: 4 bytes) than necessary for its value set, consider using 'std::uint8_t' (1 byte) as the base type to reduce its size

       39 | enum class DisregardingStatus { Off = 0, On = 1, Unset = 2 };
          |            ^
  • misc/computeutils/include/inviwo/computeutils/algorithm/volumereductiongl.h:75:35: warning: [cppcoreguidelines-special-member-functions]

    class 'VolumeReductionGL' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator

       75 | class IVW_MODULE_COMPUTEUTILS_API VolumeReductionGL {
          |                                   ^
  • misc/computeutils/include/inviwo/computeutils/algorithm/volumeshrinktonormalrangegl.h:43:35: warning: [cppcoreguidelines-special-member-functions]

    class 'VolumeShrinkToNormalRangeGL' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator

       43 | class IVW_MODULE_COMPUTEUTILS_API VolumeShrinkToNormalRangeGL {
          |                                   ^
  • misc/computeutils/include/inviwo/computeutils/algorithm/volumeshrinktonormalrangegl.h:46:5: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

       46 |     VolumeShrinkToNormalRangeGL(Callback C) : VolumeShrinkToNormalRangeGL() {
          |     ^
          |     explicit 
  • misc/computeutils/include/inviwo/computeutils/computeutilsmodule.h:36:35: warning: [cppcoreguidelines-special-member-functions]

    class 'ComputeUtilsModule' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator

       36 | class IVW_MODULE_COMPUTEUTILS_API ComputeUtilsModule : public InviwoModule {
          |                                   ^
  • misc/computeutils/include/inviwo/computeutils/computeutilsmodule.h:38:5: warning: [google-explicit-constructor]

    single-argument constructors must be marked explicit to avoid unintentional implicit conversions

       38 |     ComputeUtilsModule(InviwoApplication* app);
          |     ^
          |     explicit 
  • misc/computeutils/include/inviwo/computeutils/processors/volumechannelsplitglprocessor.h:51:35: warning: [cppcoreguidelines-special-member-functions]

    class 'VolumeChannelSplitGLProcessor' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator

       51 | class IVW_MODULE_COMPUTEUTILS_API VolumeChannelSplitGLProcessor : public Processor {
          |                                   ^
  • misc/computeutils/include/inviwo/computeutils/processors/volumeminmaxglprocessor.h:41:35: warning: [cppcoreguidelines-special-member-functions]

    class 'VolumeMinMaxGLProcessor' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator

       41 | class IVW_MODULE_COMPUTEUTILS_API VolumeMinMaxGLProcessor : public Processor {
          |                                   ^
  • misc/computeutils/include/inviwo/computeutils/processors/volumenormalizationglprocessor.h:47:35: warning: [cppcoreguidelines-special-member-functions]

    class 'VolumeNormalizationGLProcessor' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator

       47 | class IVW_MODULE_COMPUTEUTILS_API VolumeNormalizationGLProcessor : public Processor {
          |                                   ^
  • misc/computeutils/include/inviwo/computeutils/processors/volumereductionglprocessor.h:55:35: warning: [cppcoreguidelines-special-member-functions]

    class 'VolumeReductionGLProcessor' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator

       55 | class IVW_MODULE_COMPUTEUTILS_API VolumeReductionGLProcessor : public Processor {
          |                                   ^
  • misc/computeutils/include/inviwo/computeutils/processors/volumeshrinktonormalrangeglprocessor.h:41:35: warning: [cppcoreguidelines-special-member-functions]

    class 'VolumeShrinkToNormalRangeGLProcessor' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator

       41 | class IVW_MODULE_COMPUTEUTILS_API VolumeShrinkToNormalRangeGLProcessor : public Processor {
          |                                   ^
  • misc/computeutils/src/algorithm/volumechannelsplitgl.cpp:48:35: warning: [performance-unnecessary-value-param]

    the parameter 'volume' is copied for each invocation but only used as a const reference; consider making it a const reference

       48 |     std::shared_ptr<const Volume> volume) {
          |                                   ^
          |     const                        &
  • misc/computeutils/src/algorithm/volumechannelsplitgl.cpp:108:15: warning: [performance-for-range-copy]

    loop variable is copied but only used as const reference; consider making it a const reference

      108 |     for (auto outVolume : outVolumes) {
          |               ^
          |          const  &
  • misc/computeutils/src/algorithm/volumeminmaxgl.cpp:33:60: warning: [performance-unnecessary-value-param]

    the parameter 'volume' is copied for each invocation but only used as a const reference; consider making it a const reference

       33 | dvec2 VolumeMinMaxGL::minmax(std::shared_ptr<const Volume> volume,
          |                                                            ^
          |                              const                        &
  • misc/computeutils/src/algorithm/volumereductiongl.cpp:54:81: warning: [performance-unnecessary-value-param]

    the parameter 'volume' is copied for each invocation but only used as a const reference; consider making it a const reference

       54 | std::shared_ptr<Volume> VolumeReductionGL::reduce(std::shared_ptr<const Volume> volume,
          |                                                                                 ^
          |                                                   const                        &
  • misc/computeutils/src/algorithm/volumereductiongl.cpp:137:23: warning: [performance-unnecessary-value-param]

    parameter 'volume' is passed by value and only copied once; consider moving it to avoid unnecessary copies

       45 |     auto res = reduce(volume, op, disregardingStatus, range);
          |                       ^     
          |                       std::move( )
  • misc/computeutils/src/algorithm/volumereductiongl.cpp:164:70: warning: [performance-unnecessary-value-param]

    the parameter 'volume' is copied for each invocation but only used as a const reference; consider making it a const reference

      164 | void VolumeReductionGL::setSamplerType(std::shared_ptr<const Volume> volume) {
          |                                                                      ^
          |                                        const                        &
  • misc/computeutils/src/processors/volumeminmaxglprocessor.cpp:93:9: warning: [misc-const-correctness]

    variable 'l' of type 'NetworkLock' can be declared 'const'

       93 |         NetworkLock l;
          |         ^
          |                     const 
  • misc/computeutils/tests/unittests/computeutils-unittest-main.cpp:43:5: warning: [bugprone-exception-escape]

    an exception may be thrown in function 'main' which should not throw exceptions

       43 | int main(int argc, char** argv) {
          |     ^
  • misc/computeutils/tests/unittests/computeutils-unittest-main.cpp:44:5: warning: [google-build-using-namespace]

    do not use namespace using-directives; use using-declarations instead

       44 |     using namespace inviwo;
          |     ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/featurelevelsetsglmodule.h:31:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h' file not found

       31 | #include <inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/featurelevelsetsglmodule.h:36:41: warning: [cppcoreguidelines-avoid-non-const-global-variables]

    variable 'FeatureLevelSetsGLModule' is non-const and globally accessible, consider making it const

       36 | class IVW_MODULE_FEATURELEVELSETSGL_API FeatureLevelSetsGLModule : public InviwoModule {
          |                                         ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/processors/featurelevelsetprocessorgl.h:32:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h' file not found

       32 | #include <inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/processors/featurelevelsetprocessorgl.h:48:41: warning: [cppcoreguidelines-avoid-non-const-global-variables]

    variable 'FeatureLevelSetProcessorGL' is non-const and globally accessible, consider making it const

       48 | class IVW_MODULE_FEATURELEVELSETSGL_API FeatureLevelSetProcessorGL : public Processor,
          |                                         ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/properties/implicitfunctiontraitproperty.h:31:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h' file not found

       31 | #include <inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/properties/implicitfunctiontraitproperty.h:40:41: warning: [cppcoreguidelines-avoid-non-const-global-variables]

    variable 'ImplicitFunctionTraitProperty' is non-const and globally accessible, consider making it const

       40 | class IVW_MODULE_FEATURELEVELSETSGL_API ImplicitFunctionTraitProperty : public TraitProperty {
          |                                         ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/properties/pointtraitproperty.h:31:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h' file not found

       31 | #include <inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/properties/pointtraitproperty.h:36:41: warning: [cppcoreguidelines-avoid-non-const-global-variables]

    variable 'PointTraitProperty' is non-const and globally accessible, consider making it const

       36 | class IVW_MODULE_FEATURELEVELSETSGL_API PointTraitProperty : public TraitProperty {
          |                                         ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/properties/rangetraitproperty.h:31:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h' file not found

       31 | #include <inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/properties/rangetraitproperty.h:36:41: warning: [cppcoreguidelines-avoid-non-const-global-variables]

    variable 'RangeTraitProperty' is non-const and globally accessible, consider making it const

       36 | class IVW_MODULE_FEATURELEVELSETSGL_API RangeTraitProperty : public TraitProperty {
          |                                         ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/properties/traitproperty.h:31:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h' file not found

       31 | #include <inviwo/featurelevelsetsgl/featurelevelsetsglmoduledefine.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/properties/traitproperty.h:36:41: warning: [cppcoreguidelines-avoid-non-const-global-variables]

    variable 'TraitProperty' is non-const and globally accessible, consider making it const

       36 | class IVW_MODULE_FEATURELEVELSETSGL_API TraitProperty : public CompositeProperty {
          |                                         ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:1:1: warning: [modernize-concat-nested-namespaces]

    nested namespaces can be concatenated

        1 | namespace inviwo {
          | ^~~~~~~~~~~~~~~~~~
        2 | namespace util {
          | ~~~~~~~~~~~~~~
          | namespace inviwo::util
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:3:12: warning: [performance-enum-size]

    enum 'DistanceMetric' uses a larger base type ('int', size: 4 bytes) than necessary for its value set, consider using 'std::uint8_t' (1 byte) as the base type to reduce its size

        3 | enum class DistanceMetric { Euclidean, Manhattan, Minkowski, SquaredSum };
          |            ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:17:27: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       17 | T minkowskiDistance(const std::vector<T>& a, const std::vector<T>& b, const T order) {
          |                           ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:17:52: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       17 | T minkowskiDistance(const std::vector<T>& a, const std::vector<T>& b, const T order) {
          |                                                    ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:19:12: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       19 |     return std::pow(std::inner_product(a.begin(), a.end(), b.begin(), T(0), std::plus<>(),
          |            ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:19:21: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       19 |     return std::pow(std::inner_product(a.begin(), a.end(), b.begin(), T(0), std::plus<>(),
          |                     ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:19:77: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       19 |     return std::pow(std::inner_product(a.begin(), a.end(), b.begin(), T(0), std::plus<>(),
          |                                                                             ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:19:87: error: [clang-diagnostic-error]

    expected expression

       19 |     return std::pow(std::inner_product(a.begin(), a.end(), b.begin(), T(0), std::plus<>(),
          |                                                                                       ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:19:89: error: [clang-diagnostic-error]

    expected expression

       19 |     return std::pow(std::inner_product(a.begin(), a.end(), b.begin(), T(0), std::plus<>(),
          |                                                                                         ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:20:67: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       20 |                                        [order](T x, T y) { return std::pow(y - x, order); }),
          |                                                                   ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:34:27: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       34 | T manhattanDistance(const std::vector<T>& a, const std::vector<T>& b) {
          |                           ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:34:52: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       34 | T manhattanDistance(const std::vector<T>& a, const std::vector<T>& b) {
          |                                                    ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:48:27: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       48 | T euclideanDistance(const std::vector<T>& a, const std::vector<T>& b) {
          |                           ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:48:52: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       48 | T euclideanDistance(const std::vector<T>& a, const std::vector<T>& b) {
          |                                                    ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:62:28: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       62 | T squaredSumDistance(const std::vector<T>& a, const std::vector<T>& b) {
          |                            ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:62:53: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       62 | T squaredSumDistance(const std::vector<T>& a, const std::vector<T>& b) {
          |                                                     ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:64:12: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       64 |     return std::inner_product(a.begin(), a.end(), b.begin(), T(0), std::plus<>(),
          |            ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:64:68: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       64 |     return std::inner_product(a.begin(), a.end(), b.begin(), T(0), std::plus<>(),
          |                                                                    ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:64:78: error: [clang-diagnostic-error]

    expected expression

       64 |     return std::inner_product(a.begin(), a.end(), b.begin(), T(0), std::plus<>(),
          |                                                                              ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:64:80: error: [clang-diagnostic-error]

    expected expression

       64 |     return std::inner_product(a.begin(), a.end(), b.begin(), T(0), std::plus<>(),
          |                                                                                ^
  • multivis/featurelevelsetsgl/include/inviwo/featurelevelsetsgl/util/util.h:65:53: error: [clang-diagnostic-error]

    use of undeclared identifier 'std'

       65 |                               [](T x, T y) { return std::pow(y - x, T(2)); });
          |                                                     ^
  • multivis/featurelevelsetsgl/src/featurelevelsetsglmodule.cpp:30:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/featurelevelsetsglmodule.h' file not found

       30 | #include <inviwo/featurelevelsetsgl/featurelevelsetsglmodule.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/src/processors/featurelevelsetprocessorgl.cpp:30:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/processors/featurelevelsetprocessorgl.h' file not found

       30 | #include <inviwo/featurelevelsetsgl/processors/featurelevelsetprocessorgl.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/src/properties/implicitfunctiontraitproperty.cpp:30:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/properties/implicitfunctiontraitproperty.h' file not found

       30 | #include <inviwo/featurelevelsetsgl/properties/implicitfunctiontraitproperty.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/src/properties/pointtraitproperty.cpp:30:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/properties/pointtraitproperty.h' file not found

       30 | #include <inviwo/featurelevelsetsgl/properties/pointtraitproperty.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/src/properties/rangetraitproperty.cpp:30:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/properties/rangetraitproperty.h' file not found

       30 | #include <inviwo/featurelevelsetsgl/properties/rangetraitproperty.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/src/properties/traitproperty.cpp:30:10: error: [clang-diagnostic-error]

    'inviwo/featurelevelsetsgl/properties/traitproperty.h' file not found

       30 | #include <inviwo/featurelevelsetsgl/properties/traitproperty.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • multivis/featurelevelsetsgl/tests/unittests/featurelevelsetsgl-unittest-main.cpp:46:5: warning: [bugprone-exception-escape]

    an exception may be thrown in function 'main' which should not throw exceptions

       46 | int main(int argc, char** argv) {
          |     ^
  • multivis/featurelevelsetsgl/tests/unittests/featurelevelsetsgl-unittest-main.cpp:47:5: warning: [google-build-using-namespace]

    do not use namespace using-directives; use using-declarations instead

       47 |     using namespace inviwo;
          |     ^

Have any feedback or feature suggestions? Share it here.

@martinfalk martinfalk force-pushed the feature/featurelevelsets branch from 195b934 to 5166979 Compare October 23, 2025 09:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

help wanted Extra attention is needed J: Auto Format

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants