Bladeren bron

Delete GPU objects when OpenGL context is about to be lost.

Eugene Kozlov 5 jaren geleden
bovenliggende
commit
e5b53e2f2c

+ 3 - 0
Source/Urho3D/Graphics/OpenGL/OGLIndexBuffer.cpp

@@ -35,6 +35,9 @@ namespace Urho3D
 
 void IndexBuffer::OnDeviceLost()
 {
+    if (object_.name_ && !graphics_->IsDeviceLost())
+        glDeleteBuffers(1, &object_.name_);
+
     GPUObject::OnDeviceLost();
 }
 

+ 3 - 0
Source/Urho3D/Graphics/OpenGL/OGLRenderSurface.cpp

@@ -103,6 +103,9 @@ void RenderSurface::OnDeviceLost()
     // Clean up also from non-active FBOs
     graphics->CleanupRenderSurface(this);
 
+    if (renderBuffer_ && !graphics_->IsDeviceLost())
+        glDeleteRenderbuffersEXT(1, &renderBuffer_);
+
     renderBuffer_ = 0;
 }
 

+ 3 - 0
Source/Urho3D/Graphics/OpenGL/OGLShaderProgram.cpp

@@ -74,6 +74,9 @@ ShaderProgram::~ShaderProgram()
 
 void ShaderProgram::OnDeviceLost()
 {
+    if (object_.name_ && !graphics_->IsDeviceLost())
+        glDeleteProgram(object_.name_);
+
     GPUObject::OnDeviceLost();
 
     if (graphics_ && graphics_->GetShaderProgram() == this)

+ 3 - 0
Source/Urho3D/Graphics/OpenGL/OGLShaderVariation.cpp

@@ -49,6 +49,9 @@ const char* ShaderVariation::elementSemanticNames[] =
 
 void ShaderVariation::OnDeviceLost()
 {
+    if (object_.name_ && !graphics_->IsDeviceLost())
+        glDeleteShader(object_.name_);
+
     GPUObject::OnDeviceLost();
 
     compilerOutput_.Clear();

+ 3 - 0
Source/Urho3D/Graphics/OpenGL/OGLTexture2D.cpp

@@ -41,6 +41,9 @@ namespace Urho3D
 
 void Texture2D::OnDeviceLost()
 {
+    if (object_.name_ && !graphics_->IsDeviceLost())
+        glDeleteTextures(1, &object_.name_);
+
     GPUObject::OnDeviceLost();
 
     if (renderSurface_)

+ 3 - 0
Source/Urho3D/Graphics/OpenGL/OGLTexture2DArray.cpp

@@ -45,6 +45,9 @@ namespace Urho3D
 
 void Texture2DArray::OnDeviceLost()
 {
+    if (object_.name_ && !graphics_->IsDeviceLost())
+        glDeleteTextures(1, &object_.name_);
+
     GPUObject::OnDeviceLost();
 
     if (renderSurface_)

+ 3 - 0
Source/Urho3D/Graphics/OpenGL/OGLTexture3D.cpp

@@ -41,6 +41,9 @@ namespace Urho3D
 
 void Texture3D::OnDeviceLost()
 {
+    if (object_.name_ && !graphics_->IsDeviceLost())
+        glDeleteTextures(1, &object_.name_);
+
     GPUObject::OnDeviceLost();
 }
 

+ 3 - 0
Source/Urho3D/Graphics/OpenGL/OGLTextureCube.cpp

@@ -45,6 +45,9 @@ namespace Urho3D
 
 void TextureCube::OnDeviceLost()
 {
+    if (object_.name_ && !graphics_->IsDeviceLost())
+        glDeleteTextures(1, &object_.name_);
+
     GPUObject::OnDeviceLost();
 
     for (auto& renderSurface : renderSurfaces_)

+ 3 - 0
Source/Urho3D/Graphics/OpenGL/OGLVertexBuffer.cpp

@@ -34,6 +34,9 @@ namespace Urho3D
 
 void VertexBuffer::OnDeviceLost()
 {
+    if (object_.name_ && !graphics_->IsDeviceLost())
+        glDeleteBuffers(1, &object_.name_);
+
     GPUObject::OnDeviceLost();
 }