Преглед на файлове

Add events for GPU context loss & restore.

Lasse Öörni преди 11 години
родител
ревизия
9d78a85348
променени са 3 файла, в които са добавени 19 реда и са изтрити 0 реда
  1. 4 0
      Source/Engine/Graphics/Direct3D9/D3D9Graphics.cpp
  2. 11 0
      Source/Engine/Graphics/GraphicsEvents.h
  3. 4 0
      Source/Engine/Graphics/OpenGL/OGLGraphics.cpp

+ 4 - 0
Source/Engine/Graphics/Direct3D9/D3D9Graphics.cpp

@@ -2724,6 +2724,8 @@ void Graphics::OnDeviceLost()
         for (Vector<GPUObject*>::Iterator i = gpuObjects_.Begin(); i != gpuObjects_.End(); ++i)
         for (Vector<GPUObject*>::Iterator i = gpuObjects_.Begin(); i != gpuObjects_.End(); ++i)
             (*i)->OnDeviceLost();
             (*i)->OnDeviceLost();
     }
     }
+    
+    SendEvent(E_DEVICELOST);
 }
 }
 
 
 void Graphics::OnDeviceReset()
 void Graphics::OnDeviceReset()
@@ -2743,6 +2745,8 @@ void Graphics::OnDeviceReset()
     impl_->device_->CreateQuery(D3DQUERYTYPE_EVENT, &impl_->frameQuery_);
     impl_->device_->CreateQuery(D3DQUERYTYPE_EVENT, &impl_->frameQuery_);
     
     
     ResetCachedState();
     ResetCachedState();
+    
+    SendEvent(E_DEVICERESET);
 }
 }
 
 
 void Graphics::ResetCachedState()
 void Graphics::ResetCachedState()

+ 11 - 0
Source/Engine/Graphics/GraphicsEvents.h

@@ -100,4 +100,15 @@ EVENT(E_ENDVIEWRENDER, EndViewRender)
     PARAM(P_CAMERA, Camera);                // Camera pointer
     PARAM(P_CAMERA, Camera);                // Camera pointer
 }
 }
 
 
+/// Graphics context has been lost. Some or all (depending on the API) GPU objects have lost their contents.
+EVENT(E_DEVICELOST, DeviceLost)
+{
+}
+
+/// Graphics context has been recreated after being lost. GPU objects in the "data lost" state can be restored now.
+EVENT(E_DEVICERESET, DeviceReset)
+{
+}
+
+
 }
 }

+ 4 - 0
Source/Engine/Graphics/OpenGL/OGLGraphics.cpp

@@ -2322,6 +2322,8 @@ void Graphics::Release(bool clearGPUObjects, bool closeWindow)
             // We are not shutting down, but recreating the context: mark GPU objects lost
             // We are not shutting down, but recreating the context: mark GPU objects lost
             for (Vector<GPUObject*>::Iterator i = gpuObjects_.Begin(); i != gpuObjects_.End(); ++i)
             for (Vector<GPUObject*>::Iterator i = gpuObjects_.Begin(); i != gpuObjects_.End(); ++i)
                 (*i)->OnDeviceLost();
                 (*i)->OnDeviceLost();
+
+            SendEvent(E_DEVICELOST);
         }
         }
     }
     }
     
     
@@ -2399,6 +2401,8 @@ void Graphics::Restore()
         for (Vector<GPUObject*>::Iterator i = gpuObjects_.Begin(); i != gpuObjects_.End(); ++i)
         for (Vector<GPUObject*>::Iterator i = gpuObjects_.Begin(); i != gpuObjects_.End(); ++i)
             (*i)->OnDeviceReset();
             (*i)->OnDeviceReset();
     }
     }
+
+    SendEvent(E_DEVICERESET);
 }
 }
 
 
 void Graphics::Maximize()
 void Graphics::Maximize()