Rewrite find_param_from_semantic

This commit is contained in:
twinaphex 2015-04-05 03:35:21 +02:00
parent 6e04afad4d
commit 4a41dbcda7

View File

@ -54,35 +54,40 @@ static INLINE bool validate_param_name(const char *name)
} }
static INLINE CGparameter find_param_from_semantic( static INLINE CGparameter find_param_from_semantic(
CGparameter param, const std::string &sem) CGparameter param, const char *sem)
{ {
while (param) while (param)
{ {
if (cgGetParameterType(param) == CG_STRUCT) CGparameter ret;
{ CGtype type = cgGetParameterType(param);
CGparameter ret = find_param_from_semantic(
cgGetFirstStructParameter(param), sem);
if (ret) switch (type)
return ret;
}
else
{ {
if (cgGetParameterSemantic(param) && case CG_STRUCT:
sem == cgGetParameterSemantic(param) && ret = find_param_from_semantic(
cgGetParameterDirection(param) == CG_IN && cgGetFirstStructParameter(param), sem);
cgGetParameterVariability(param) == CG_VARYING &&
validate_param_name(cgGetParameterName(param))) if (ret)
return param; return ret;
break;
default:
if (cgGetParameterSemantic(param) &&
sem == cgGetParameterSemantic(param) &&
cgGetParameterDirection(param) == CG_IN &&
cgGetParameterVariability(param) == CG_VARYING &&
validate_param_name(cgGetParameterName(param)))
return param;
break;
} }
param = cgGetNextParameter(param); param = cgGetNextParameter(param);
} }
return NULL; return NULL;
} }
static INLINE CGparameter find_param_from_semantic(CGprogram prog, static INLINE CGparameter find_param_from_semantic(
const std::string &sem) CGprogram prog, const char *sem)
{ {
CGparameter param = cgGetFirstParameter(prog, CG_PROGRAM); CGparameter param = cgGetFirstParameter(prog, CG_PROGRAM);
return find_param_from_semantic(param, sem); return find_param_from_semantic(param, sem);