/*** Olive - Non-Linear Video Editor Copyright (C) 2019 Olive Team This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ***/ #include "renderer.h" #include namespace OCIO = OCIO_NAMESPACE::v1; #include #include "render/colormanager.h" OLIVE_NAMESPACE_ENTER Renderer::Renderer(QObject *parent) : QObject(parent) { } Renderer::TexturePtr Renderer::CreateTexture(const VideoParams ¶m, void *data, int linesize) { QVariant v = CreateNativeTexture(param, data, linesize); if (v.isNull()) { return nullptr; } return std::make_shared(this, v, param); } // copied from source code to OCIODisplay /*const int OCIO_LUT3D_EDGE_SIZE = 64; const int OCIO_LUT3D_PIXEL_COUNT = OCIO_LUT3D_EDGE_SIZE*OCIO_LUT3D_EDGE_SIZE*OCIO_LUT3D_EDGE_SIZE; const int OCIO_LUT3D_ENTRY_COUNT = 3 * OCIO_LUT3D_PIXEL_COUNT; const int OCIO_LUT3D_ENTRY_COUNT_WITH_ALPHA = 4 * OCIO_LUT3D_PIXEL_COUNT; const int OCIO_LUT2D_EDGE_SIZE = 512;*/ void Renderer::BlitColorManaged(ColorProcessorPtr color_processor, TexturePtr source, Texture *destination) { /*ColorContext color_ctx; if (color_cache_.contains(color_processor->id())) { color_ctx = color_cache_.value(color_processor->id()); } else { // Generate OCIO color context // Generate OCIO shader descriptor const char* ocio_func_name = "OCIODisplay"; OCIO::GpuShaderDesc shader_desc; shader_desc.setLanguage(OCIO::GPU_LANGUAGE_GLSL_1_0); shader_desc.setFunctionName(ocio_func_name); shader_desc.setLut3DEdgeLen(OCIO_LUT3D_EDGE_SIZE); // Generate LUT QVector lut_data(OCIO_LUT3D_ENTRY_COUNT); color_processor->GetProcessor()->getGpuLut3D(lut_data.data(), shader_desc); // Convert to half float RGBA QVector texture_ready_lut_data(OCIO_LUT3D_ENTRY_COUNT_WITH_ALPHA); for (int i=0; iGetProcessor()->getGpuShaderText(shader_desc); ocio_code.replace(QStringLiteral("texture3D"), QStringLiteral("texture2D")); ocio_code.replace(QStringLiteral("sampler3D"), QStringLiteral("sampler2D")); qDebug() << frag_code; //qDebug() << "FIXME: GPU doesn't handle associated alpha yet"; }*/ qDebug() << "BlitColorManaged is a partial stub"; QVariant shader = CreateNativeShader(ShaderCode(FileFunctions::ReadFileAsString(":/shaders/default.frag"), FileFunctions::ReadFileAsString(":/shaders/default.vert"))); ShaderJob job; job.InsertValue(QStringLiteral("ove_maintex"), ShaderValue(QVariant::fromValue(source), NodeParam::kTexture)); BlitToTexture(shader, job, destination); } void Renderer::BlitColorManaged(ColorProcessorPtr color_processor, TexturePtr source, VideoParams params) { qDebug() << "BlitColorManaged is a partial stub"; QVariant shader = CreateNativeShader(ShaderCode(FileFunctions::ReadFileAsString(":/shaders/default.frag"), FileFunctions::ReadFileAsString(":/shaders/default.vert"))); ShaderJob job; job.InsertValue(QStringLiteral("ove_maintex"), ShaderValue(QVariant::fromValue(source), NodeParam::kTexture)); Blit(shader, job, params); } OLIVE_NAMESPACE_EXIT