From 9423fd2d9fb8d4def3d86be8466c80641034811f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Fri, 21 Jul 2006 14:02:44 +0200 Subject: [PATCH] wined3d: Do not try to create a vbo more than once. --- dlls/wined3d/device.c | 6 ++++++ dlls/wined3d/wined3d_private.h | 1 + 2 files changed, 7 insertions(+) diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 53c4986f111..2f41216d90f 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -611,6 +611,11 @@ static void CreateVBO(IWineD3DVertexBufferImpl *object) { IWineD3DDeviceImpl *This = object->resource.wineD3DDevice; /* Needed for GL_EXTCALL */ GLenum error, glUsage; DWORD vboUsage = object->resource.usage; + if(object->Flags & VBFLAG_VBOCREATEFAIL) { + WARN("Creating a vbo failed once, not trying again\n"); + return; + } + TRACE("Creating an OpenGL vertex buffer object for IWineD3DVertexBuffer %p\n", object); ENTER_GL(); @@ -694,6 +699,7 @@ static void CreateVBO(IWineD3DVertexBufferImpl *object) { FIXME("Failed to create a vertex buffer object. Continuing, but performance issues can occur\n"); if(object->vbo) GL_EXTCALL(glDeleteBuffersARB(1, &object->vbo)); object->vbo = 0; + object->Flags |= VBFLAG_VBOCREATEFAIL; LEAVE_GL(); return; } diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index daedc5267d7..dc0644dc037 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -654,6 +654,7 @@ extern const IWineD3DVertexBufferVtbl IWineD3DVertexBuffer_Vtbl; #define VBFLAG_DIRTY 0x04 /* Buffer data has been modified */ #define VBFLAG_STREAM 0x08 /* The vertex buffer is in a stream */ #define VBFLAG_HASDESC 0x10 /* A vertex description has been found */ +#define VBFLAG_VBOCREATEFAIL 0x20 /* An attempt to create a vbo has failed */ /***************************************************************************** * IWineD3DIndexBuffer implementation structure (extends IWineD3DResourceImpl)