oslbackend: began new backend classes

This commit is contained in:
itsmattkc
2020-02-05 14:49:55 +11:00
parent 91f1be90a9
commit 1e71c0e7f5
10 changed files with 125 additions and 29 deletions
+1 -1
View File
@@ -16,7 +16,7 @@
add_subdirectory(audio)
add_subdirectory(opengl)
add_subdirectory(vulkan)
add_subdirectory(osl)
set(OLIVE_SOURCES
${OLIVE_SOURCES}
@@ -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
)
+42
View File
@@ -0,0 +1,42 @@
#include "oslbackend.h"
#include <QEventLoop>
#include <QThread>
#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;i<threads().size();i++) {
// Create one processor object for each thread
OSLWorker* processor = new OSLWorker(frame_cache());
processor->SetParameters(params());
processors_.append(processor);
}
return true;
}
bool OSLBackend::CompileInternal()
{
return true;
}
void OSLBackend::DecompileInternal()
{
}
+25
View File
@@ -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
+25
View File
@@ -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)
{
}
+22
View File
@@ -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
@@ -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);
+1 -1
View File
@@ -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;
@@ -1,6 +0,0 @@
#include "vulkanbackend.h"
VulkanBackend::VulkanBackend()
{
}
-19
View File
@@ -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