diff --git a/app/render/backend/CMakeLists.txt b/app/render/backend/CMakeLists.txt index ec218f040..7c92ceb15 100644 --- a/app/render/backend/CMakeLists.txt +++ b/app/render/backend/CMakeLists.txt @@ -16,7 +16,7 @@ add_subdirectory(audio) add_subdirectory(opengl) -add_subdirectory(vulkan) +add_subdirectory(osl) set(OLIVE_SOURCES ${OLIVE_SOURCES} diff --git a/app/render/backend/vulkan/CMakeLists.txt b/app/render/backend/osl/CMakeLists.txt similarity index 84% rename from app/render/backend/vulkan/CMakeLists.txt rename to app/render/backend/osl/CMakeLists.txt index 00002eff9..4d6aaf902 100644 --- a/app/render/backend/vulkan/CMakeLists.txt +++ b/app/render/backend/osl/CMakeLists.txt @@ -16,7 +16,9 @@ set(OLIVE_SOURCES ${OLIVE_SOURCES} - render/backend/vulkan/vulkanbackend.h - render/backend/vulkan/vulkanbackend.cpp + render/backend/osl/oslbackend.h + render/backend/osl/oslbackend.cpp + render/backend/osl/oslworker.h + render/backend/osl/oslworker.cpp PARENT_SCOPE ) diff --git a/app/render/backend/osl/oslbackend.cpp b/app/render/backend/osl/oslbackend.cpp new file mode 100644 index 000000000..14a1b87ba --- /dev/null +++ b/app/render/backend/osl/oslbackend.cpp @@ -0,0 +1,42 @@ +#include "oslbackend.h" + +#include +#include + +#include "oslworker.h" + +OSLBackend::OSLBackend(QObject *parent) : + VideoRenderBackend(parent) +{ +} + +OSLBackend::~OSLBackend() +{ + Close(); +} + +bool OSLBackend::InitInternal() +{ + if (!VideoRenderBackend::InitInternal()) { + return false; + } + + // Initiate one thread per CPU core + for (int i=0;iSetParameters(params()); + processors_.append(processor); + } + + return true; +} + +bool OSLBackend::CompileInternal() +{ + return true; +} + +void OSLBackend::DecompileInternal() +{ +} diff --git a/app/render/backend/osl/oslbackend.h b/app/render/backend/osl/oslbackend.h new file mode 100644 index 000000000..2613c39fa --- /dev/null +++ b/app/render/backend/osl/oslbackend.h @@ -0,0 +1,25 @@ +#ifndef OSLBACKEND_H +#define OSLBACKEND_H + +#include "../videorenderbackend.h" + +class OSLBackend : public VideoRenderBackend +{ + Q_OBJECT +public: + OSLBackend(QObject* parent = nullptr); + + virtual ~OSLBackend() override; + +protected: + virtual bool InitInternal() override; + + virtual bool CompileInternal() override; + + virtual void DecompileInternal() override; + + virtual void ParamsChangedEvent() override; + +}; + +#endif // OSLBACKEND_H diff --git a/app/render/backend/osl/oslworker.cpp b/app/render/backend/osl/oslworker.cpp new file mode 100644 index 000000000..4953f2e46 --- /dev/null +++ b/app/render/backend/osl/oslworker.cpp @@ -0,0 +1,25 @@ +#include "oslworker.h" + +#include "common/clamp.h" +#include "core.h" +#include "node/block/transition/transition.h" +#include "node/node.h" +#include "render/colormanager.h" +#include "render/pixelservice.h" + +OSLWorker::OSLWorker(VideoRenderFrameCache *frame_cache, QObject *parent) : + VideoRenderWorker(frame_cache, parent) +{ +} + +void OSLWorker::FrameToValue(StreamPtr stream, FramePtr frame, NodeValueTable *table) +{ +} + +void OSLWorker::RunNodeAccelerated(const Node *node, const TimeRange &range, const NodeValueDatabase &input_params, NodeValueTable *output_params) +{ +} + +void OSLWorker::TextureToBuffer(const QVariant &tex_in, QByteArray &buffer) +{ +} diff --git a/app/render/backend/osl/oslworker.h b/app/render/backend/osl/oslworker.h new file mode 100644 index 000000000..af13c4187 --- /dev/null +++ b/app/render/backend/osl/oslworker.h @@ -0,0 +1,22 @@ +#ifndef OSLWORKER_H +#define OSLWORKER_H + +#include "../videorenderworker.h" + +class OSLWorker : public VideoRenderWorker +{ + Q_OBJECT +public: + OSLWorker(VideoRenderFrameCache* frame_cache, + QObject* parent = nullptr); + +protected: + virtual void FrameToValue(StreamPtr stream, FramePtr frame, NodeValueTable* table) override; + + virtual void RunNodeAccelerated(const Node *node, const TimeRange &range, const NodeValueDatabase &input_params, NodeValueTable* output_params) override; + + virtual void TextureToBuffer(const QVariant& texture, QByteArray& buffer) override; + +}; + +#endif // OSLWORKER_H diff --git a/app/render/backend/videorenderbackend.cpp b/app/render/backend/videorenderbackend.cpp index 29fd55ec7..d69ebc57e 100644 --- a/app/render/backend/videorenderbackend.cpp +++ b/app/render/backend/videorenderbackend.cpp @@ -154,6 +154,11 @@ void VideoRenderBackend::ConnectWorkerToThis(RenderWorker *processor) connect(video_processor, &VideoRenderWorker::HashAlreadyExists, this, &VideoRenderBackend::ThreadHashAlreadyExists, Qt::QueuedConnection); } +void VideoRenderBackend::EmitCachedFrameReady(const rational &time, const QVariant &value, qint64 job_time) +{ + emit CachedFrameReady(time, value, job_time); +} + void VideoRenderBackend::InvalidateCacheInternal(const rational &start_range, const rational &end_range) { TimeRange invalidated(start_range, end_range); diff --git a/app/render/backend/videorenderbackend.h b/app/render/backend/videorenderbackend.h index 5e2bccda6..5f151ff11 100644 --- a/app/render/backend/videorenderbackend.h +++ b/app/render/backend/videorenderbackend.h @@ -101,7 +101,7 @@ protected: virtual void ConnectWorkerToThis(RenderWorker* processor) override; - virtual void EmitCachedFrameReady(const rational &time, const QVariant& value, qint64 job_time) = 0; + virtual void EmitCachedFrameReady(const rational &time, const QVariant& value, qint64 job_time); virtual void InvalidateCacheInternal(const rational &start_range, const rational &end_range) override; diff --git a/app/render/backend/vulkan/vulkanbackend.cpp b/app/render/backend/vulkan/vulkanbackend.cpp deleted file mode 100644 index 6ce92e589..000000000 --- a/app/render/backend/vulkan/vulkanbackend.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "vulkanbackend.h" - -VulkanBackend::VulkanBackend() -{ - -} diff --git a/app/render/backend/vulkan/vulkanbackend.h b/app/render/backend/vulkan/vulkanbackend.h deleted file mode 100644 index dd3f4a118..000000000 --- a/app/render/backend/vulkan/vulkanbackend.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef VULKANBACKEND_H -#define VULKANBACKEND_H - -/** - * @brief A Vulkan-based variant of the rendering engine - * - * I literally know nothing about Vulkan but maybe one day I will and can fill this out. Also keep in mind projects - * that can cross-compile GLSL to SPIR like these: - * - * https://github.com/KhronosGroup/glslang - * https://github.com/septag/glslcc - */ -class VulkanBackend -{ -public: - VulkanBackend(); -}; - -#endif // VULKANBACKEND_H