Re: GSoC-2011: Implement Missing Mesh Functions in Wine’s D3DX9

Dylan Smith dylan.ah.smith at gmail.com
Wed Jun 22 09:53:57 CDT 2011


On Wed, Jun 22, 2011 at 10:12 AM, Michael Mc Donnell
<michael at mcdonnell.dk> wrote:
> Thanks your comments. I've attached an updated version.

> +        if (indices) HeapFree(GetProcessHeap(), 0, indices);
> +    }
> +    if (new_indices) HeapFree(GetProcessHeap(), 0, new_indices);

HeapFree checks for NULL for you, so remove the NULL check before
calling HeapFree.

> +    struct
> +    {
> +       ID3DXMesh *meshes[ARRAY_SIZE(vertices)];
> +       const DWORD *indices[ARRAY_SIZE(vertices)];
> +       const DWORD num_vertices[ARRAY_SIZE(vertices)];
> +       const DWORD *adjacencies[ARRAY_SIZE(vertices)];
> +       DWORD *point_reps[ARRAY_SIZE(vertices)];
> +       const DWORD *exp_point_reps[ARRAY_SIZE(vertices)];
> +       const DWORD options[ARRAY_SIZE(vertices)];
> +    }
> +    tc =
> +    {
> +        {NULL, NULL, NULL, NULL, NULL, NULL, NULL},
> +        {indices0, indices1, indices2, indices3, indices4, indices5, indices6, (DWORD*)indices6_16bit},
> +        {num_vertices0, num_vertices1, num_vertices2, num_vertices3, num_vertices4, num_vertices5, num_vertices6, num_vertices6},
> +        {adjacency0, adjacency1, adjacency2, adjacency3, adjacency4, adjacency5, adjacency6, adjacency6},
> +        {point_rep0, point_rep1, point_rep2, point_rep3, point_rep4, point_rep5, point_rep6, point_rep6},
> +        {exp_point_rep0, exp_point_rep1, exp_point_rep2, exp_point_rep3, exp_point_rep4, exp_point_rep5, exp_point_rep6, exp_point_rep6},
> +        {options, options, options, options, options, options, options, options_16bit}
> +    };

I actually meant something more like:

--- snip ---
struct {
    const DWORD *indices,
    const DWORD num_vertices,
    const DWORD *adjacencies,
    DWORD *point_reps,
    const DWORD *exp_point_reps,
    const DWORD options,
} tc[] = {
    {indices0, num_vertices0, adjacency0, point_rep0, exp_point_rep0, options},
    {indices1, num_vertices1, adjacency1, point_rep1, exp_point_rep1, options},
    ...
}

...

for (i = 0; i < ARRAY_SIZE(tc); i++)
{
    ...
}
--- snip ---

I don't think storing an array of meshes is necessary.  You can just
release the mesh and set the mesh variable to NULL (as needed to avoid
re-releasing) before creating another one.



More information about the wine-devel mailing list