• Advertisement
Sign in to follow this  

Need help loading/rendering a fullscreen directx 9 shader

This topic is 2129 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hy guys.
I'm stuck in loading fullscreen shaders. I know that i have to render to a texture, and pass it to a quad, but I don't know how to make it if the shader have multiple textures, for example a bloom shader.
I don't need the specific code, I just want the pseudocode to the incorporate it into my engine.
In short, what i need is a way to load and render a fullscreen shader with an arbitrary number of passes and textures, like in bloom, that you got the main texture, the downsample1 and downsample 2, the H_blur , the V_blur and the final image.
Please I need this for my engine and I'm really stuck.
Any thought is welcome.

PS: I attached to the post a simple blur shader that I use
PSS: I don't use the annotations, this shader is taken directly from DarkShader, the program I use to write and test the shaders.


string Description = "This shader blurs everything in the scene";
string Thumbnail = "Blur.png";
float2 ViewSize : ViewSize;
//box filter, declare in pixel offsets convert to texel offsets in PS
float2 PixelOffsets[9] =
{
{ -1, -1 },
{ -1, 0 },
{ -1, 1 },
{ 0, 1 },
{ 1, 1 },
{ 1, 0 },
{ 1, -1 },
{ 0, -1 },
{ 0, 0 },
};
//scene image
texture frame : RENDERCOLORTARGET
<
string ResourceName = "";
float2 ViewportRatio = { 1.0, 1.0 };
>;
sampler2D frameSamp = sampler_state {
Texture = < frame >;
MinFilter = Linear; MagFilter = Linear; MipFilter = Linear;
AddressU = Clamp; AddressV = Clamp;
};
//downsample image
texture Downsample1Img : RENDERCOLORTARGET
<
string ResourceName = "";
float2 ViewportRatio = { 0.5, 0.5 };
>;
sampler2D Downsample1Samp = sampler_state {
Texture = < Downsample1Img >;
MinFilter = Linear; MagFilter = Linear; MipFilter = Linear;
AddressU = Clamp; AddressV = Clamp;
};
struct input
{
float4 pos : POSITION;
float2 uv : TEXCOORD0;
};

struct output {
float4 pos: POSITION;
float2 uv: TEXCOORD0;
};
output VS( input IN )
{
output OUT;
//quad needs to be shifted by half a pixel.
//Go here for more info: http://www.sjbrown.co.uk/?article=directx_texels

float4 oPos = float4( IN.pos.xy + float2( -1.0f/ViewSize.x, 1.0f/ViewSize.y ),0.0,1.0 );
OUT.pos = oPos;
float2 uv = (IN.pos.xy + 1.0) / 2.0;
uv.y = 1 - uv.y;
OUT.uv = uv;

return OUT;
}
//downsample used to blur the image
float4 PSDownsample( output IN, uniform sampler2D srcTex, uniform float reduceRatio ) : COLOR
{
float4 color = 0;
float2 scale = reduceRatio/ViewSize;

for (int i = 0; i < 9; i++)
{
//convert pixel offsets into texel offsets via the inverse view values.
color += tex2D( srcTex, IN.uv + PixelOffsets.xy*scale );
}
return color / 9;
}
//copy the low res downsample into a high res screen quad using bilinear filtering
float4 PSPresent( output IN, uniform sampler2D srcTex ) : COLOR
{
return tex2D(srcTex,IN.uv);
}

technique Blur
<
//specify where we want the original image to be put
string RenderColorTarget = "frame";
>
{
//downsample this image to achieve a blur effect
pass Downsample
<
string RenderColorTarget = "Downsample1Img";
>
{
ZEnable = False;
VertexShader = compile vs_1_1 VS();
PixelShader = compile ps_2_0 PSDownsample( frameSamp, 0.5 );
}

//send the blurred image to the screen
pass Present
<
string RenderColorTarget = "";
>
{
VertexShader = compile vs_1_1 VS();
PixelShader = compile ps_1_1 PSPresent( Downsample1Samp );
}
}

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement