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