Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}