From 329fb2f72890b3f283b8d0d4e0e3cbb16a4b5a0f Mon Sep 17 00:00:00 2001 From: Gediminas Jakutis Date: Mon, 26 Oct 2015 20:15:50 +0200 Subject: [PATCH] d3dx9: Add adjacency generation for D3DXCreateCylinder(). Signed-off-by: Gediminas Jakutis Signed-off-by: Matteo Bruni Signed-off-by: Alexandre Julliard --- dlls/d3dx9_36/mesh.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c index 39d279d3d66..6294036aaf3 100644 --- a/dlls/d3dx9_36/mesh.c +++ b/dlls/d3dx9_36/mesh.c @@ -4986,12 +4986,6 @@ HRESULT WINAPI D3DXCreateCylinder(struct IDirect3DDevice9 *device, float radius1 return D3DERR_INVALIDCALL; } - if (adjacency) - { - FIXME("Case of adjacency != NULL not implemented.\n"); - return E_NOTIMPL; - } - number_of_vertices = 2 + (slices * (3 + stacks)); number_of_faces = 2 * slices + stacks * (2 * slices); @@ -5143,6 +5137,23 @@ HRESULT WINAPI D3DXCreateCylinder(struct IDirect3DDevice9 *device, float radius1 free_sincos_table(&theta); cylinder->lpVtbl->UnlockIndexBuffer(cylinder); cylinder->lpVtbl->UnlockVertexBuffer(cylinder); + + if (adjacency) + { + if (FAILED(hr = D3DXCreateBuffer(number_of_faces * sizeof(DWORD) * 3, adjacency))) + { + cylinder->lpVtbl->Release(cylinder); + return hr; + } + + if (FAILED(hr = cylinder->lpVtbl->GenerateAdjacency(cylinder, 0.0f, (*adjacency)->lpVtbl->GetBufferPointer(*adjacency)))) + { + (*adjacency)->lpVtbl->Release(*adjacency); + cylinder->lpVtbl->Release(cylinder); + return hr; + } + } + *mesh = cylinder; return D3D_OK;