0

GLSL フラグメント シェーダーがありますが、問題はこのコードにあります

vec4 TFSelection(StrVolumeColorMap volumeColorMap , vec4 textureCoordinate)
{
    vec4 finalColor = vec4(0.0);

    if(volumeColorMap.TransferFunctions[0].numberOfBits == 0)
    {       
        return texture(volumeColorMap.TransferFunctions[0].TransferFunctionID,textureCoordinate.x);         
    }

    if(textureCoordinate.x == 0)
        return finalColor;

    float deNormalize = textureCoordinate.x *65535/*255*/;

    for(int i = 0; i < volumeColorMap.TransferFunctions.length(); i++)
    {
        int NormFactor = volumeColorMap.TransferFunctions[i].startBit + volumeColorMap.TransferFunctions[i].numberOfBits;

        float minval = CalculatePower(2, volumeColorMap.TransferFunctions[i].startBit);
        if(deNormalize >= minval)
        {
            float maxval = CalculatePower(2, NormFactor);
            if(deNormalize <maxval)
            {

                //float tempPower = CalculatePower(2 , NormFactor);
                float coord = deNormalize /maxval/*tempPower*/;
                return texture(volumeColorMap.TransferFunctions[i].TransferFunctionID,coord);
            }
        }
    }

    return finalColor;
}

シェーダーをコンパイルしてリンクすると、次のメッセージがログに記録されます。

サンプラーは均一 (グローバルまたはメインへのパラメーター) である必要があり、関数をインライン化するか、条件式を解決する必要があります

多分シェーダーリンクのような単純な変更で、変更のように成功します

float `coord = deNormalize /maxval

 float coord = deNormalize  .`

ドライバー:nvidia 320.49

4

0 に答える 0