mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-05 11:28:17 -04:00
Add stencil buffer clear.
This commit is contained in:
parent
038ab01257
commit
6ec87e2506
@ -53,6 +53,9 @@ PUBLISHED:
|
|||||||
SRS_back_stencil_pass_z_fail_operation,
|
SRS_back_stencil_pass_z_fail_operation,
|
||||||
SRS_back_stencil_pass_z_pass_operation,
|
SRS_back_stencil_pass_z_pass_operation,
|
||||||
|
|
||||||
|
SRS_clear,
|
||||||
|
SRS_clear_value,
|
||||||
|
|
||||||
SRS_total,
|
SRS_total,
|
||||||
|
|
||||||
SRS_first = 0,
|
SRS_first = 0,
|
||||||
|
@ -5336,6 +5336,10 @@ do_issue_stencil() {
|
|||||||
stencil_render_states -> set_stencil_render_state (true, StencilRenderStates::SRS_read_mask, stencil -> get_render_state (StencilAttrib::SRS_read_mask));
|
stencil_render_states -> set_stencil_render_state (true, StencilRenderStates::SRS_read_mask, stencil -> get_render_state (StencilAttrib::SRS_read_mask));
|
||||||
stencil_render_states -> set_stencil_render_state (true, StencilRenderStates::SRS_write_mask, stencil -> get_render_state (StencilAttrib::SRS_write_mask));
|
stencil_render_states -> set_stencil_render_state (true, StencilRenderStates::SRS_write_mask, stencil -> get_render_state (StencilAttrib::SRS_write_mask));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stencil -> get_render_state (StencilAttrib::SRS_clear)) {
|
||||||
|
_d3d_device->Clear(0, NULL, D3DCLEAR_STENCIL, 0, 0.0f, stencil -> get_render_state (StencilAttrib::SRS_clear_value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
|
@ -46,6 +46,9 @@ stencil_render_state_name_array [StencilAttrib::SRS_total] =
|
|||||||
"SRS_back_stencil_fail_operation",
|
"SRS_back_stencil_fail_operation",
|
||||||
"SRS_back_stencil_pass_z_fail_operation",
|
"SRS_back_stencil_pass_z_fail_operation",
|
||||||
"SRS_back_stencil_pass_z_pass_operation",
|
"SRS_back_stencil_pass_z_pass_operation",
|
||||||
|
|
||||||
|
"SRS_clear",
|
||||||
|
"SRS_clear_value",
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
@ -73,6 +76,9 @@ StencilAttrib() {
|
|||||||
_stencil_render_states [SRS_back_stencil_fail_operation] = SO_keep;
|
_stencil_render_states [SRS_back_stencil_fail_operation] = SO_keep;
|
||||||
_stencil_render_states [SRS_back_stencil_pass_z_fail_operation] = SO_keep;
|
_stencil_render_states [SRS_back_stencil_pass_z_fail_operation] = SO_keep;
|
||||||
_stencil_render_states [SRS_back_stencil_pass_z_pass_operation] = SO_keep;
|
_stencil_render_states [SRS_back_stencil_pass_z_pass_operation] = SO_keep;
|
||||||
|
|
||||||
|
_stencil_render_states [SRS_clear] = 0;
|
||||||
|
_stencil_render_states [SRS_clear_value] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
@ -170,6 +176,97 @@ make_2_sided(
|
|||||||
return return_new(attrib);
|
return return_new(attrib);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: StencilAttrib::make
|
||||||
|
// Access: Published, Static
|
||||||
|
// Description: Constructs a front face StencilAttrib.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
CPT(RenderAttrib) StencilAttrib::
|
||||||
|
make_with_clear(
|
||||||
|
unsigned int front_enable,
|
||||||
|
unsigned int front_comparison_function,
|
||||||
|
unsigned int stencil_fail_operation,
|
||||||
|
unsigned int stencil_pass_z_fail_operation,
|
||||||
|
unsigned int front_stencil_pass_z_pass_operation,
|
||||||
|
unsigned int reference,
|
||||||
|
unsigned int read_mask,
|
||||||
|
unsigned int write_mask,
|
||||||
|
unsigned int clear,
|
||||||
|
unsigned int clear_value)
|
||||||
|
{
|
||||||
|
StencilAttrib *attrib = new StencilAttrib;
|
||||||
|
|
||||||
|
attrib->_stencil_render_states [SRS_front_enable] = front_enable;
|
||||||
|
attrib->_stencil_render_states [SRS_back_enable] = 0;
|
||||||
|
|
||||||
|
attrib->_stencil_render_states [SRS_front_comparison_function] = front_comparison_function;
|
||||||
|
attrib->_stencil_render_states [SRS_front_stencil_fail_operation] = stencil_fail_operation;
|
||||||
|
attrib->_stencil_render_states [SRS_front_stencil_pass_z_fail_operation] = stencil_pass_z_fail_operation;
|
||||||
|
attrib->_stencil_render_states [SRS_front_stencil_pass_z_pass_operation] = front_stencil_pass_z_pass_operation;
|
||||||
|
|
||||||
|
attrib->_stencil_render_states [SRS_reference] = reference;
|
||||||
|
attrib->_stencil_render_states [SRS_read_mask] = read_mask;
|
||||||
|
attrib->_stencil_render_states [SRS_write_mask] = write_mask;
|
||||||
|
|
||||||
|
attrib->_stencil_render_states [SRS_back_comparison_function] = SCF_always;
|
||||||
|
attrib->_stencil_render_states [SRS_back_stencil_fail_operation] = SO_keep;
|
||||||
|
attrib->_stencil_render_states [SRS_back_stencil_pass_z_fail_operation] = SO_keep;
|
||||||
|
attrib->_stencil_render_states [SRS_back_stencil_pass_z_pass_operation] = SO_keep;
|
||||||
|
|
||||||
|
attrib->_stencil_render_states [SRS_clear] = clear;
|
||||||
|
attrib->_stencil_render_states [SRS_clear_value] = clear_value;
|
||||||
|
|
||||||
|
return return_new(attrib);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: StencilAttrib::make_2_sided
|
||||||
|
// Access: Published, Static
|
||||||
|
// Description: Constructs a two-sided StencilAttrib.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
CPT(RenderAttrib) StencilAttrib::
|
||||||
|
make_2_sided_with_clear(
|
||||||
|
unsigned int front_enable,
|
||||||
|
unsigned int back_enable,
|
||||||
|
unsigned int front_comparison_function,
|
||||||
|
unsigned int stencil_fail_operation,
|
||||||
|
unsigned int stencil_pass_z_fail_operation,
|
||||||
|
unsigned int front_stencil_pass_z_pass_operation,
|
||||||
|
unsigned int reference,
|
||||||
|
unsigned int read_mask,
|
||||||
|
unsigned int write_mask,
|
||||||
|
unsigned int back_comparison_function,
|
||||||
|
unsigned int back_stencil_fail_operation,
|
||||||
|
unsigned int back_stencil_pass_z_fail_operation,
|
||||||
|
unsigned int back_stencil_pass_z_pass_operation,
|
||||||
|
unsigned int clear,
|
||||||
|
unsigned int clear_value)
|
||||||
|
{
|
||||||
|
StencilAttrib *attrib = new StencilAttrib;
|
||||||
|
|
||||||
|
attrib->_stencil_render_states [SRS_front_enable] = front_enable;
|
||||||
|
attrib->_stencil_render_states [SRS_back_enable] = back_enable;
|
||||||
|
|
||||||
|
attrib->_stencil_render_states [SRS_front_comparison_function] = front_comparison_function;
|
||||||
|
attrib->_stencil_render_states [SRS_front_stencil_fail_operation] = stencil_fail_operation;
|
||||||
|
attrib->_stencil_render_states [SRS_front_stencil_pass_z_fail_operation] = stencil_pass_z_fail_operation;
|
||||||
|
attrib->_stencil_render_states [SRS_front_stencil_pass_z_pass_operation] = front_stencil_pass_z_pass_operation;
|
||||||
|
|
||||||
|
attrib->_stencil_render_states [SRS_reference] = reference;
|
||||||
|
attrib->_stencil_render_states [SRS_read_mask] = read_mask;
|
||||||
|
attrib->_stencil_render_states [SRS_write_mask] = write_mask;
|
||||||
|
|
||||||
|
attrib->_stencil_render_states [SRS_back_comparison_function] = back_comparison_function;
|
||||||
|
attrib->_stencil_render_states [SRS_back_stencil_fail_operation] = back_stencil_fail_operation;
|
||||||
|
attrib->_stencil_render_states [SRS_back_stencil_pass_z_fail_operation] = back_stencil_pass_z_fail_operation;
|
||||||
|
attrib->_stencil_render_states [SRS_back_stencil_pass_z_pass_operation] = back_stencil_pass_z_pass_operation;
|
||||||
|
|
||||||
|
attrib->_stencil_render_states [SRS_clear] = clear;
|
||||||
|
attrib->_stencil_render_states [SRS_clear_value] = clear_value;
|
||||||
|
|
||||||
|
return return_new(attrib);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: StencilAttrib::output
|
// Function: StencilAttrib::output
|
||||||
// Access: Public, Virtual
|
// Access: Public, Virtual
|
||||||
|
@ -34,6 +34,7 @@ class FactoryParams;
|
|||||||
// get_supports_two_sided_stencil.
|
// get_supports_two_sided_stencil.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
class EXPCL_PANDA StencilAttrib : public RenderAttrib {
|
class EXPCL_PANDA StencilAttrib : public RenderAttrib {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
StencilAttrib();
|
StencilAttrib();
|
||||||
|
|
||||||
@ -59,6 +60,9 @@ PUBLISHED:
|
|||||||
SRS_back_stencil_pass_z_fail_operation,
|
SRS_back_stencil_pass_z_fail_operation,
|
||||||
SRS_back_stencil_pass_z_pass_operation,
|
SRS_back_stencil_pass_z_pass_operation,
|
||||||
|
|
||||||
|
SRS_clear,
|
||||||
|
SRS_clear_value,
|
||||||
|
|
||||||
SRS_total,
|
SRS_total,
|
||||||
|
|
||||||
SRS_first = 0,
|
SRS_first = 0,
|
||||||
@ -120,11 +124,40 @@ PUBLISHED:
|
|||||||
unsigned int back_stencil_pass_z_fail_operation,
|
unsigned int back_stencil_pass_z_fail_operation,
|
||||||
unsigned int back_stencil_pass_z_pass_operation);
|
unsigned int back_stencil_pass_z_pass_operation);
|
||||||
|
|
||||||
|
static CPT(RenderAttrib) make_with_clear(
|
||||||
|
unsigned int front_enable,
|
||||||
|
unsigned int front_comparison_function,
|
||||||
|
unsigned int stencil_fail_operation,
|
||||||
|
unsigned int stencil_pass_z_fail_operation,
|
||||||
|
unsigned int front_stencil_pass_z_pass_operation,
|
||||||
|
unsigned int reference,
|
||||||
|
unsigned int read_mask,
|
||||||
|
unsigned int write_mask,
|
||||||
|
unsigned int clear,
|
||||||
|
unsigned int clear_value);
|
||||||
|
|
||||||
|
static CPT(RenderAttrib) make_2_sided_with_clear(
|
||||||
|
unsigned int front_enable,
|
||||||
|
unsigned int back_enable,
|
||||||
|
unsigned int front_comparison_function,
|
||||||
|
unsigned int stencil_fail_operation,
|
||||||
|
unsigned int stencil_pass_z_fail_operation,
|
||||||
|
unsigned int front_stencil_pass_z_pass_operation,
|
||||||
|
unsigned int reference,
|
||||||
|
unsigned int read_mask,
|
||||||
|
unsigned int write_mask,
|
||||||
|
unsigned int back_comparison_function,
|
||||||
|
unsigned int back_stencil_fail_operation,
|
||||||
|
unsigned int back_stencil_pass_z_fail_operation,
|
||||||
|
unsigned int back_stencil_pass_z_pass_operation,
|
||||||
|
unsigned int clear,
|
||||||
|
unsigned int clear_value);
|
||||||
|
|
||||||
INLINE unsigned int get_render_state (unsigned int render_state_identifier) const;
|
INLINE unsigned int get_render_state (unsigned int render_state_identifier) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static char *stencil_render_state_name_array [SRS_total];
|
static char *stencil_render_state_name_array [SRS_total];
|
||||||
|
|
||||||
virtual void output(ostream &out) const;
|
virtual void output(ostream &out) const;
|
||||||
virtual void store_into_slot(AttribSlots *slots) const;
|
virtual void store_into_slot(AttribSlots *slots) const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user