oslbackend: began new backend classes
This commit is contained in:
@@ -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
|
||||
)
|
||||
@@ -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()
|
||||
{
|
||||
}
|
||||
@@ -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
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user