00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "graphicsStateGuardian.h"
00016 #include "stencilRenderStates.h"
00017
00018
00019
00020
00021
00022 StencilRenderStates::
00023 StencilRenderStates (GraphicsStateGuardian *gsg) {
00024
00025 int index;
00026
00027
00028 for (index = 0; index < SRS_total; index++) {
00029 _stencil_render_state_array [index] = 0;
00030 _stencil_function_array [index] = 0;
00031 }
00032
00033
00034 set_stencil_render_state (false, SRS_reference, 0);
00035
00036 set_stencil_render_state (false, SRS_read_mask, ~0);
00037 set_stencil_render_state (false, SRS_write_mask, ~0);
00038
00039 set_stencil_render_state (false, SRS_front_enable, 0);
00040 set_stencil_render_state (false, SRS_front_comparison_function, SCF_always);
00041 set_stencil_render_state (false, SRS_front_stencil_fail_operation, SO_keep);
00042 set_stencil_render_state (false, SRS_front_stencil_pass_z_fail_operation, SO_keep);
00043 set_stencil_render_state (false, SRS_front_stencil_pass_z_pass_operation, SO_keep);
00044
00045 set_stencil_render_state (false, SRS_back_enable, 0);
00046 set_stencil_render_state (false, SRS_back_comparison_function, SCF_always);
00047 set_stencil_render_state (false, SRS_back_stencil_fail_operation, SO_keep);
00048 set_stencil_render_state (false, SRS_back_stencil_pass_z_fail_operation, SO_keep);
00049 set_stencil_render_state (false, SRS_back_stencil_pass_z_pass_operation, SO_keep);
00050
00051 _gsg = gsg;
00052 }
00053
00054
00055
00056
00057
00058 StencilRenderStates::
00059 ~StencilRenderStates (void) {
00060
00061 }
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 void StencilRenderStates::
00074 set_stencil_render_state (bool execute_function, StencilRenderStates::StencilRenderState stencil_render_state, StencilType value) {
00075
00076
00077 if (false) {
00078 printf ("SRS %d %d %d \n", execute_function, stencil_render_state, value);
00079 }
00080
00081 _stencil_render_state_array [stencil_render_state] = value;
00082
00083 if (execute_function) {
00084 StencilFunction stencil_function;
00085
00086 stencil_function = _stencil_function_array [stencil_render_state];
00087 if (stencil_function) {
00088 stencil_function (stencil_render_state, this);
00089 }
00090 }
00091 }
00092
00093
00094
00095
00096
00097
00098 StencilType StencilRenderStates::
00099 get_stencil_render_state (StencilRenderStates::StencilRenderState stencil_render_state) {
00100 return _stencil_render_state_array [stencil_render_state];
00101 }
00102
00103
00104
00105
00106
00107
00108 void StencilRenderStates::
00109 set_stencil_function (StencilRenderStates::StencilRenderState stencil_render_state, StencilFunction stencil_function) {
00110 _stencil_function_array [stencil_render_state] = stencil_function;
00111 }