Commit 32ffef33 authored by David Adam's avatar David Adam Committed by Alexandre Julliard

d3dx9: Improve vertices computation in D3DXCreatePolygon().

parent 5865f87c
...@@ -4565,7 +4565,7 @@ HRESULT WINAPI D3DXCreatePolygon(struct IDirect3DDevice9 *device, float length, ...@@ -4565,7 +4565,7 @@ HRESULT WINAPI D3DXCreatePolygon(struct IDirect3DDevice9 *device, float length,
struct vertex *vertices; struct vertex *vertices;
WORD (*faces)[3]; WORD (*faces)[3];
DWORD (*adjacency_buf)[3]; DWORD (*adjacency_buf)[3];
float scale; float angle, scale;
unsigned int i; unsigned int i;
TRACE("device %p, length %f, sides %u, mesh %p, adjacency %p.\n", TRACE("device %p, length %f, sides %u, mesh %p, adjacency %p.\n",
...@@ -4593,7 +4593,9 @@ HRESULT WINAPI D3DXCreatePolygon(struct IDirect3DDevice9 *device, float length, ...@@ -4593,7 +4593,9 @@ HRESULT WINAPI D3DXCreatePolygon(struct IDirect3DDevice9 *device, float length,
return hr; return hr;
} }
scale = 0.5f * length / sinf(D3DX_PI / sides); angle = D3DX_PI / sides;
scale = 0.5f * length / sinf(angle);
angle *= 2.0f;
vertices[0].position.x = 0.0f; vertices[0].position.x = 0.0f;
vertices[0].position.y = 0.0f; vertices[0].position.y = 0.0f;
...@@ -4604,8 +4606,8 @@ HRESULT WINAPI D3DXCreatePolygon(struct IDirect3DDevice9 *device, float length, ...@@ -4604,8 +4606,8 @@ HRESULT WINAPI D3DXCreatePolygon(struct IDirect3DDevice9 *device, float length,
for (i = 0; i < sides; ++i) for (i = 0; i < sides; ++i)
{ {
vertices[i + 1].position.x = cosf(2.0f * D3DX_PI * i / sides) * scale; vertices[i + 1].position.x = cosf(angle * i) * scale;
vertices[i + 1].position.y = sinf(2.0f * D3DX_PI * i / sides) * scale; vertices[i + 1].position.y = sinf(angle * i) * scale;
vertices[i + 1].position.z = 0.0f; vertices[i + 1].position.z = 0.0f;
vertices[i + 1].normal.x = 0.0f; vertices[i + 1].normal.x = 0.0f;
vertices[i + 1].normal.y = 0.0f; vertices[i + 1].normal.y = 0.0f;
......
...@@ -2683,12 +2683,14 @@ static void D3DXCreateBoxTest(void) ...@@ -2683,12 +2683,14 @@ static void D3DXCreateBoxTest(void)
static BOOL compute_polygon(struct mesh *mesh, float length, unsigned int sides) static BOOL compute_polygon(struct mesh *mesh, float length, unsigned int sides)
{ {
unsigned int i; unsigned int i;
float scale; float angle, scale;
if (!new_mesh(mesh, sides + 1, sides)) if (!new_mesh(mesh, sides + 1, sides))
return FALSE; return FALSE;
scale = 0.5f * length / sinf(D3DX_PI / sides); angle = D3DX_PI / sides;
scale = 0.5f * length / sinf(angle);
angle *= 2.0f;
mesh->vertices[0].position.x = 0.0f; mesh->vertices[0].position.x = 0.0f;
mesh->vertices[0].position.y = 0.0f; mesh->vertices[0].position.y = 0.0f;
...@@ -2699,8 +2701,8 @@ static BOOL compute_polygon(struct mesh *mesh, float length, unsigned int sides) ...@@ -2699,8 +2701,8 @@ static BOOL compute_polygon(struct mesh *mesh, float length, unsigned int sides)
for (i = 0; i < sides; ++i) for (i = 0; i < sides; ++i)
{ {
mesh->vertices[i + 1].position.x = cosf(2.0f * D3DX_PI * i / sides) * scale; mesh->vertices[i + 1].position.x = cosf(angle * i) * scale;
mesh->vertices[i + 1].position.y = sinf(2.0f * D3DX_PI * i / sides) * scale; mesh->vertices[i + 1].position.y = sinf(angle * i) * scale;
mesh->vertices[i + 1].position.z = 0.0f; mesh->vertices[i + 1].position.z = 0.0f;
mesh->vertices[i + 1].normal.x = 0.0f; mesh->vertices[i + 1].normal.x = 0.0f;
mesh->vertices[i + 1].normal.y = 0.0f; mesh->vertices[i + 1].normal.y = 0.0f;
...@@ -2807,6 +2809,7 @@ static void D3DXCreatePolygonTest(void) ...@@ -2807,6 +2809,7 @@ static void D3DXCreatePolygonTest(void)
test_polygon(device, 10.0f, 5); test_polygon(device, 10.0f, 5);
test_polygon(device, 10.0f, 10); test_polygon(device, 10.0f, 10);
test_polygon(device, 20.0f, 10); test_polygon(device, 20.0f, 10);
test_polygon(device, 20.0f, 32000);
free_test_context(test_context); free_test_context(test_context);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment