Skip to main content
GameDev.net gamedev.net
🔒 Locked

using previous Rendertarget in next Shader

Started by Farci Jul 26, 2012 at 6:57 PM 1 replies 1.5k views
Original Post
Farci
Farci
Hi,

so as you could see I'm trying to use a rendertarget in the next shader. So I'm postprocessing some data and want to use it as a fullscreentexture in the next shader. So far so good, no problem with shaderresourceviews and setting and so on.
But I have the following problem: I want to use the previously generated texture on the whole screenspace and not only on an object in the screen, atm I can see in the center of the screen with a part of texture with a big border around it which has the color of the clearing color.

I'm trying to implement a SSAO algorithm, just so you know, but I'm still pretty new to HLSL and DX10.

In the first shader I write out normals and depth for each pixel on seperate rendertargets and afterwards I set them as shaderressources for use in SSAO shader.

[source lang="cpp"]Texture2D g_SSAODepthMap : register(t0);
Texture2D g_SSAONormalMap : register(t1);

struct VSInput
{
    float4 m_Position : POSITION
      float4 m_Color : COLOR;
      float4 m_Normal : NORMAL
};


struct PSInput
{
     float4 m_Position : SV_POSITION;
    float4 m_Color : COLOR0;
    float3 m_Normal : NORMAL;
     float2 m_Tex : TEXCOORD;
};

// SSAO Vertex Shader
PSInput VSSSAOShader(VSInput _Input)
{
    PSInput Output = (PSInput) 0;
Output.m_Position = _Input.m_Position;

Output.m_Tex.x = 0.5 * (1 + _Input.m_Position.x);
Output.m_Tex.y = 0.5 * (1 - _Input.m_Position.y);

return Output;
}

// SSAO Pixel Shader
float4 PSSSAOShader(PSInput _Input) : SV_Target0
{
float4 result = g_SSAODepthMap.Sample(samplerLinear, _Input.m_Tex);
result += g_SSAONormalMap.Sample(samplerLinear, _Input.m_Tex);

return result;
}[/source]
I have to say I didnt implement SSAO, this is just for testing and I'm using DirectX 10 and ps_4_0 and vs_4_0.
Maybe I didnt understand how to get the right coordinates in the textures.

I read something about a Fullscreenquad and also tried that, but it doesnt really worked, it would be pretty nice if somebody would be able to describe how I can use a texture as, i would say, layer.

I would appreciate any help, because I'm really stuck here.
quiSHADgho
quiSHADgho
Hi,

i did not implement SSAO by myself by now but as the name implies it should be a screenspace filter. For screenspace filters you typically draw two triangles covering your whole RenderTarget. So you need four Vertices in screenspacecoordinates from -1,-1 for the topleft corner to 1,1 for the bottomright corner leaving the z-coordinate untouched.
Also you need a additional vertexparameter for the texturecoordinate in the range from 0 to 1.
This four verts will be drawed in the screen space pass. So your Shader should look like this:
[source lang="csharp"]Texture2D g_SSAODepthMap : register(t0);
Texture2D g_SSAONormalMap : register(t1);

struct VSInput
{
float4 m_Position : POSITION
float2 m_TexCoord : TEXCOORD0
};


struct PSInput
{
float4 m_Position : SV_POSITION;
float4 m_Color : COLOR0;
float3 m_Normal : NORMAL;
float2 m_Tex : TEXCOORD;
};

// SSAO Vertex Shader
PSInput VSSSAOShader(VSInput _Input)
{
PSInput Output = (PSInput) 0;
Output.m_Position = _Input.m_Position;

Output.m_Tex = _Input.m_TexCoord;

return Output;
}

// SSAO Pixel Shader
float4 PSSSAOShader(PSInput _Input) : SV_Target0
{
float4 result = g_SSAODepthMap.Sample(samplerLinear, _Input.m_Tex);
result += g_SSAONormalMap.Sample(samplerLinear, _Input.m_Tex);

return result;
}[/source]

Hopefully i get everything right.
Farci
Farci
Yeah you are right, but I made another mistake in my cpp-code and I think this can only happen to me.
I wondered why my Quad isnt drawn all the time (I tried that earlier), it happend because I set the w part of the Position to 0 instead of 1. Most guys wont have that problem because they are just using a float3 Position for vertex-shader-input.

And i'm using an orthographical view instead of the perspective view now and it seems to work.

thx for help

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.