From 607062f3c3431c3a2413b09838279b4f8dc3caaa Mon Sep 17 00:00:00 2001 From: Christian Costa Date: Sun, 23 Nov 2008 21:30:00 +0100 Subject: [PATCH] d3dxof: Support multi-dimentional array in templates. --- dlls/d3dxof/d3dxof.c | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/dlls/d3dxof/d3dxof.c b/dlls/d3dxof/d3dxof.c index 7c9777107eb..79dc59bda5d 100644 --- a/dlls/d3dxof/d3dxof.c +++ b/dlls/d3dxof/d3dxof.c @@ -1100,11 +1100,6 @@ static BOOL parse_template_members_list(parse_buffer * buf) { while (check_TOKEN(buf) == TOKEN_OBRACKET) { - if (nb_dims) - { - FIXME("No support for multi-dimensional array yet\n"); - return FALSE; - } get_TOKEN(buf); if (check_TOKEN(buf) == TOKEN_INTEGER) { @@ -1114,11 +1109,33 @@ static BOOL parse_template_members_list(parse_buffer * buf) } else { + int i; if (get_TOKEN(buf) != TOKEN_NAME) return FALSE; + for (i = 0; i < idx_member; i++) + { + if (!strcmp((char*)buf->value, buf->pdxf->xtemplates[buf->pdxf->nb_xtemplates].members[i].name)) + { + if (buf->pdxf->xtemplates[buf->pdxf->nb_xtemplates].members[i].nb_dims) + { + ERR("Array cannot be used to specify variable array size\n"); + return FALSE; + } + if (buf->pdxf->xtemplates[buf->pdxf->nb_xtemplates].members[i].type != TOKEN_DWORD) + { + FIXME("Only DWORD supported to specify variable array size\n"); + return FALSE; + } + break; + } + } + if (i == idx_member) + { + ERR("Reference to unknown member %s\n", (char*)buf->value); + return FALSE; + } cur_member->dim_fixed[nb_dims] = FALSE; - /* Hack: Assume array size is specified in previous member */ - cur_member->dim_value[nb_dims] = idx_member - 1; + cur_member->dim_value[nb_dims] = i; } if (get_TOKEN(buf) != TOKEN_CBRACKET) return FALSE;