Jump to content

  • Log In with Google      Sign In   
  • Create Account

stencil buffer


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 lomateron   Members   -  Reputation: 342

Like
0Likes
Like

Posted 16 February 2013 - 09:56 AM

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?



Sponsor:

#2 BornToCode   Members   -  Reputation: 927

Like
0Likes
Like

Posted 16 February 2013 - 10:54 AM

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, 16 February 2013 - 10:55 AM.


#3 lomateron   Members   -  Reputation: 342

Like
0Likes
Like

Posted 16 February 2013 - 11:19 AM

how can I increment the depth value? the stencil value is the one I know to increment



#4 lomateron   Members   -  Reputation: 342

Like
0Likes
Like

Posted 16 February 2013 - 11:35 AM

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, 16 February 2013 - 12:37 PM.


#5 BornToCode   Members   -  Reputation: 927

Like
0Likes
Like

Posted 16 February 2013 - 12:46 PM

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.



#6 lomateron   Members   -  Reputation: 342

Like
0Likes
Like

Posted 16 February 2013 - 01:13 PM

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, 16 February 2013 - 03:51 PM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS