Rico Schüller : d3dx9: Implement ID3DXBaseEffect:: GetParameterBySemantic().

Alexandre Julliard julliard at winehq.org
Thu May 5 12:08:07 CDT 2011


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

Author: Rico Schüller <kgbricola at web.de>
Date:   Thu May  5 11:30:23 2011 +0200

d3dx9: Implement ID3DXBaseEffect::GetParameterBySemantic().

---

 dlls/d3dx9_36/effect.c |   56 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 55 insertions(+), 1 deletions(-)

diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
index 5ad078e..27f22b2 100644
--- a/dlls/d3dx9_36/effect.c
+++ b/dlls/d3dx9_36/effect.c
@@ -809,8 +809,62 @@ static D3DXHANDLE WINAPI ID3DXBaseEffectImpl_GetParameterByName(ID3DXBaseEffect
 static D3DXHANDLE WINAPI ID3DXBaseEffectImpl_GetParameterBySemantic(ID3DXBaseEffect *iface, D3DXHANDLE parameter, LPCSTR semantic)
 {
     struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
+    struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+    struct d3dx_parameter *temp_param;
+    UINT i;
+
+    TRACE("iface %p, parameter %p, semantic %s\n", This, parameter, debugstr_a(semantic));
+
+    if (!param) param = get_parameter_by_name(This, NULL, parameter);
+
+    if (!parameter)
+    {
+        for (i = 0; i < This->parameter_count; ++i)
+        {
+            temp_param = get_parameter_struct(This->parameter_handles[i]);
 
-    FIXME("iface %p, parameter %p, semantic %s stub\n", This, parameter, debugstr_a(semantic));
+            if (!temp_param->semantic)
+            {
+                if (!semantic)
+                {
+                    TRACE("Returning parameter %p\n", This->parameter_handles[i]);
+                    return This->parameter_handles[i];
+                }
+                continue;
+            }
+
+            if (!strcasecmp(temp_param->semantic, semantic))
+            {
+                TRACE("Returning parameter %p\n", This->parameter_handles[i]);
+                return This->parameter_handles[i];
+            }
+        }
+    }
+    else if (param)
+    {
+        for (i = 0; i < param->member_count; ++i)
+        {
+            temp_param = get_parameter_struct(param->member_handles[i]);
+
+            if (!temp_param->semantic)
+            {
+                if (!semantic)
+                {
+                    TRACE("Returning parameter %p\n", param->member_handles[i]);
+                    return param->member_handles[i];
+                }
+                continue;
+            }
+
+            if (!strcasecmp(temp_param->semantic, semantic))
+            {
+                TRACE("Returning parameter %p\n", param->member_handles[i]);
+                return param->member_handles[i];
+            }
+        }
+    }
+
+    WARN("Invalid argument specified\n");
 
     return NULL;
 }




More information about the wine-cvs mailing list