merged all drawing functions into a single shader processing function
This commit is contained in:
@@ -248,6 +248,13 @@ void ManagedDisplayWidget::doneCurrent()
|
||||
}
|
||||
}
|
||||
|
||||
void ManagedDisplayWidget::update()
|
||||
{
|
||||
if (RenderManager::instance()->backend() == RenderManager::kOpenGL) {
|
||||
static_cast<ManagedDisplayWidgetOpenGL*>(inner_widget_)->update();
|
||||
}
|
||||
}
|
||||
|
||||
Menu* ManagedDisplayWidget::GetDisplayMenu(QMenu* parent, bool auto_connect)
|
||||
{
|
||||
QStringList displays = color_manager()->ListAvailableDisplays();
|
||||
|
||||
@@ -114,6 +114,11 @@ public:
|
||||
*/
|
||||
Menu* GetLookMenu(QMenu* parent, bool auto_connect = true);
|
||||
|
||||
/**
|
||||
* @brief Passes update signal through to inner widget
|
||||
*/
|
||||
void update();
|
||||
|
||||
public slots:
|
||||
/**
|
||||
* @brief Replaces the color transform with a new one
|
||||
|
||||
@@ -43,8 +43,8 @@ void HistogramScope::OnInit()
|
||||
{
|
||||
ScopeBase::OnInit();
|
||||
|
||||
ShaderCode secondary_code(Node::ReadFileAsString(":/shaders/rgbhistogram_secondary.frag"),
|
||||
Node::ReadFileAsString(":/shaders/rgbhistogram.vert"));
|
||||
ShaderCode secondary_code(FileFunctions::ReadFileAsString(":/shaders/rgbhistogram_secondary.frag"),
|
||||
FileFunctions::ReadFileAsString(":/shaders/rgbhistogram.vert"));
|
||||
pipeline_secondary_ = renderer()->CreateNativeShader(secondary_code);
|
||||
}
|
||||
|
||||
@@ -58,8 +58,8 @@ void HistogramScope::OnDestroy()
|
||||
|
||||
ShaderCode HistogramScope::GenerateShaderCode()
|
||||
{
|
||||
return ShaderCode(Node::ReadFileAsString(":/shaders/rgbhistogram.frag"),
|
||||
Node::ReadFileAsString(":/shaders/default.vert"));
|
||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/rgbhistogram.frag"),
|
||||
FileFunctions::ReadFileAsString(":/shaders/default.vert"));
|
||||
}
|
||||
|
||||
void HistogramScope::DrawScope(Renderer::TexturePtr managed_tex, QVariant pipeline)
|
||||
@@ -71,11 +71,11 @@ void HistogramScope::DrawScope(Renderer::TexturePtr managed_tex, QVariant pipeli
|
||||
float histogram_base = 2.5f;
|
||||
float histogram_power = 1.0f / histogram_base;
|
||||
|
||||
Renderer::ShaderUniformMap value_map;
|
||||
ShaderJob shader_job;
|
||||
|
||||
value_map.insert(QStringLiteral("viewport"), {QVector2D(width(), height()), NodeParam::kVec2});
|
||||
value_map.insert(QStringLiteral("histogram_scale"), {histogram_scale, NodeParam::kFloat});
|
||||
value_map.insert(QStringLiteral("histogram_power"), {histogram_power, NodeParam::kFloat});
|
||||
shader_job.InsertValue(QStringLiteral("viewport"), ShaderValue(QVector2D(width(), height()), NodeParam::kVec2));
|
||||
shader_job.InsertValue(QStringLiteral("histogram_scale"), ShaderValue(histogram_scale, NodeParam::kFloat));
|
||||
shader_job.InsertValue(QStringLiteral("histogram_power"), ShaderValue(histogram_power, NodeParam::kFloat));
|
||||
|
||||
if (!texture_row_sums_
|
||||
|| texture_row_sums_->width() != this->width()
|
||||
@@ -83,9 +83,13 @@ void HistogramScope::DrawScope(Renderer::TexturePtr managed_tex, QVariant pipeli
|
||||
texture_row_sums_ = renderer()->CreateTexture(VideoParams(width(), height(), managed_tex->format()));
|
||||
}
|
||||
|
||||
renderer()->Blit(managed_tex.get(), pipeline, value_map, texture_row_sums_.get());
|
||||
// Draw managed texture to a sums texture
|
||||
shader_job.InsertValue(QStringLiteral("ove_maintex"), ShaderValue(QVariant::fromValue(managed_tex), NodeParam::kTexture));
|
||||
renderer()->BlitToTexture(pipeline, shader_job, texture_row_sums_.get());
|
||||
|
||||
renderer()->Blit(texture_row_sums_.get(), pipeline_secondary_, value_map);
|
||||
// Draw sums into a histogram
|
||||
shader_job.InsertValue(QStringLiteral("ove_maintex"), ShaderValue(QVariant::fromValue(texture_row_sums_), NodeParam::kTexture));
|
||||
renderer()->Blit(pipeline_secondary_, shader_job, texture_row_sums_->params());
|
||||
|
||||
// Draw line overlays
|
||||
QPainter p(this);
|
||||
|
||||
@@ -50,7 +50,11 @@ void ScopeBase::showEvent(QShowEvent* e)
|
||||
|
||||
void ScopeBase::DrawScope(Renderer::TexturePtr managed_tex, QVariant pipeline)
|
||||
{
|
||||
renderer()->Blit(managed_tex.get(), pipeline, Renderer::ShaderUniformMap());
|
||||
ShaderJob job;
|
||||
|
||||
job.InsertValue(QStringLiteral("ove_maintex"), ShaderValue(QVariant::fromValue(managed_tex), NodeParam::kTexture));
|
||||
|
||||
renderer()->Blit(pipeline, job, VideoParams(width(), height(), PixelFormat::PIX_FMT_RGBA16F));
|
||||
}
|
||||
|
||||
void ScopeBase::UploadTextureFromBuffer()
|
||||
@@ -98,9 +102,8 @@ void ScopeBase::OnPaint()
|
||||
|
||||
if (buffer_) {
|
||||
// Convert reference frame to display space
|
||||
renderer()->BlitColorManaged(color_service(), texture_.get(), managed_tex_.get());
|
||||
renderer()->BlitColorManaged(color_service(), texture_, managed_tex_.get());
|
||||
|
||||
renderer()->SetViewport(width(), height());
|
||||
DrawScope(managed_tex_, pipeline_);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,8 +44,8 @@ WaveformScope::~WaveformScope()
|
||||
|
||||
ShaderCode WaveformScope::GenerateShaderCode()
|
||||
{
|
||||
return ShaderCode(Node::ReadFileAsString(":/shaders/rgbwaveform.frag"),
|
||||
Node::ReadFileAsString(":/shaders/rgbwaveform.vert"));
|
||||
return ShaderCode(FileFunctions::ReadFileAsString(":/shaders/rgbwaveform.frag"),
|
||||
FileFunctions::ReadFileAsString(":/shaders/rgbwaveform.vert"));
|
||||
}
|
||||
|
||||
void WaveformScope::DrawScope(Renderer::TexturePtr managed_tex, QVariant pipeline)
|
||||
@@ -53,23 +53,28 @@ void WaveformScope::DrawScope(Renderer::TexturePtr managed_tex, QVariant pipelin
|
||||
float waveform_scale = 0.80f;
|
||||
|
||||
// Draw waveform through shader
|
||||
Renderer::ShaderUniformMap value_map;
|
||||
ShaderJob job;
|
||||
|
||||
// Set viewport size
|
||||
value_map.insert(QStringLiteral("viewport"),
|
||||
{QVector2D(width(), height()), NodeParam::kVec2});
|
||||
job.InsertValue(QStringLiteral("viewport"),
|
||||
ShaderValue(QVector2D(width(), height()), NodeParam::kVec2));
|
||||
|
||||
// Set luma coefficients
|
||||
float luma_coeffs[3] = {0.0f, 0.0f, 0.0f};
|
||||
color_manager()->GetDefaultLumaCoefs(luma_coeffs);
|
||||
value_map.insert(QStringLiteral("luma_coeffs"),
|
||||
{QVector3D(luma_coeffs[0], luma_coeffs[1], luma_coeffs[2]), NodeParam::kVec3});
|
||||
job.InsertValue(QStringLiteral("luma_coeffs"),
|
||||
ShaderValue(QVector3D(luma_coeffs[0], luma_coeffs[1], luma_coeffs[2]), NodeParam::kVec3));
|
||||
|
||||
|
||||
// Scale of the waveform relative to the viewport surface.
|
||||
value_map.insert(QStringLiteral("waveform_scale"), {waveform_scale, NodeParam::kFloat});
|
||||
job.InsertValue(QStringLiteral("waveform_scale"),
|
||||
ShaderValue(waveform_scale, NodeParam::kFloat));
|
||||
|
||||
renderer()->Blit(managed_tex.get(), pipeline, value_map);
|
||||
// Insert source texture
|
||||
job.InsertValue(QStringLiteral("ove_maintex"),
|
||||
ShaderValue(QVariant::fromValue(managed_tex), NodeParam::kTexture));
|
||||
|
||||
renderer()->Blit(pipeline, job, VideoParams(width(), height(), PixelFormat::PIX_FMT_RGBA16F));
|
||||
|
||||
float waveform_dim_x = ceil((width() - 1.0) * waveform_scale);
|
||||
float waveform_dim_y = ceil((height() - 1.0) * waveform_scale);
|
||||
|
||||
@@ -202,6 +202,8 @@ void ViewerWidget::ConnectNodeInternal(ViewerOutput *n)
|
||||
using_manager = nullptr;
|
||||
}
|
||||
|
||||
auto_cacher_.SetColorManager(using_manager);
|
||||
|
||||
display_widget_->ConnectColorManager(using_manager);
|
||||
foreach (ViewerWindow* window, windows_) {
|
||||
window->display_widget()->ConnectColorManager(using_manager);
|
||||
@@ -244,6 +246,7 @@ void ViewerWidget::DisconnectNodeInternal(ViewerOutput *n)
|
||||
foreach (ViewerWindow* window, windows_) {
|
||||
window->display_widget()->DisconnectColorManager();
|
||||
}
|
||||
auto_cacher_.SetColorManager(nullptr);
|
||||
|
||||
waveform_view_->SetViewer(nullptr);
|
||||
waveform_view_->ConnectTimelinePoints(nullptr);
|
||||
|
||||
@@ -297,9 +297,8 @@ void ViewerDisplayWidget::OnPaint()
|
||||
//color_service()->pipeline()->setUniformValue("ove_deinterlace", deinterlace_);
|
||||
}
|
||||
|
||||
// Bind retrieved texture
|
||||
renderer()->SetViewport(width(), height());
|
||||
renderer()->BlitColorManaged(color_service(), texture_.get());
|
||||
// Draw texture through color transform
|
||||
renderer()->BlitColorManaged(color_service(), texture_, VideoParams(width(), height(), PixelFormat::PIX_FMT_RGBA16F));
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user