return NULL;
}
+static inline struct d3dx_parameter *get_valid_parameter(struct ID3DXBaseEffectImpl *base, D3DXHANDLE parameter)
+{
+ struct d3dx_parameter *param = is_valid_parameter(base, parameter);
+
+ if (!param) param = get_parameter_by_name(base, NULL, parameter);
+
+ return param;
+}
+
static void free_state(struct d3dx_state *state)
{
free_parameter_state(state->parameter, FALSE, FALSE, state->type);
static HRESULT WINAPI ID3DXBaseEffectImpl_GetParameterDesc(ID3DXBaseEffect *iface, D3DXHANDLE parameter, D3DXPARAMETER_DESC *desc)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, desc %p\n", This, parameter, desc);
- if (!param) param = get_parameter_struct(iface->lpVtbl->GetParameterByName(iface, NULL, parameter));
-
if (!desc || !param)
{
WARN("Invalid argument specified.\n");
static D3DXHANDLE WINAPI ID3DXBaseEffectImpl_GetParameter(ID3DXBaseEffect *iface, D3DXHANDLE parameter, UINT index)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, index %u\n", This, parameter, index);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (!parameter)
{
if (index < This->parameter_count)
static D3DXHANDLE WINAPI ID3DXBaseEffectImpl_GetParameterByName(ID3DXBaseEffect *iface, D3DXHANDLE parameter, LPCSTR name)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
D3DXHANDLE handle;
TRACE("iface %p, parameter %p, name %s\n", This, parameter, debugstr_a(name));
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (!name)
{
handle = get_parameter_handle(param);
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 *param = get_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)
static D3DXHANDLE WINAPI ID3DXBaseEffectImpl_GetParameterElement(ID3DXBaseEffect *iface, D3DXHANDLE parameter, UINT index)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, index %u\n", This, parameter, index);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (!param)
{
if (index < This->parameter_count)
static D3DXHANDLE WINAPI ID3DXBaseEffectImpl_GetAnnotation(ID3DXBaseEffect *iface, D3DXHANDLE object, UINT index)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, object);
+ 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;
annotation_count = technique->annotation_count;
annotation_handles = technique->annotation_handles;
}
- else
+ else if (param)
{
- if (!param) param = get_parameter_by_name(This, NULL, object);
-
- if (param)
- {
- annotation_count = param->annotation_count;
- annotation_handles = param->annotation_handles;
- }
+ annotation_count = param->annotation_count;
+ annotation_handles = param->annotation_handles;
}
/* Todo: add funcs */
static D3DXHANDLE WINAPI ID3DXBaseEffectImpl_GetAnnotationByName(ID3DXBaseEffect *iface, D3DXHANDLE object, LPCSTR name)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, object);
+ 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;
annotation_count = technique->annotation_count;
annotation_handles = technique->annotation_handles;
}
- else
+ else if (param)
{
- if (!param) param = get_parameter_by_name(This, NULL, object);
-
- if (param)
- {
- annotation_count = param->annotation_count;
- annotation_handles = param->annotation_handles;
- }
+ annotation_count = param->annotation_count;
+ annotation_handles = param->annotation_handles;
}
/* Todo: add funcs */
static HRESULT WINAPI ID3DXBaseEffectImpl_GetValue(ID3DXBaseEffect *iface, D3DXHANDLE parameter, LPVOID data, UINT bytes)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, data %p, bytes %u\n", This, parameter, data, bytes);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
if (!param)
{
WARN("Invalid parameter %p specified\n", parameter);
static HRESULT WINAPI ID3DXBaseEffectImpl_GetBool(ID3DXBaseEffect *iface, D3DXHANDLE parameter, BOOL *b)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, b %p\n", This, parameter, b);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (b && param && !param->element_count && param->class == D3DXPC_SCALAR)
{
*b = get_bool(param->data);
static HRESULT WINAPI ID3DXBaseEffectImpl_GetBoolArray(ID3DXBaseEffect *iface, D3DXHANDLE parameter, BOOL *b, UINT count)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, b %p, count %u\n", This, parameter, b, count);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (b && param && (param->class == D3DXPC_SCALAR
|| param->class == D3DXPC_VECTOR
|| param->class == D3DXPC_MATRIX_ROWS
static HRESULT WINAPI ID3DXBaseEffectImpl_GetInt(ID3DXBaseEffect *iface, D3DXHANDLE parameter, INT *n)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, n %p\n", This, parameter, n);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (n && param && !param->element_count && param->class == D3DXPC_SCALAR)
{
*n = get_int(param->type, param->data);
static HRESULT WINAPI ID3DXBaseEffectImpl_GetIntArray(ID3DXBaseEffect *iface, D3DXHANDLE parameter, INT *n, UINT count)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, n %p, count %u\n", This, parameter, n, count);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (n && param && (param->class == D3DXPC_SCALAR
|| param->class == D3DXPC_VECTOR
|| param->class == D3DXPC_MATRIX_ROWS
static HRESULT WINAPI ID3DXBaseEffectImpl_GetFloat(ID3DXBaseEffect *iface, D3DXHANDLE parameter, FLOAT *f)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, f %p\n", This, parameter, f);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (f && param && !param->element_count && param->class == D3DXPC_SCALAR)
{
f = param->data;
static HRESULT WINAPI ID3DXBaseEffectImpl_GetFloatArray(ID3DXBaseEffect *iface, D3DXHANDLE parameter, FLOAT *f, UINT count)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, f %p, count %u\n", This, parameter, f, count);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (f && param && (param->class == D3DXPC_SCALAR
|| param->class == D3DXPC_VECTOR
|| param->class == D3DXPC_MATRIX_ROWS
static HRESULT WINAPI ID3DXBaseEffectImpl_GetString(ID3DXBaseEffect *iface, D3DXHANDLE parameter, LPCSTR *string)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, string %p\n", This, parameter, string);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (string && param && !param->element_count && param->type == D3DXPT_STRING)
{
*string = *(LPCSTR *)param->data;
static HRESULT WINAPI ID3DXBaseEffectImpl_SetTexture(ID3DXBaseEffect *iface, D3DXHANDLE parameter, LPDIRECT3DBASETEXTURE9 texture)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, texture %p\n", This, parameter, texture);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (texture && param && !param->element_count &&
(param->type == D3DXPT_TEXTURE || param->type == D3DXPT_TEXTURE1D
|| param->type == D3DXPT_TEXTURE2D || param->type == D3DXPT_TEXTURE3D
static HRESULT WINAPI ID3DXBaseEffectImpl_GetTexture(ID3DXBaseEffect *iface, D3DXHANDLE parameter, LPDIRECT3DBASETEXTURE9 *texture)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, texture %p\n", This, parameter, texture);
static HRESULT WINAPI ID3DXBaseEffectImpl_GetPixelShader(ID3DXBaseEffect *iface, D3DXHANDLE parameter, LPDIRECT3DPIXELSHADER9 *pshader)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, pshader %p\n", This, parameter, pshader);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (pshader && param && !param->element_count && param->type == D3DXPT_PIXELSHADER)
{
*pshader = *(LPDIRECT3DPIXELSHADER9 *)param->data;
static HRESULT WINAPI ID3DXBaseEffectImpl_GetVertexShader(ID3DXBaseEffect *iface, D3DXHANDLE parameter, LPDIRECT3DVERTEXSHADER9 *vshader)
{
struct ID3DXBaseEffectImpl *This = impl_from_ID3DXBaseEffect(iface);
- struct d3dx_parameter *param = is_valid_parameter(This, parameter);
+ struct d3dx_parameter *param = get_valid_parameter(This, parameter);
TRACE("iface %p, parameter %p, vshader %p\n", This, parameter, vshader);
- if (!param) param = get_parameter_by_name(This, NULL, parameter);
-
if (vshader && param && !param->element_count && param->type == D3DXPT_VERTEXSHADER)
{
*vshader = *(LPDIRECT3DVERTEXSHADER9 *)param->data;