fixed superimpose crash

This commit is contained in:
itsmattkc
2019-03-24 23:15:10 +11:00
parent 6173b721e2
commit e2c5c87a0a
3 changed files with 12 additions and 7 deletions
+9 -5
View File
@@ -123,7 +123,8 @@ Effect::Effect(Clip* c, const EffectMeta *em) :
bound(false),
iterations(1),
enabled_(true),
expanded_(true)
expanded_(true),
texture_ctx(nullptr)
{
if (em != nullptr) {
// set up UI from effect file
@@ -881,7 +882,7 @@ void Effect::process_shader(double timecode, GLTextureCoords&, int iteration) {
void Effect::process_coords(double, GLTextureCoords&, int) {}
GLuint Effect::process_superimpose(double timecode) {
GLuint Effect::process_superimpose(QOpenGLContext* ctx, double timecode) {
bool dimensions_changed = false;
bool redrew_image = false;
@@ -898,7 +899,7 @@ GLuint Effect::process_superimpose(double timecode) {
redrew_image = true;
}
QOpenGLFunctions* f = QOpenGLContext::currentContext()->functions();
QOpenGLFunctions* f = ctx->functions();
if (texture == 0 || tex_width_ != img.width() || tex_height_ != img.height()) {
delete_texture();
@@ -1109,8 +1110,11 @@ bool Effect::valueHasChanged(double timecode) {
}
void Effect::delete_texture() {
QOpenGLContext::currentContext()->functions()->glDeleteTextures(1, &texture);
texture = 0;
if (texture_ctx != nullptr) {
texture_ctx->functions()->glDeleteTextures(1, &texture);
texture = 0;
texture_ctx = nullptr;
}
}
const EffectMeta* get_meta_from_name(const QString& input) {
+2 -1
View File
@@ -191,7 +191,7 @@ public:
virtual void process_image(double timecode, uint8_t* input, uint8_t* output, int size);
virtual void process_shader(double timecode, GLTextureCoords&, int iteration);
virtual void process_coords(double timecode, GLTextureCoords& coords, int data);
virtual GLuint process_superimpose(double timecode);
virtual GLuint process_superimpose(QOpenGLContext *ctx, double timecode);
virtual void process_audio(double timecode_start, double timecode_end, quint8* samples, int nb_bytes, int channel_count);
virtual void gizmo_draw(double timecode, GLTextureCoords& coords);
@@ -231,6 +231,7 @@ protected:
// superimpose effect
QImage img;
GLuint texture;
QOpenGLContext* texture_ctx;
int tex_width_;
int tex_height_;
+1 -1
View File
@@ -284,7 +284,7 @@ void process_effect(QOpenGLContext* ctx,
}
}
if (e->Flags() & Effect::SuperimposeFlag) {
GLuint superimpose_texture = e->process_superimpose(timecode);
GLuint superimpose_texture = e->process_superimpose(ctx, timecode);
if (superimpose_texture == 0) {
qWarning() << "Superimpose texture was nullptr, retrying...";