Writing to a D3DFMT_R32F render target clamps to 1

Posted by Mike on Game Development See other posts from Game Development or by Mike
Published on 2013-06-28T09:37:53Z Indexed on 2013/06/28 10:30 UTC
Read the original article Hit count: 333

I'm currently implementing a picking system.

I render some objects in a frame buffer, which has a render target, which has the D3DFMT_R32F format.

For each mesh, I set an integer constant evaluator, which is its material index.

My shader is simple: I output the position of each vertex, and for each pixel, I cast the material index in float, and assign this value to the Red channel:

int
    ObjectIndex;
float4x4
    WvpXf : WorldViewProjection< string UIWidget = "None"; >;

struct VS_INPUT
{
    float3 Position : POSITION;
};

struct VS_OUTPUT
{
    float4 Position : POSITION;
};

struct PS_OUTPUT
{
    float4 Color : COLOR0;
};

VS_OUTPUT VSMain( const VS_INPUT input )
{
    VS_OUTPUT
        output = (VS_OUTPUT)0;

    output.Position = mul( float4(input.Position, 1), WvpXf );

    return output;
}

PS_OUTPUT PSMain( const VS_OUTPUT input, in  float2 vpos : VPOS )
{
    PS_OUTPUT
        output = (PS_OUTPUT)0;

    output.Color.r = float( ObjectIndex );
    output.Color.gba = 0.0f;

    return output;
}

technique Default
{
    pass P0
    {
        VertexShader = compile vs_3_0 VSMain();
        PixelShader = compile ps_3_0 PSMain();
    }
}

The problem I have, is that somehow, the values written in the render target are clamped between 0.0f and 1.0f.

I've tried to change the rendertarget format, but I always get clamped values...

I don't know what the root of the problem is.

  • For information, I have a depth render target attached to the frame buffer.
  • I disabled the blend in the render state
  • the stencil is disabled

Any ideas?

© Game Development or respective owner

Related posts about directx

Related posts about pixel-shader