=?UTF-8?Q?Rico=20Sch=C3=BCller=20?=: d3dx9: Make annotation handling more generic for techniques and passes.

Alexandre Julliard julliard at winehq.org
Mon Aug 20 14:16:18 CDT 2012


Module: wine
Branch: master
Commit: 24ee16de099823e496b4bd1638855316e998ea8a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=24ee16de099823e496b4bd1638855316e998ea8a

Author: Rico Schüller <kgbricola at web.de>
Date:   Sat Aug 18 14:59:01 2012 +0200

d3dx9: Make annotation handling more generic for techniques and passes.

---

 dlls/d3dx9_36/effect.c |   29 +++++++++++++----------------
 1 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
index dec2f77..f4a3b86 100644
--- a/dlls/d3dx9_36/effect.c
+++ b/dlls/d3dx9_36/effect.c
@@ -190,7 +190,7 @@ struct ID3DXEffectCompilerImpl
 
 static struct d3dx_parameter *get_parameter_by_name(struct ID3DXBaseEffectImpl *base,
         struct d3dx_parameter *parameter, LPCSTR name);
-static struct d3dx_parameter *get_parameter_annotation_by_name(struct d3dx_parameter *parameter, LPCSTR name);
+static struct d3dx_parameter *get_annotation_by_name(UINT handlecount, D3DXHANDLE *handles, LPCSTR name);
 static HRESULT d3dx9_parse_state(struct d3dx_state *state, const char *data, const char **ptr, D3DXHANDLE *objects);
 static void free_parameter_state(D3DXHANDLE handle, BOOL element, BOOL child, enum STATE_TYPE st);
 
@@ -986,7 +986,7 @@ static struct d3dx_parameter *get_parameter_element_by_name(struct d3dx_paramete
                 return get_parameter_by_name(NULL, temp_parameter, part);
 
             case '@':
-                return get_parameter_annotation_by_name(temp_parameter, part);
+                return get_annotation_by_name(temp_parameter->annotation_count, temp_parameter->annotation_handles, part);
 
             case '\0':
                 TRACE("Returning parameter %p\n", temp_parameter);
@@ -1002,22 +1002,22 @@ static struct d3dx_parameter *get_parameter_element_by_name(struct d3dx_paramete
     return NULL;
 }
 
-static struct d3dx_parameter *get_parameter_annotation_by_name(struct d3dx_parameter *parameter, LPCSTR name)
+static struct d3dx_parameter *get_annotation_by_name(UINT handlecount, D3DXHANDLE *handles, LPCSTR name)
 {
     UINT i, length;
     struct d3dx_parameter *temp_parameter;
     LPCSTR part;
 
-    TRACE("parameter %p, name %s\n", parameter, debugstr_a(name));
+    TRACE("handlecount %u, handles %p, name %s\n", handlecount, handles, debugstr_a(name));
 
     if (!name || !*name) return NULL;
 
     length = strcspn( name, "[.@" );
     part = name + length;
 
-    for (i = 0; i < parameter->annotation_count; ++i)
+    for (i = 0; i < handlecount; ++i)
     {
-        temp_parameter = get_parameter_struct(parameter->annotation_handles[i]);
+        temp_parameter = get_parameter_struct(handles[i]);
 
         if (!strcmp(temp_parameter->name, name))
         {
@@ -1088,7 +1088,7 @@ static struct d3dx_parameter *get_parameter_by_name(struct ID3DXBaseEffectImpl *
                     return get_parameter_by_name(NULL, temp_parameter, part);
 
                 case '@':
-                    return get_parameter_annotation_by_name(temp_parameter, part);
+                    return get_annotation_by_name(temp_parameter->annotation_count, temp_parameter->annotation_handles, part);
 
                 case '[':
                     return get_parameter_element_by_name(temp_parameter, part);
@@ -1558,7 +1558,8 @@ static D3DXHANDLE WINAPI ID3DXBaseEffectImpl_GetAnnotationByName(ID3DXBaseEffect
     struct d3dx_parameter *param = get_valid_parameter(This, object);
     struct d3dx_pass *pass = is_valid_pass(This, object);
     struct d3dx_technique *technique = is_valid_technique(This, object);
-    UINT annotation_count = 0, i;
+    struct d3dx_parameter *anno = NULL;
+    UINT annotation_count = 0;
     D3DXHANDLE *annotation_handles = NULL;
 
     FIXME("iface %p, object %p, name %s partial stub\n", This, object, debugstr_a(name));
@@ -1586,15 +1587,11 @@ static D3DXHANDLE WINAPI ID3DXBaseEffectImpl_GetAnnotationByName(ID3DXBaseEffect
     }
     /* Todo: add funcs */
 
-    for (i = 0; i < annotation_count; i++)
+    anno = get_annotation_by_name(annotation_count, annotation_handles, name);
+    if (anno)
     {
-        struct d3dx_parameter *anno = get_parameter_struct(annotation_handles[i]);
-
-        if (!strcmp(anno->name, name))
-        {
-            TRACE("Returning parameter %p\n", anno);
-            return get_parameter_handle(anno);
-        }
+        TRACE("Returning parameter %p\n", anno);
+        return get_parameter_handle(anno);
     }
 
     WARN("Invalid argument specified\n");




More information about the wine-cvs mailing list