File indexing completed on 2024-06-09 04:26:47
0001 /* 0002 * SPDX-FileCopyrightText: 2012 Boudewijn Rempt <boud@valdyas.org> 0003 * SPDX-FileCopyrightText: 2021 L. E. Segovia <amy@amyspark.me> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 #ifndef OCIO_DISPLAY_FILTER_H 0008 #define OCIO_DISPLAY_FILTER_H 0009 0010 #include <QOpenGLShaderProgram> 0011 0012 #include <OpenColorIO.h> 0013 #include <OpenColorTransforms.h> 0014 #include <OpenColorTypes.h> 0015 0016 #include <kis_display_filter.h> 0017 #include <kis_exposure_gamma_correction_interface.h> 0018 0019 namespace OCIO = OCIO_NAMESPACE; 0020 0021 enum OCIO_CHANNEL_SWIZZLE { 0022 LUMINANCE, 0023 RGBA, 0024 R, 0025 G, 0026 B, 0027 A 0028 }; 0029 0030 class OcioDisplayFilter : public KisDisplayFilter 0031 { 0032 Q_OBJECT 0033 public: 0034 explicit OcioDisplayFilter(KisExposureGammaCorrectionInterface *interface, QObject *parent = 0); 0035 ~OcioDisplayFilter(); 0036 0037 void filter(quint8 *pixels, quint32 numPixels) override; 0038 void approximateInverseTransformation(quint8 *pixels, quint32 numPixels) override; 0039 void approximateForwardTransformation(quint8 *pixels, quint32 numPixels) override; 0040 bool useInternalColorManagement() const override; 0041 bool lockCurrentColorVisualRepresentation() const override; 0042 void setLockCurrentColorVisualRepresentation(bool value); 0043 0044 bool updateShader() override; 0045 template <class F> 0046 bool updateShaderImpl(F *f); 0047 0048 void setupTextures(GLFunctions *f, QOpenGLShaderProgram *program) const override; 0049 0050 KisExposureGammaCorrectionInterface *correctionInterface() const override; 0051 0052 virtual QString program() const override; 0053 0054 void updateProcessor(); 0055 0056 OCIO::ConstConfigRcPtr config; 0057 0058 const char *inputColorSpaceName {nullptr}; 0059 const char *displayDevice {nullptr}; 0060 const char *view {nullptr}; 0061 const char *look {nullptr}; 0062 OCIO_CHANNEL_SWIZZLE swizzle {RGBA}; 0063 float exposure {0.0}; 0064 float gamma {0.0}; 0065 float blackPoint {0.0}; 0066 float whitePoint {0.0}; 0067 bool forceInternalColorManagement {false}; 0068 0069 private: 0070 0071 OCIO::ConstProcessorRcPtr m_processor; 0072 OCIO::ConstProcessorRcPtr m_reverseApproximationProcessor; 0073 OCIO::ConstProcessorRcPtr m_forwardApproximationProcessor; 0074 0075 KisExposureGammaCorrectionInterface *m_interface {nullptr}; 0076 0077 bool m_lockCurrentColorVisualRepresentation {false}; 0078 0079 QString m_program; 0080 GLuint m_lut3dTexID {0}; 0081 QVector<float> m_lut3d; 0082 QString m_lut3dcacheid; 0083 QString m_shadercacheid; 0084 0085 bool m_shaderDirty {true}; 0086 }; 0087 0088 #endif // OCIO_DISPLAY_FILTER_H