Sign in to follow this  
lomateron

stencil buffer

Recommended Posts

lomateron    491

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
BornToCode    1185

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
lomateron    491

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
BornToCode    1185

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
lomateron    491

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this