Advertisement Jump to content
Sign in to follow this  

Scaling antes shading

This topic is 4991 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

My video texture is sampled by a couple of pixel shaders resulting in the output video image. Input texture, texture render targets and back buffer are all of the same size and it works fine. Now I need to scale the image. So e.g. my input 800x400 needs to be displayed in 1200x600. However, the image must be stretched (scaled) BEFORE the shaders are executed. The shaders output must not be disturbed (scaled). Suppose the shader makes every even pixel (x-axis) black. The original shows an image with black bars every even pixel. In the scaled image however, the bars or gaps are 2 pixels wide (but not always). This looks like the scaling is done after the shading. I started by just maping the texture coords to a bigger vertex buffer. Then I tried creating render target textures and back buffer of the required destination size. Now I'm just lost. How do I scale the image before the pixel shaders ?

Share this post

Link to post
Share on other sites
The pixel shader process one OUTPUT pixel so the scaling is done berfore the shader.
I think your problem comes from how you determine what is even and odd lines.
Are you using a texture for that?
Make sure that the texture coordinates for that "mask" texture matches the OUTPUT positions. My guess is that you're simply using a 800x400 texture as a mask. Since this is getting scaled also you're getting into trouble.
Either use a 1200x600 texture for the mask, or even better use some pixel-shader magic to determine if a line is even or odd.
For instance:
* Pass the row (as 0 - 600) to the pixel shader.
* Multiply this value by 0.5 (could be done before passing it to the shader).
* Use the frc instructions to get into [0, 1] interval. (Now < 0.5 means even else odd).
* Use the cmp instruction to get a mask.

Share this post

Link to post
Share on other sites
Pffff, I can't believe I fell for that...
I think my calculation is about the same:
if ( ( ( (PixelPosition.x * TextureWidth ) + 0.5) %2) < 1.0 ) -> even

Problem was I was uploading the TextureWidth of the original texture.
Thanx eq for pointing me in the right direction.

Share this post

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

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!