tahoma2d/toonz/sources/include/toonzqt/lutcalibrator.h

78 lines
1.6 KiB
C
Raw Normal View History

2018-02-19 16:06:07 +13:00
#pragma once
#ifndef LUT_CALIBRATOR_H
#define LUT_CALIBRATOR_H
#include "tcommon.h"
#include "tpixelutils.h"
#include <QOpenGLBuffer>
#include <QMatrix4x4>
#include <QOpenGLFunctions>
#undef DVAPI
#undef DVVAR
#ifdef TOONZQT_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
class QOpenGLShader;
class QOpenGLShaderProgram;
class QOpenGLFramebufferObject;
class QOpenGLTexture;
class QColor;
class DVAPI LutCalibrator : public QOpenGLFunctions // sigleton
{
bool m_isValid = false;
struct LutTextureShader {
QOpenGLShader* vert = nullptr;
QOpenGLShader* frag = nullptr;
QOpenGLShaderProgram* program = nullptr;
int texUniform = -1;
int lutUniform = -1;
int lutSizeUniform = -1;
int vertexAttrib = -1;
int texCoordAttrib = -1;
} m_shader;
struct Lut {
int meshSize;
float* data = NULL;
QOpenGLTexture* tex = NULL;
} m_lut;
QOpenGLBuffer m_viewerVBO;
LutCalibrator() {}
bool initializeLutTextureShader();
void createViewerVBO();
bool loadLutFile(const QString& path);
void assignLutTexture();
public:
static LutCalibrator* instance();
// to be computed once through the software
void initialize();
void finalize();
bool isValid() { return m_isValid; }
~LutCalibrator() { finalize(); }
void onEndDraw(QOpenGLFramebufferObject*);
QString& getMonitorName() const;
void convert(float&, float&, float&);
void convert(QColor&);
void convert(TPixel32&);
};
#endif