Module: wine Branch: master Commit: 329fb2f72890b3f283b8d0d4e0e3cbb16a4b5a0f URL: http://source.winehq.org/git/wine.git/?a=commit;h=329fb2f72890b3f283b8d0d4e0... Author: Gediminas Jakutis <gediminas(a)varciai.lt> Date: Mon Oct 26 20:15:50 2015 +0200 d3dx9: Add adjacency generation for D3DXCreateCylinder(). Signed-off-by: Gediminas Jakutis <gediminas(a)varciai.lt> Signed-off-by: Matteo Bruni <mbruni(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- 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 39d279d..6294036 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;