BOOL CParamUtil::SetDescValue( izanagi::S_PES_PARAMETER& sDesc, CGparameter param) { CGparameterclass classParam = ::cgGetParameterClass(param); CGtype typeParam = _GetCGType(param); sDesc.Class = CPostEffectConvUtil::CgParamClassToIzanagiPostEffectParamClass(classParam); sDesc.Type = CPostEffectConvUtil::CgParamTypeToIzanagiPostEffectParamType(typeParam); sDesc.Rows = ::cgGetParameterRows(param); sDesc.Columns = ::cgGetParameterColumns(param); // 配列の要素数を取得 // Dimensionは0固定 sDesc.Elements = ::cgGetArraySize(param, 0); // TODO // 構造体は禁止なので計算しない sDesc.StructMembers = 0; UINT size = CPostEffectConvUtil::GetSizeFromCgType(typeParam); sDesc.Bytes = size * sDesc.Rows * sDesc.Columns; if (sDesc.Elements > 0) { sDesc.Bytes *= sDesc.Elements; } sDesc.hasAnn = HasAnn(param); sDesc.Public = _IsPublic(param); sDesc.DoNotStrip = _DoNotStrip(param); return TRUE; }
BOOL CParamUtil::GetInitValue( izanagi::shader::S_SHD_PARAMETER& sDesc, CGparameter param) { IZ_UINT nElements = sDesc.Rows * sDesc.Columns; nElements = (sDesc.Elements > 0 ? nElements * sDesc.Elements : nElements); IZ_UINT nParamSize = sDesc.Bytes; CGtype type = _GetCGType(param); int nValueNum = 0; std::vector<IZ_UINT8> tvBuf(nParamSize); if (CShaderConvUtil::IsIntType(type)) { // int nValueNum = cgGetParameterValueir( param, nElements, (int*)&tvBuf[0]); } else if (CShaderConvUtil::IsFloatType(type)) { // float nValueNum = cgGetParameterValuefr( param, nElements, (float*)&tvBuf[0]); #if 0 for (int i = 0; i < nValueNum; i++) { float xx = *(float*)&tvBuf[i * 4]; printf("%f\n", xx); } #endif } else { VRETURN(IZ_FALSE); } BOOL ret = (nValueNum > 0); VRETURN(ret); if (ret) { sDesc.hasDefaultValue = IZ_TRUE; sDesc.Pos = CDataBuffer::GetInstance().Register( &tvBuf[0], tvBuf.size()); } return ret; }
BOOL CParamUtil::SetDescValue( const SShaderConfig& config, izanagi::shader::S_SHD_PARAMETER& sDesc, CGparameter param) { CGparameterclass classParam = ::cgGetParameterClass(param); CGtype typeParam = _GetCGType(param); sDesc.Class = CShaderConvUtil::CgParamClassToIzanagiShaderParamClass(classParam); sDesc.Type = CShaderConvUtil::CgParamTypeToIzanagiShaderParamType(typeParam); sDesc.originalType = sDesc.Type; sDesc.Rows = ::cgGetParameterRows(param); sDesc.Columns = ::cgGetParameterColumns(param); // 配列の要素数を取得 // Dimensionは0固定 sDesc.Elements = ::cgGetArraySize(param, 0); #if 0 // For debug... auto name = ::cgGetParameterName(param); printf("Parameter[%s]\n", name); #define _SHD_PARAM_TYPE(type) {izanagi::shader::E_SHADER_PARAMETER_TYPE_##type, #type} struct { izanagi::shader::E_SHADER_PARAMETER_TYPE type; const char* name; } types[] = { _SHD_PARAM_TYPE(FLOAT), _SHD_PARAM_TYPE(FLOAT1), _SHD_PARAM_TYPE(FLOAT4), _SHD_PARAM_TYPE(FLOAT4x4), }; IZ_BOOL isMatch = IZ_FALSE; for (IZ_UINT i = 0; i < COUNTOF(types); i++) { if (types[i].type == sDesc.Type) { printf(" Type(%s)\n", types[i].name); isMatch = IZ_TRUE; break; } } if (isMatch) { printf(" Type(Unknown)\n"); } printf(" Rows(%d) Columns(%d) Elements(%d)\n", sDesc.Rows, sDesc.Columns, sDesc.Elements); #endif // TODO // 構造体は禁止なので計算しない sDesc.StructMembers = 0; UINT size = CShaderConvUtil::GetSizeFromCgType(typeParam); sDesc.Bytes = size * sDesc.Rows * sDesc.Columns; if (sDesc.Elements > 0) { sDesc.Bytes *= sDesc.Elements; } sDesc.hasAnn = HasAnn(param); sDesc.Public = _IsPublic(param); sDesc.DoNotStrip = _DoNotStrip(param); return TRUE; }