Christian Costa : d3dxof: Finish support for multi-dimensional array.
Alexandre Julliard
julliard at winehq.org
Mon Nov 24 09:16:38 CST 2008
Module: wine
Branch: master
Commit: 40fff317ea1fbb4a012bf6d96a07ed37b5366990
URL: http://source.winehq.org/git/wine.git/?a=commit;h=40fff317ea1fbb4a012bf6d96a07ed37b5366990
Author: Christian Costa <titan.costa at wanadoo.fr>
Date: Sun Nov 23 21:31:13 2008 +0100
d3dxof: Finish support for multi-dimensional array.
---
dlls/d3dxof/d3dxof.c | 34 +++++++++++++++-------------------
dlls/d3dxof/d3dxof_private.h | 2 +-
2 files changed, 16 insertions(+), 20 deletions(-)
diff --git a/dlls/d3dxof/d3dxof.c b/dlls/d3dxof/d3dxof.c
index 3093fb3..5f471b1 100644
--- a/dlls/d3dxof/d3dxof.c
+++ b/dlls/d3dxof/d3dxof.c
@@ -1100,6 +1100,11 @@ static BOOL parse_template_members_list(parse_buffer * buf)
{
while (check_TOKEN(buf) == TOKEN_OBRACKET)
{
+ if (nb_dims >= MAX_ARRAY_DIM)
+ {
+ FIXME("Too many dimensions (%d) for multi-dimensional array\n", nb_dims + 1);
+ return FALSE;
+ }
get_TOKEN(buf);
if (check_TOKEN(buf) == TOKEN_INTEGER)
{
@@ -1842,29 +1847,20 @@ static BOOL parse_object_members_list(parse_buffer * buf)
for (i = 0; i < pt->nb_members; i++)
{
- int nb_elems, k;
+ int k;
+ int nb_elems = 1;
- if (pt->members[i].nb_dims > 1)
- {
- FIXME("Arrays with dimension > 1 not yet supported\n");
- return FALSE;
- }
- else if (pt->members[i].nb_dims)
+ buf->pxo->members[i].start = buf->cur_pdata;
+
+ for (k = 0; k < pt->members[i].nb_dims; k++)
{
- if (!pt->members[i].dim_fixed[0])
- {
- if (!i)
- {
- FIXME("Array with variable must be preceded by the size\n");
- return FALSE;
- }
- nb_elems = last_dword;
- }
+ if (pt->members[i].dim_fixed[k])
+ nb_elems *= pt->members[i].dim_value[k];
else
- nb_elems = pt->members[i].dim_value[0];
+ nb_elems *= *(DWORD*)buf->pxo->members[pt->members[i].dim_value[k]].start;
}
- else
- nb_elems = 1;
+
+ TRACE("Elements to consider: %d\n", nb_elems);
for (k = 0; k < nb_elems; k++)
{
diff --git a/dlls/d3dxof/d3dxof_private.h b/dlls/d3dxof/d3dxof_private.h
index 1789dc7..b2f5b41 100644
--- a/dlls/d3dxof/d3dxof_private.h
+++ b/dlls/d3dxof/d3dxof_private.h
@@ -34,7 +34,7 @@
#include "dxfile.h"
#define MAX_NAME_LEN 32
-#define MAX_ARRAY_DIM 1
+#define MAX_ARRAY_DIM 4
#define MAX_MEMBERS 50
#define MAX_CHILDS 20
#define MAX_TEMPLATES 200
More information about the wine-cvs
mailing list