From 5261f031a4d0e1711ad01459910a81c9062777b1 Mon Sep 17 00:00:00 2001 From: Lionel Ulmer Date: Mon, 2 Dec 2002 21:39:34 +0000 Subject: [PATCH] - only handle memory allocation for non-already loaded textures - implement GetCaps for D3DDevice7 --- dlls/ddraw/d3ddevice/mesa.c | 17 +++++++++++++++-- dlls/ddraw/d3dtexture.c | 15 +++++++++------ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/dlls/ddraw/d3ddevice/mesa.c b/dlls/ddraw/d3ddevice/mesa.c index ff2c18748cd..5eeefc3468a 100644 --- a/dlls/ddraw/d3ddevice/mesa.c +++ b/dlls/ddraw/d3ddevice/mesa.c @@ -180,7 +180,7 @@ static void fill_opengl_caps(D3DDEVICEDESC *d1) d1->dlcLightingCaps.dwNumLights = 16; /* glGetIntegerv(GL_MAX_LIGHTS, &maxlight); d1->dlcLightingCaps.dwNumLights = maxlight; */ fill_opengl_primcaps(&(d1->dpcLineCaps)); fill_opengl_primcaps(&(d1->dpcTriCaps)); - d1->dwDeviceRenderBitDepth = DDBD_16|DDBD_24; + d1->dwDeviceRenderBitDepth = DDBD_16|DDBD_24|DDBD_32; d1->dwDeviceZBufferBitDepth = DDBD_16; d1->dwMaxBufferSize = 0; d1->dwMaxVertexCount = 65536; @@ -1188,6 +1188,19 @@ GL_IDirect3DDeviceImpl_3_SetTexture(LPDIRECT3DDEVICE3 iface, return DD_OK; } +HRESULT WINAPI +GL_IDirect3DDeviceImpl_7_GetCaps(LPDIRECT3DDEVICE7 iface, + LPD3DDEVICEDESC7 lpD3DHELDevDesc) +{ + ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface); + TRACE("(%p/%p)->(%p)\n", This, iface, lpD3DHELDevDesc); + + fill_opengl_caps_7(lpD3DHELDevDesc); + + TRACE(" returning caps : no dump function yet.\n"); + + return DD_OK; +} #if !defined(__STRICT_ANSI__) && defined(__GNUC__) # define XCAST(fun) (typeof(VTABLE_IDirect3DDevice7.fun)) @@ -1201,7 +1214,7 @@ ICOM_VTABLE(IDirect3DDevice7) VTABLE_IDirect3DDevice7 = XCAST(QueryInterface) Main_IDirect3DDeviceImpl_7_3T_2T_1T_QueryInterface, XCAST(AddRef) Main_IDirect3DDeviceImpl_7_3T_2T_1T_AddRef, XCAST(Release) GL_IDirect3DDeviceImpl_7_3T_2T_1T_Release, - XCAST(GetCaps) Main_IDirect3DDeviceImpl_7_GetCaps, + XCAST(GetCaps) GL_IDirect3DDeviceImpl_7_GetCaps, XCAST(EnumTextureFormats) GL_IDirect3DDeviceImpl_7_3T_EnumTextureFormats, XCAST(BeginScene) Main_IDirect3DDeviceImpl_7_3T_2T_1T_BeginScene, XCAST(EndScene) Main_IDirect3DDeviceImpl_7_3T_2T_1T_EndScene, diff --git a/dlls/ddraw/d3dtexture.c b/dlls/ddraw/d3dtexture.c index a1190898b6e..9bd8ec0a354 100644 --- a/dlls/ddraw/d3dtexture.c +++ b/dlls/ddraw/d3dtexture.c @@ -407,12 +407,15 @@ GL_IDirect3DTextureImpl_2_1T_Load(LPDIRECT3DTEXTURE2 iface, TRACE("(%p/%p)->(%p)\n", This, iface, lpD3DTexture2); - mem_used = This->surface->surface_desc.dwHeight * - This->surface->surface_desc.dwHeight * - This->surface->surface_desc.u4.ddpfPixelFormat.u1.dwRGBBitCount; - if (This->surface->ddraw_owner->allocate_memory(This->surface->ddraw_owner, mem_used) < 0) { - TRACE(" out of virtual memory... Warning application.\n"); - return D3DERR_TEXTURE_LOAD_FAILED; + if (This->loaded == FALSE) { + /* Only check memory for not already loaded texture... */ + mem_used = This->surface->surface_desc.dwHeight * + This->surface->surface_desc.dwHeight * + This->surface->surface_desc.u4.ddpfPixelFormat.u1.dwRGBBitCount; + if (This->surface->ddraw_owner->allocate_memory(This->surface->ddraw_owner, mem_used) < 0) { + TRACE(" out of virtual memory... Warning application.\n"); + return D3DERR_TEXTURE_LOAD_FAILED; + } } This->loaded = TRUE;