]> git.sesse.net Git - casparcg/commitdiff
2.0. ogl_device: Try to gc if frame allocation fails.
authorRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 30 Jul 2011 09:36:19 +0000 (09:36 +0000)
committerRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 30 Jul 2011 09:36:19 +0000 (09:36 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1019 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/gpu/ogl_device.cpp

index 538abf793dc0ff2f1d5b9c3157df147cece74079..7cbe5a9ed7a7f46952fa947f0edbe267d21c815e 100644 (file)
@@ -69,8 +69,19 @@ safe_ptr<device_buffer> ogl_device::create_device_buffer(size_t width, size_t he
                        }\r
                        catch(...)\r
                        {\r
-                               CASPAR_LOG(error) << L"ogl: create_device_buffer failed!";\r
-                               throw;\r
+                               try\r
+                               {\r
+                                       yield();\r
+                                       gc().get();\r
+                                       \r
+                                       // Try again\r
+                                       buffer.reset(new device_buffer(width, height, stride));\r
+                               }\r
+                               catch(...)\r
+                               {\r
+                                       CASPAR_LOG(error) << L"ogl: create_device_buffer failed!";\r
+                                       throw;\r
+                               }\r
                        }\r
 \r
                }, high_priority);      \r
@@ -102,8 +113,23 @@ safe_ptr<host_buffer> ogl_device::create_host_buffer(size_t size, host_buffer::u
                        }\r
                        catch(...)\r
                        {\r
-                               CASPAR_LOG(error) << L"ogl: create_host_buffer failed!";\r
-                               throw;                          \r
+                               try\r
+                               {\r
+                                       yield();\r
+                                       gc().get();\r
+\r
+                                       // Try again\r
+                                       buffer.reset(new host_buffer(size, usage));\r
+                                       if(usage == host_buffer::write_only)\r
+                                               buffer->map();\r
+                                       else\r
+                                               buffer->unmap();        \r
+                               }\r
+                               catch(...)\r
+                               {\r
+                                       CASPAR_LOG(error) << L"ogl: create_host_buffer failed!";\r
+                                       throw;          \r
+                               }\r
                        }\r
 \r
                }, high_priority);      \r