• Advertisement
Sign in to follow this  

Fringes around textures

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

I'm getting some strange fringes around some textures at specific sizes that I cannot figure out how to get rid of. I'm rendering the primitives to an off-screen surface then rendering the result of that texture on another primitive on the screen. The off-screen rendering supports MSAA but with or without it the problem persists. It doesn't seem to affect all textures either. If the texture is larger than 512 in either dimension then it doesn't have the problem.

 

You can see the fringes around the outside of the two textures in this screenshot. One is a solid white 311x100 JPEG and the other is a 152x95 PNG. The image format doesn't seem to matter, just the size. Whether or not the image has an alpha channel doesn't affect it either.

 

[attachment=15272:RenderingError.png]

 

I've tried debugging the problem in PIX and noticed that there is a bunch of garbage data around the textures, but even if I zero out the texture memory it doesn't get rid of it for some of them so I'm not sure what's going on there. You can see in the screenshot below that there's a bunch of white where there should be nothing but empty space to the right of the texture since it's only using 311x100 of the available space.

 

[attachment=15274:PixTextureData.png]

 

P.S. This is all with DirectX 9 btw.

Edited by Shenjoku

Share this post


Link to post
Share on other sites
Advertisement

Are you sure AddressU and AddressV in D3D11_SAMPLER_DESC for your sampler are set to D3D11_TEXTURE_ADDRESS_CLAMP? I had a border issue with a skybox but when I set it to clamp the border went away.

Share this post


Link to post
Share on other sites

Linear filtering means that, for the border pixels, it's probably taking a sample from just outside the edge of the texture. I think when you create your texture, you need to "continue" the border into the "empty" areas of the texture. Or else, when you're drawing your texture, push your texture coordinates just inside the valid part of the texture (of course, then when you draw at smaller sizes, the artifact may creep in again).

 

(why are you using a 311x100 solid white texture? A 1x1 white texture would serve just as well).

Edited by phil_t

Share this post


Link to post
Share on other sites

Linear filtering means that, for the border pixels, it's probably taking a sample from just outside the edge of the texture. I think when you create your texture, you need to "continue" the border into the "empty" areas of the texture. Or else, when you're drawing your texture, push your texture coordinates just inside the valid part of the texture (of course, then when you draw at smaller sizes, the artifact may creep in again).

Interesting. I didn't know that. I'll give that a shot and see what happens.

 

(why are you using a 311x100 solid white texture? A 1x1 white texture would serve just as well).

I know. It's just a test texture that copies the size of another image that the bug was reported with.
 

Are you sure AddressU and AddressV in D3D11_SAMPLER_DESC for your sampler are set to D3D11_TEXTURE_ADDRESS_CLAMP? I had a border issue with a skybox but when I set it to clamp the border went away.

I'm using DirectX 9. I guess I should have put that in the original post. I'll update it now. Thanks for the tip though. The default for texture addressing mode is wrap so we were wrapping. Changing it to clamp fixed part of the problem.

Edited by Shenjoku

Share this post


Link to post
Share on other sites

Well that seems to have done it! I changed the texture address mode to clamp, since wrap is the default, and added code to copy the last row/column as suggested and the problem is gone. Thanks a lot for the help. This was a very annoying bug.

Share this post


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

  • Advertisement