opengl good practice: unbind texture after set

This commit is contained in:
Bruno
2021-04-28 11:18:45 +02:00
parent ee20718c51
commit 038fea3539
4 changed files with 13 additions and 4 deletions

View File

@@ -146,6 +146,7 @@ void FrameGrabbing::grabFrame(FrameBuffer *frame_buffer, float dt)
#else #else
glBindTexture(GL_TEXTURE_2D, frame_buffer->texture()); glBindTexture(GL_TEXTURE_2D, frame_buffer->texture());
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
#endif #endif
// update case ; alternating indices // update case ; alternating indices

View File

@@ -225,8 +225,9 @@ void MediaPlayer::open(string path)
// set uri to open // set uri to open
uri_ = GstToolkit::filename_to_uri(path); uri_ = GstToolkit::filename_to_uri(path);
// reset // close before re-openning
ready_ = false; if (isOpen())
close();
// start URI discovering thread: // start URI discovering thread:
discoverer_ = std::async( UriDiscoverer_, uri_); discoverer_ = std::async( UriDiscoverer_, uri_);
@@ -507,7 +508,7 @@ GstClockTime MediaPlayer::position()
void MediaPlayer::enable(bool on) void MediaPlayer::enable(bool on)
{ {
if ( !ready_ ) if ( !ready_ || pipeline_ == nullptr)
return; return;
if ( enabled_ != on ) { if ( enabled_ != on ) {
@@ -772,6 +773,7 @@ void MediaPlayer::init_texture(guint index)
// for possible hadrware decoding plugins used. Empty string means none. // for possible hadrware decoding plugins used. Empty string means none.
hardware_decoder_ = GstToolkit::used_gpu_decoding_plugins(pipeline_); hardware_decoder_ = GstToolkit::used_gpu_decoding_plugins(pipeline_);
} }
glBindTexture(GL_TEXTURE_2D, 0);
} }
@@ -819,6 +821,7 @@ void MediaPlayer::fill_texture(guint index)
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, media_.width, media_.height, glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, media_.width, media_.height,
GL_RGBA, GL_UNSIGNED_BYTE, frame_[index].vframe.data[0]); GL_RGBA, GL_UNSIGNED_BYTE, frame_[index].vframe.data[0]);
} }
glBindTexture(GL_TEXTURE_2D, 0);
} }
} }

View File

@@ -679,7 +679,7 @@ uint textureMixingQuadratic()
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glBindTexture(GL_TEXTURE_2D, 0);
} }
return texid; return texid;
} }

View File

@@ -38,6 +38,7 @@ uint Resource::getTextureBlack()
// texture with one black pixel // texture with one black pixel
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 1, 1); glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 1, 1);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, clearColor); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, clearColor);
glBindTexture(GL_TEXTURE_2D, 0);
} }
return tex_index_black; return tex_index_black;
@@ -59,6 +60,7 @@ uint Resource::getTextureWhite()
// texture with one black pixel // texture with one black pixel
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 1, 1); glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 1, 1);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, clearColor); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, clearColor);
glBindTexture(GL_TEXTURE_2D, 0);
} }
return tex_index_white; return tex_index_white;
@@ -80,6 +82,7 @@ uint Resource::getTextureTransparent()
// texture with one black pixel // texture with one black pixel
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 1, 1); glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 1, 1);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, clearColor); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, clearColor);
glBindTexture(GL_TEXTURE_2D, 0);
} }
return tex_index_transparent; return tex_index_transparent;
@@ -219,6 +222,7 @@ uint Resource::getTextureDDS(const std::string& path, float *aspect_ratio)
if(height < 1) height = 1; if(height < 1) height = 1;
} }
glBindTexture(GL_TEXTURE_2D, 0);
// remember to avoid openning the same resource twice // remember to avoid openning the same resource twice
textureIndex[path] = textureID; textureIndex[path] = textureID;
@@ -276,6 +280,7 @@ uint Resource::getTextureImage(const std::string& path, float *aspect_ratio)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_2D, 0);
// free memory // free memory
stbi_image_free(img); stbi_image_free(img);