Re: GSoC-2011: Implement Missing Mesh Functions in Wine’s D3DX9
Dylan Smith
dylan.ah.smith at gmail.com
Sun Jul 3 01:41:11 CDT 2011
On Sat, Jul 2, 2011 at 1:01 PM, Michael Mc Donnell <michael at mcdonnell.dk> wrote:
> Thank you for the good review.
Glad you appreciate them. Here is another.
> +static HRESULT init_edge_face_map(struct edge_face_map *edge_face_map, CONST DWORD *index_buffer, CONST DWORD *point_reps, CONST DWORD num_faces)
> +{
...
> + TRACE("(%p, %p, %p, %d)\n", edge_face_map, index_buffer, point_reps, num_faces);
A TRACE call for an internal initialization function like this seems
unnecessary. They are commonly provided for external functions since
it captures application behavior.
> + if (!point_reps) /* Identity point reps */
> + {
> + id_point_reps = generate_identity_point_reps(num_faces, num_vertices);
> + if (!id_point_reps)
> + {
> + hr = E_OUTOFMEMORY;
> + goto cleanup;
...
> + hr = iface->lpVtbl->LockIndexBuffer(iface, D3DLOCK_READONLY, &ib_ptr);
> + if (FAILED(hr)) goto cleanup;
...
> +cleanup:
> + HeapFree(GetProcessHeap(), 0, id_point_reps);
> + if (indices_are_16_bit) HeapFree(GetProcessHeap(), 0, ib);
> + free_edge_face_map(&edge_face_map);
> + iface->lpVtbl->UnlockIndexBuffer(iface);
> + return hr;
> }
The index buffer is unconditionally unlocked in the cleanup code, but
goto cleanup can now be called before the index buffer is locked.
> +static DWORD *generate_identity_point_reps(DWORD num_faces, DWORD num_vertices)
> +{
> + DWORD *id_point_reps;
> + DWORD i;
> +
> + TRACE("(%d, %d)\n", num_faces, num_vertices);
> +
> + id_point_reps = HeapAlloc(GetProcessHeap(), 0, 3 * num_faces * sizeof(*id_point_reps));
> + if (!id_point_reps)
> + return NULL;
> +
> + for (i = 0; i < num_vertices; i++)
> + {
> + id_point_reps[i] = i;
> + }
> + for (i = num_vertices; i < 3 * num_faces; i++)
> + {
> + id_point_reps[i] = -1;
> + }
> +
> + return id_point_reps;
> +}
Why are there exra point reps allocated with -1 value? Won't only
num_vertices point_reps get used?
More information about the wine-devel
mailing list