• Advertisement
Sign in to follow this  

stencil buffer

This topic is 1802 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 am rendering to all the texels of a texture using a quad and I am rendering many instances(like 1000) of this quad to the same texture.

Every instance I render I will increase the alpha of each texel by 1(somethimes it will not, it depends on a operation inside the pixel shader), I want to stop rendering to a texel when the alpha value of this texel reaches a number.

 

I can't read the alpha value when rendering in this way to a texture, so I thought of moving the counter to a stencil buffer but I cant think of a way to configure the stencil so that it stops rendering to a texel when the stencil value of it reaches a number, lets say 255(that's the maximum number)

 

Can someone help me, is this possible?

Share this post


Link to post
Share on other sites
Advertisement

You will need to do it in two passes. The first pass turn off writting to the frame buffer. Then set up your depth buffer to increment everytime you write a pixel to an location. Then on your second pass turn on writting to the frame buffer, and tell the stencil buffer to skip any pixel that is 255 or above.

Edited by BornToCode

Share this post


Link to post
Share on other sites

This is the first time I'm using the stencil buffer.

I have a question, the two values that will go to the stencil function, one value comes from the value that the stencil buffer already has, where does the other comes?

Edited by lomateron

Share this post


Link to post
Share on other sites

The stencil takes a depth test pass and a depth test fail. You can tell it what you want it to do when either of those things happens. In your case you want to have the value increase when the depth test pass and have it do nothing when the depth test fails.

Share this post


Link to post
Share on other sites

I will like to know the anwer to my last question, I think I can solve this if I know where the value comes from.

 

I know now,the other value comes from OMSetDepthStencilState() second parameter.

 

Now I know how to solve this:

 

the pixel shader will tell if I increase or not the stencil by using the SV_Depth value, if the depth value returned by the pixel shader is 1 it passes the depth test, if it isn't, it fails the depth test.

 

If it passes the depth test, I do the stencil test: If the stencil value is equal to "OMSetDepthStencilState() second parameter"(255 in this case) it fails the test if it isn't then I increase the stencil value by one.

 

 that's all.

Edited by lomateron

Share this post


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

  • Advertisement