Re: GSoC-2011: Implement Missing Mesh Functions in Wine’s D3DX9
Michael Mc Donnell
michael at mcdonnell.dk
Sun Jul 3 04:54:13 CDT 2011
On Sun, Jul 3, 2011 at 8:41 AM, Dylan Smith <dylan.ah.smith at gmail.com> wrote:
> On Sat, Jul 2, 2011 at 1:01 PM, Michael Mc Donnell <michael at mcdonnell.dk> wrote:
>> +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.
Ok, I've removed them.
>> + 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.
I've added a check to see if it's 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?
Yes that was a mistake. Only num_vertices are used and not
3*num_faces. I have also removed some unnecessary -1 checks.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-d3dx9-test-Implemented-ConvertPointRepsToAdjacency-t.patch
Type: text/x-patch
Size: 19160 bytes
Desc: not available
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20110703/7b53ea50/attachment-0002.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-d3dx9-Implemented-ConvertPointRepsToAdjacency.patch
Type: text/x-patch
Size: 10100 bytes
Desc: not available
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20110703/7b53ea50/attachment-0003.bin>
More information about the wine-devel
mailing list