예제 #1
0
BOOL CSamplerUtil::BindTexture(
    izanagi::shader::S_SHD_SAMPLER& sDesc,
    CGparameter param,
    std::vector<CGparameter>& tvTexList)
{
    CGstateassignment sa = ::cgGetFirstSamplerStateAssignment(param);

    while (sa != NULL) {
        CGstate state = cgGetSamplerStateAssignmentState(sa);
        izanagi::tool::CString str(::cgGetStateName(state));

        if (str == "Texture") {
            CGparameter tex = ::cgGetTextureStateAssignmentValue(sa);

            std::vector<CGparameter>::iterator it = std::find(
                    tvTexList.begin(),
                    tvTexList.end(),
                    tex);
            VRETURN(it != tvTexList.end());

            // サンプラにバインドするテクスチャのインデックス
            sDesc.BindTexIdx = static_cast<IZ_INT>(std::distance(tvTexList.begin(), it));

            break;
        }

        sa = ::cgGetNextStateAssignment(sa);
    }

    return TRUE;
}
예제 #2
0
static void AddSamplerState(JSON &json, CGstateassignment sa)
{
    const CGstate state = cgGetSamplerStateAssignmentState(sa);
    const char * const stateName = cgGetStateName(state);
    const CGtype type = cgGetStateType(state);
    int nValues;
    switch (type)
    {
    case CG_FLOAT:
    case CG_FLOAT1:
        {
            const float * const fvalues = cgGetFloatStateAssignmentValues(sa, &nValues);
            json.AddValue(stateName, fvalues[0]);
        }
        break;

    case CG_FLOAT2:
    case CG_FLOAT3:
    case CG_FLOAT4:
        {
            const float * const fvalues = cgGetFloatStateAssignmentValues(sa, &nValues);
            json.AddArray(stateName, true);
            json.BeginData(true);
            for (int n = 0; n < nValues; ++n)
            {
                json.AddData(fvalues[n]);
            }
            json.EndData();
            json.CloseArray(true);
        }
        break;

    case CG_INT:
    case CG_INT1:
        {
            const int * const ivalues = cgGetIntStateAssignmentValues(sa, &nValues);
            json.AddValue(stateName, ivalues[0]);
        }
        break;

    case CG_INT2:
    case CG_INT3:
    case CG_INT4:
        {
            const int * const ivalues = cgGetIntStateAssignmentValues(sa, &nValues);
            json.AddArray(stateName, true);
            json.BeginData(true);
            for (int n = 0; n < nValues; ++n)
            {
                json.AddData(ivalues[n]);
            }
            json.EndData();
            json.CloseArray(true);
        }
        break;

    case CG_BOOL:
    case CG_BOOL1:
        {
            const CGbool * const bvalues = cgGetBoolStateAssignmentValues(sa, &nValues);
            json.AddBoolean(stateName, (bvalues[0] ? true : false));
        }
        break;

    case CG_BOOL2:
    case CG_BOOL3:
    case CG_BOOL4:
        {
            const CGbool * const bvalues = cgGetBoolStateAssignmentValues(sa, &nValues);
            json.AddArray(stateName, true);
            json.BeginData(true);
            for (int n = 0; n < nValues; ++n)
            {
                json.AddBoolean(stateName, (bvalues[n] ? true : false));
            }
            json.EndData();
            json.CloseArray(true);
        }
        break;

    case CG_STRING:
        json.AddString(stateName, cgGetStringStateAssignmentValue(sa));
        break;

    default:
        ErrorMessage("UNEXPECTED State Assignment Type: %s 0x%x (%d)\n",
                        cgGetTypeString(type), type, type);
        break;
    }
}