Warning, file /graphics/krita/plugins/dockers/lut/ocio_display_filter_vfx2021.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

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 
0008 #ifndef OCIO_DISPLAY_FILTER_H
0009 #define OCIO_DISPLAY_FILTER_H
0010 
0011 #include <vector>
0012 
0013 #include <QOpenGLShaderProgram>
0014 
0015 #include <OpenColorIO.h>
0016 #include <OpenColorTransforms.h>
0017 #include <OpenColorTypes.h>
0018 
0019 #include <kis_display_filter.h>
0020 #include <kis_exposure_gamma_correction_interface.h>
0021 
0022 namespace OCIO = OCIO_NAMESPACE;
0023 
0024 enum OCIO_CHANNEL_SWIZZLE { LUMINANCE, RGBA, R, G, B, A };
0025 
0026 struct KisTextureUniform {
0027 public:
0028     KisTextureUniform(const QString &name, const OCIO::GpuShaderDesc::UniformData &data)
0029         : m_name(name)
0030         , m_data(data)
0031     {
0032     }
0033 
0034     QString m_name;
0035     OCIO::GpuShaderDesc::UniformData m_data;
0036 
0037 private:
0038     KisTextureUniform() = delete;
0039 };
0040 
0041 struct KisTextureEntry {
0042     unsigned m_uid = -1;
0043     QString m_textureName;
0044     QString m_samplerName;
0045     unsigned m_type = -1;
0046 
0047     KisTextureEntry(unsigned uid, const QString &textureName, const QString &samplerName, unsigned type)
0048         : m_uid(uid)
0049         , m_textureName(textureName)
0050         , m_samplerName(samplerName)
0051         , m_type(type)
0052     {
0053     }
0054 };
0055 
0056 class OcioDisplayFilter : public KisDisplayFilter
0057 {
0058     Q_OBJECT
0059 public:
0060     explicit OcioDisplayFilter(KisExposureGammaCorrectionInterface *interface, QObject *parent = 0);
0061     ~OcioDisplayFilter();
0062 
0063     void filter(quint8 *pixels, quint32 numPixels) override;
0064     void approximateInverseTransformation(quint8 *pixels, quint32 numPixels) override;
0065     void approximateForwardTransformation(quint8 *pixels, quint32 numPixels) override;
0066     bool useInternalColorManagement() const override;
0067     bool lockCurrentColorVisualRepresentation() const override;
0068     void setLockCurrentColorVisualRepresentation(bool value);
0069 
0070     bool updateShader() override;
0071 
0072     template<class F>
0073     bool updateShaderImpl(F *f);
0074 
0075     void setupTextures(GLFunctions *f, QOpenGLShaderProgram *program) const override;
0076 
0077     KisExposureGammaCorrectionInterface *correctionInterface() const override;
0078 
0079     QString program() const override;
0080 
0081     void updateProcessor();
0082 
0083     OCIO::ConstConfigRcPtr config;
0084 
0085     const char *inputColorSpaceName;
0086     const char *displayDevice;
0087     const char *view;
0088     const char *look;
0089     OCIO_CHANNEL_SWIZZLE swizzle;
0090     double exposure;
0091     double gamma;
0092     double blackPoint;
0093     double whitePoint;
0094     bool forceInternalColorManagement;
0095 
0096 private:
0097     OCIO::ConstProcessorRcPtr m_processor;
0098     OCIO::ConstProcessorRcPtr m_reverseApproximationProcessor;
0099     OCIO::ConstProcessorRcPtr m_forwardApproximationProcessor;
0100 
0101     OCIO::ConstCPUProcessorRcPtr m_processorCPU;
0102     OCIO::ConstCPUProcessorRcPtr m_reverseApproximationProcessorCPU;
0103     OCIO::ConstCPUProcessorRcPtr m_forwardApproximationProcessorCPU;
0104 
0105     KisExposureGammaCorrectionInterface *m_interface;
0106 
0107     bool m_lockCurrentColorVisualRepresentation;
0108 
0109     QString m_program;
0110     std::vector<KisTextureEntry> m_lut3dTexIDs;
0111     QString m_lut3dcacheid;
0112     QString m_shadercacheid;
0113     std::vector<KisTextureUniform> m_lut3dUniforms;
0114 
0115     bool m_shaderDirty;
0116 };
0117 
0118 #endif // OCIO_DISPLAY_FILTER_H