enforce trilinear and mipmap generation
This commit is contained in:
+3
-1
@@ -805,7 +805,9 @@ void Effect::startEffect() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Effect::endEffect() {
|
void Effect::endEffect() {
|
||||||
if (bound) glslProgram->release();
|
if (bound) {
|
||||||
|
glslProgram->release();
|
||||||
|
}
|
||||||
bound = false;
|
bound = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -574,7 +574,7 @@ void ExportThread::Export()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flush remaining packets out of video and audio encoders
|
// Flush remaining packets out of video and audio encoders by sending a null frame
|
||||||
if (params_.video_enabled) {
|
if (params_.video_enabled) {
|
||||||
Encode(fmt_ctx, vcodec_ctx, nullptr, &video_pkt, video_stream);
|
Encode(fmt_ctx, vcodec_ctx, nullptr, &video_pkt, video_stream);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,37 +26,39 @@ void FramebufferObject::Create(QOpenGLContext *ctx, int width, int height)
|
|||||||
// set context to new context provided
|
// set context to new context provided
|
||||||
ctx_ = ctx;
|
ctx_ = ctx;
|
||||||
|
|
||||||
|
QOpenGLFunctions* f = ctx->functions();
|
||||||
|
|
||||||
// create framebuffer object
|
// create framebuffer object
|
||||||
ctx->functions()->glGenFramebuffers(1, &buffer_);
|
f->glGenFramebuffers(1, &buffer_);
|
||||||
|
|
||||||
// create texture
|
// create texture
|
||||||
ctx->functions()->glGenTextures(1, &texture_);
|
f->glGenTextures(1, &texture_);
|
||||||
|
|
||||||
// bind framebuffer for attaching
|
// bind framebuffer for attaching
|
||||||
ctx->functions()->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, buffer_);
|
f->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, buffer_);
|
||||||
|
|
||||||
// bind texture
|
// bind texture
|
||||||
ctx->functions()->glBindTexture(GL_TEXTURE_2D, texture_);
|
f->glBindTexture(GL_TEXTURE_2D, texture_);
|
||||||
|
|
||||||
// allocate storage for texture
|
// allocate storage for texture
|
||||||
ctx->functions()->glTexImage2D(
|
f->glTexImage2D(
|
||||||
GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr
|
GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr
|
||||||
);
|
);
|
||||||
|
|
||||||
// set texture filtering to bilinear
|
// set texture filtering to bilinear
|
||||||
ctx->functions()->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||||
ctx->functions()->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
|
||||||
// attach texture to framebuffer
|
// attach texture to framebuffer
|
||||||
ctx->functions()->glFramebufferTexture2D(
|
f->glFramebufferTexture2D(
|
||||||
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_, 0
|
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_, 0
|
||||||
);
|
);
|
||||||
|
|
||||||
// release texture
|
// release texture
|
||||||
ctx->functions()->glBindTexture(GL_TEXTURE_2D, 0);
|
f->glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
// release framebuffer
|
// release framebuffer
|
||||||
ctx->functions()->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
f->glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FramebufferObject::Destroy()
|
void FramebufferObject::Destroy()
|
||||||
|
|||||||
@@ -51,7 +51,17 @@ namespace OCIO = OCIO_NAMESPACE;
|
|||||||
#include "panels/timeline.h"
|
#include "panels/timeline.h"
|
||||||
#include "panels/viewer.h"
|
#include "panels/viewer.h"
|
||||||
|
|
||||||
|
void PrepareToDraw(QOpenGLFunctions* f) {
|
||||||
|
f->glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
|
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||||
|
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
|
||||||
|
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
|
||||||
|
}
|
||||||
|
|
||||||
void full_blit() {
|
void full_blit() {
|
||||||
|
PrepareToDraw(QOpenGLContext::currentContext()->functions());
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glOrtho(0, 1, 0, 1, -1, 1);
|
glOrtho(0, 1, 0, 1, -1, 1);
|
||||||
@@ -484,9 +494,7 @@ GLuint olive::rendering::compose_sequence(ComposeSequenceParams ¶ms) {
|
|||||||
glBindTexture(GL_TEXTURE_2D, textureID);
|
glBindTexture(GL_TEXTURE_2D, textureID);
|
||||||
|
|
||||||
// set texture filter to bilinear
|
// set texture filter to bilinear
|
||||||
params.ctx->functions()->glGenerateMipmap(GL_TEXTURE_2D);
|
PrepareToDraw(params.ctx->functions());
|
||||||
params.ctx->functions()->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
|
||||||
params.ctx->functions()->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
|
|
||||||
// draw clip on screen according to gl coordinates
|
// draw clip on screen according to gl coordinates
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
|
|||||||
+1
-1
@@ -574,7 +574,7 @@ bool Clip::Retrieve()
|
|||||||
|
|
||||||
texture->setFormat(QOpenGLTexture::RGBA8_UNorm);
|
texture->setFormat(QOpenGLTexture::RGBA8_UNorm);
|
||||||
texture->setMipLevels(texture->maximumMipLevels());
|
texture->setMipLevels(texture->maximumMipLevels());
|
||||||
texture->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear);
|
texture->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, QOpenGLTexture::Linear);
|
||||||
texture->allocateStorage(QOpenGLTexture::RGBA, QOpenGLTexture::UInt8);
|
texture->allocateStorage(QOpenGLTexture::RGBA, QOpenGLTexture::UInt8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -548,7 +548,7 @@ void ViewerWidget::paintGL() {
|
|||||||
makeCurrent();
|
makeCurrent();
|
||||||
|
|
||||||
// clear to solid black
|
// clear to solid black
|
||||||
glClearColor(0.0, 0.0, 0.0, 1.0);
|
glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
// set color multipler to straight white
|
// set color multipler to straight white
|
||||||
@@ -564,6 +564,8 @@ void ViewerWidget::paintGL() {
|
|||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, tex);
|
glBindTexture(GL_TEXTURE_2D, tex);
|
||||||
|
|
||||||
|
context()->functions()->glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
|
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
|
|
||||||
double zoom_factor = container->zoom/(double(width())/double(viewer->seq->width));
|
double zoom_factor = container->zoom/(double(width())/double(viewer->seq->width));
|
||||||
|
|||||||
+1
-1
@@ -111,7 +111,7 @@ void ViewerWindow::paintGL() {
|
|||||||
if (texture > 0) {
|
if (texture > 0) {
|
||||||
if (mutex != nullptr) mutex->lock();
|
if (mutex != nullptr) mutex->lock();
|
||||||
|
|
||||||
glClearColor(0.0, 0.0, 0.0, 1.0);
|
glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
glEnable(GL_TEXTURE_2D);
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
|||||||
Reference in New Issue
Block a user