VirtualBox

Changeset 44326 in vbox for trunk/src/VBox/GuestHost/OpenGL


Ignore:
Timestamp:
Jan 22, 2013 8:18:51 AM (12 years ago)
Author:
vboxsync
Message:

crOpenGL: 1. stencil state fixes, 2. missing gets

Location:
trunk/src/VBox/GuestHost/OpenGL
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/OpenGL/Makefile.kmk

    r43888 r44326  
    448448        $(VBOX_PATH_CROGL_GENFILES)/state_polygon_gen.c \
    449449        $(VBOX_PATH_CROGL_GENFILES)/state_regcombiner_gen.c \
    450         $(VBOX_PATH_CROGL_GENFILES)/state_stencil_gen.c \
    451450        $(VBOX_PATH_CROGL_GENFILES)/state_viewport_gen.c \
    452451        $(VBOX_PATH_CROGL_GENFILES)/state_get.c \
     
    463462        $(VBOX_PATH_CROGL_GENFILES)/state_polygon_gen.c \
    464463        $(VBOX_PATH_CROGL_GENFILES)/state_regcombiner_gen.c \
    465         $(VBOX_PATH_CROGL_GENFILES)/state_stencil_gen.c \
    466464        $(VBOX_PATH_CROGL_GENFILES)/state_viewport_gen.c \
    467465        $(VBOX_PATH_CROGL_GENFILES)/state_get.c \
     
    548546        $(call MSG_GENERATE,python,$@,$<)
    549547        $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $(<D)/gendiffcode.py regcombiner RegCombiner $(<D)
    550 
    551 $(VBOX_PATH_CROGL_GENFILES)/state_stencil_gen.c: $(addprefix $(PATH_SUB_CURRENT)/state_tracker/, state_stencil.txt gendiffcode.py) | $$(dir $$@)
    552         $(call MSG_GENERATE,python,$@,$<)
    553         $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $(<D)/gendiffcode.py stencil Stencil $(<D)
    554548
    555549$(VBOX_PATH_CROGL_GENFILES)/state_viewport_gen.c: $(addprefix $(PATH_SUB_CURRENT)/state_tracker/, state_viewport.txt gendiffcode.py) | $$(dir $$@)
  • trunk/src/VBox/GuestHost/OpenGL/glapi_parser/APIspec.txt

    r43888 r44326  
    25802580return      void
    25812581param       pname       GLenum
    2582 paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV
     2582paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV GL_READ_FRAMEBUFFER_BINDING_EXT GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_ACTIVE_STENCIL_FACE_EXT
    25832583param       params      GLboolean *
    25842584category    1.0
     
    26002600return      void
    26012601param       pname       GLenum
    2602 paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV
     2602paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV GL_READ_FRAMEBUFFER_BINDING_EXT GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_READ_FRAMEBUFFER_BINDING_EXT GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_ACTIVE_STENCIL_FACE_EXT
    26032603param       params      GLdouble *
    26042604category    1.0
     
    26152615return      void
    26162616param       pname       GLenum
    2617 paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV
     2617paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV GL_READ_FRAMEBUFFER_BINDING_EXT GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_ACTIVE_STENCIL_FACE_EXT
    26182618param       params      GLfloat *
    26192619category    1.0
     
    26242624return      void
    26252625param       pname       GLenum
    2626 paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV GL_FRAMEBUFFER_BINDING_EXT GL_RENDERBUFFER_BINDING_EXT GL_MAX_COLOR_ATTACHMENTS_EXT GL_MAX_RENDERBUFFER_SIZE_EXT
     2626paramprop   pname       GL_ACCUM_ALPHA_BITS GL_ACCUM_BLUE_BITS GL_ACCUM_CLEAR_VALUE GL_ACCUM_GREEN_BITS GL_ACCUM_RED_BITS GL_ACTIVE_TEXTURE_ARB GL_ALIASED_LINE_WIDTH_RANGE GL_ALIASED_POINT_SIZE_RANGE GL_ALPHA_BIAS GL_ALPHA_BITS GL_ALPHA_SCALE GL_ALPHA_TEST GL_ALPHA_TEST_FUNC GL_ALPHA_TEST_REF GL_ATTRIB_STACK_DEPTH GL_AUTO_NORMAL GL_AUX_BUFFERS GL_BLEND GL_BLEND_COLOR GL_BLEND_DST GL_BLEND_EQUATION GL_BLEND_SRC GL_BLUE_BIAS GL_BLUE_BITS GL_BLUE_SCALE GL_CLIENT_ACTIVE_TEXTURE_ARB GL_CLIENT_ATTRIB_STACK_DEPTH GL_COLOR_ARRAY GL_COLOR_ARRAY_SIZE GL_COLOR_ARRAY_STRIDE GL_COLOR_ARRAY_TYPE GL_COLOR_CLEAR_VALUE GL_COLOR_LOGIC_OP GL_COLOR_MATERIAL GL_COLOR_MATERIAL_FACE GL_COLOR_MATERIAL_PARAMETER GL_COLOR_MATRIX_STACK_DEPTH GL_COLOR_WRITEMASK GL_CULL_FACE GL_CULL_FACE_MODE GL_CURRENT_COLOR GL_CURRENT_INDEX GL_CURRENT_NORMAL GL_CURRENT_RASTER_COLOR GL_CURRENT_RASTER_DISTANCE GL_CURRENT_RASTER_INDEX GL_CURRENT_RASTER_POSITION GL_CURRENT_RASTER_POSITION_VALID GL_CURRENT_RASTER_TEXTURE_COORDS GL_CURRENT_TEXTURE_COORDS GL_DEPTH_BIAS GL_DEPTH_BITS GL_DEPTH_CLEAR_VALUE GL_DEPTH_FUNC GL_DEPTH_RANGE GL_DEPTH_SCALE GL_DEPTH_TEST GL_DEPTH_WRITEMASK GL_DITHER GL_DOUBLEBUFFER GL_DRAW_BUFFER GL_EDGE_FLAG GL_EDGE_FLAG_ARRAY GL_EDGE_FLAG_ARRAY_STRIDE GL_FEEDBACK_BUFFER_SIZE GL_FEEDBACK_BUFFER_TYPE GL_FOG GL_FOG_COLOR GL_FOG_DENSITY GL_FOG_END GL_FOG_HINT GL_FOG_INDEX GL_FOG_MODE GL_FOG_START GL_FRONT_FACE GL_GREEN_BIAS GL_GREEN_BITS GL_GREEN_SCALE GL_INDEX_ARRAY GL_INDEX_ARRAY_STRIDE GL_INDEX_ARRAY_TYPE GL_INDEX_BITS GL_INDEX_CLEAR_VALUE GL_INDEX_LOGIC_OP GL_INDEX_MODE GL_INDEX_OFFSET GL_INDEX_SHIFT GL_INDEX_WRITEMASK GL_LIGHTING GL_LIGHT_MODEL_AMBIENT GL_LIGHT_MODEL_COLOR_CONTROL GL_LIGHT_MODEL_LOCAL_VIEWER GL_LIGHT_MODEL_TWO_SIDE GL_LINE_SMOOTH GL_LINE_SMOOTH_HINT GL_LINE_STIPPLE GL_LINE_STIPPLE_PATTERN GL_LINE_STIPPLE_REPEAT GL_LINE_WIDTH GL_LINE_WIDTH_GRANULARITY GL_LINE_WIDTH_RANGE GL_LIST_BASE GL_LIST_INDEX GL_LIST_MODE GL_LOGIC_OP_MODE GL_MAP1_COLOR_4 GL_MAP1_GRID_DOMAIN GL_MAP1_GRID_SEGMENTS GL_MAP1_INDEX GL_MAP1_NORMAL GL_MAP1_TEXTURE_COORD_1 GL_MAP1_TEXTURE_COORD_2 GL_MAP1_TEXTURE_COORD_3 GL_MAP1_TEXTURE_COORD_4 GL_MAP1_VERTEX_3 GL_MAP1_VERTEX_4 GL_MAP2_COLOR_4 GL_MAP2_GRID_DOMAIN GL_MAP2_GRID_SEGMENTS GL_MAP2_INDEX GL_MAP2_NORMAL GL_MAP2_TEXTURE_COORD_1 GL_MAP2_TEXTURE_COORD_2 GL_MAP2_TEXTURE_COORD_3 GL_MAP2_TEXTURE_COORD_4 GL_MAP2_VERTEX_3 GL_MAP2_VERTEX_4 GL_MAP_COLOR GL_MAP_STENCIL GL_MATRIX_MODE GL_MAX_3D_TEXTURE_SIZE GL_MAX_ATTRIB_STACK_DEPTH GL_MAX_CLIENT_ATTRIB_STACK_DEPTH GL_MAX_CLIP_PLANES GL_MAX_COLOR_MATRIX_STACK_DEPTH GL_MAX_ELEMENTS_INDICES GL_MAX_ELEMENTS_VERTICES GL_MAX_EVAL_ORDER GL_MAX_LIGHTS GL_MAX_LIST_NESTING GL_MAX_MODELVIEW_STACK_DEPTH GL_MAX_NAME_STACK_DEPTH GL_MAX_PIXEL_MAP_TABLE GL_MAX_PROJECTION_STACK_DEPTH GL_MAX_TEXTURE_SIZE GL_MAX_TEXTURE_STACK_DEPTH GL_MAX_TEXTURE_UNITS_ARB GL_MAX_VIEWPORT_DIMS GL_MODELVIEW_MATRIX GL_MODELVIEW_STACK_DEPTH GL_NAME_STACK_DEPTH GL_NORMAL_ARRAY GL_NORMAL_ARRAY_STRIDE GL_NORMAL_ARRAY_TYPE GL_NORMALIZE GL_PACK_ALIGNMENT GL_PACK_IMAGE_HEIGHT GL_PACK_LSB_FIRST GL_PACK_ROW_LENGTH GL_PACK_SKIP_IMAGES GL_PACK_SKIP_PIXELS GL_PACK_SKIP_ROWS GL_PACK_SWAP_BYTES GL_PERSPECTIVE_CORRECTION_HINT GL_PIXEL_MAP_A_TO_A_SIZE GL_PIXEL_MAP_B_TO_B_SIZE GL_PIXEL_MAP_G_TO_G_SIZE GL_PIXEL_MAP_I_TO_A_SIZE GL_PIXEL_MAP_I_TO_B_SIZE GL_PIXEL_MAP_I_TO_G_SIZE GL_PIXEL_MAP_I_TO_I_SIZE GL_PIXEL_MAP_I_TO_R_SIZE GL_PIXEL_MAP_R_TO_R_SIZE GL_PIXEL_MAP_S_TO_S_SIZE GL_POINT_SIZE GL_POINT_SIZE_GRANULARITY GL_POINT_SIZE_RANGE GL_POINT_SMOOTH GL_POINT_SMOOTH_HINT GL_POLYGON_MODE GL_POLYGON_OFFSET_FACTOR GL_POLYGON_OFFSET_FILL GL_POLYGON_OFFSET_LINE GL_POLYGON_OFFSET_POINT GL_POLYGON_OFFSET_UNITS GL_POLYGON_SMOOTH GL_POLYGON_SMOOTH_HINT GL_POLYGON_STIPPLE GL_PROJECTION_MATRIX GL_PROJECTION_STACK_DEPTH GL_READ_BUFFER GL_RED_BIAS GL_RED_BITS GL_RED_SCALE GL_RENDER_MODE GL_RESCALE_NORMAL GL_RGBA_MODE GL_SCISSOR_BOX GL_SCISSOR_TEST GL_SELECTION_BUFFER_SIZE GL_SHADE_MODEL GL_SMOOTH_LINE_WIDTH_GRANULARITY GL_SMOOTH_LINE_WIDTH_RANGE GL_SMOOTH_POINT_SIZE_GRANULARITY GL_SMOOTH_POINT_SIZE_RANGE GL_STENCIL_BITS GL_STENCIL_CLEAR_VALUE GL_STENCIL_FAIL GL_STENCIL_FUNC GL_STENCIL_PASS_DEPTH_FAIL GL_STENCIL_PASS_DEPTH_PASS GL_STENCIL_REF GL_STENCIL_TEST GL_STENCIL_VALUE_MASK GL_STENCIL_WRITEMASK GL_STEREO GL_SUBPIXEL_BITS GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_BINDING_1D GL_TEXTURE_BINDING_2D GL_TEXTURE_BINDING_3D GL_TEXTURE_COORD_ARRAY GL_TEXTURE_COORD_ARRAY_SIZE GL_TEXTURE_COORD_ARRAY_STRIDE GL_TEXTURE_COORD_ARRAY_TYPE GL_TEXTURE_GEN_Q GL_TEXTURE_GEN_R GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_MATRIX GL_TEXTURE_STACK_DEPTH GL_UNPACK_ALIGNMENT GL_UNPACK_IMAGE_HEIGHT GL_UNPACK_LSB_FIRST GL_UNPACK_ROW_LENGTH GL_UNPACK_SKIP_IMAGES GL_UNPACK_SKIP_PIXELS GL_UNPACK_SKIP_ROWS GL_UNPACK_SWAP_BYTES GL_VERTEX_ARRAY GL_VERTEX_ARRAY_SIZE GL_VERTEX_ARRAY_STRIDE GL_VERTEX_ARRAY_TYPE GL_VIEWPORT GL_ZOOM_X GL_ZOOM_Y GL_CLIP_PLANE0 GL_CLIP_PLANE1 GL_CLIP_PLANE2 GL_CLIP_PLANE3 GL_CLIP_PLANE4 GL_CLIP_PLANE5 GL_LIGHT0 GL_LIGHT1 GL_LIGHT2 GL_LIGHT3 GL_LIGHT4 GL_LIGHT5 GL_LIGHT6 GL_LIGHT7 GL_MULTISAMPLE_ARB GL_SAMPLE_ALPHA_TO_COVERAGE_ARB GL_SAMPLE_ALPHA_TO_ONE_ARB GL_SAMPLE_COVERAGE_ARB GL_SAMPLE_BUFFERS_ARB GL_SAMPLES_ARB GL_SAMPLE_COVERAGE_VALUE_ARB GL_SAMPLE_COVERAGE_INVERT_ARB GL_POINT_SPRITE_ARB GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB GL_CLIP_VOLUME_CLIPPING_HINT_EXT GL_RASTER_POSITION_UNCLIPPED_IBM GL_GENERATE_MIPMAP_HINT_SGIS GL_FOG_DISTANCE_MODE_NV GL_TRANSPOSE_MODELVIEW_MATRIX_ARB GL_TRANSPOSE_PROJECTION_MATRIX_ARB GL_TRANSPOSE_TEXTURE_MATRIX_ARB GL_TRANSPOSE_COLOR_MATRIX_ARB GL_MAX_TEXTURE_LOD_BIAS_EXT GL_PER_STAGE_CONSTANTS_NV GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT GL_CURRENT_FOG_COORDINATE_EXT GL_FOG_COORDINATE_ARRAY_TYPE_EXT GL_FOG_COORDINATE_ARRAY_STRIDE_EXT GL_COLOR_SUM_EXT GL_CURRENT_SECONDARY_COLOR_EXT GL_SECONDARY_COLOR_ARRAY_SIZE_EXT GL_SECONDARY_COLOR_ARRAY_TYPE_EXT GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT GL_ARRAY_BUFFER_BINDING_ARB GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB GL_VERTEX_ARRAY_BUFFER_BINDING_ARB GL_NORMAL_ARRAY_BUFFER_BINDING_ARB GL_COLOR_ARRAY_BUFFER_BINDING_ARB GL_INDEX_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB GL_TEXTURE_RECTANGLE_NV GL_TEXTURE_BINDING_RECTANGLE_NV GL_MAX_RECTANGLE_TEXTURE_SIZE_NV GL_FRAMEBUFFER_BINDING_EXT GL_RENDERBUFFER_BINDING_EXT GL_MAX_COLOR_ATTACHMENTS_EXT GL_MAX_RENDERBUFFER_SIZE_EXT GL_READ_FRAMEBUFFER_BINDING_EXT GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_ACTIVE_STENCIL_FACE_EXT
    26272627param       params      GLint *
    26282628category    1.0
  • trunk/src/VBox/GuestHost/OpenGL/include/cr_version.h

    r44290 r44326  
    2020#define SHCROGL_SSM_VERSION_WITH_STATE_BITS            33
    2121#define SHCROGL_SSM_VERSION_WITH_WINDOW_CTX_USAGE      33
    22 #define SHCROGL_SSM_VERSION                            33
     22#define SHCROGL_SSM_VERSION_WITH_FIXED_STENCIL         34
     23#define SHCROGL_SSM_VERSION                            34
    2324
    2425/* These define the Chromium release number.
  • trunk/src/VBox/GuestHost/OpenGL/include/state/cr_attrib.h

    r41128 r44326  
    246246        GLint           clearValue;
    247247        GLint           writeMask;
     248} CRStencilBufferStack_v_33;
     249
     250typedef struct {
     251    /* true if stencil test is enabled */
     252    GLboolean   stencilTest;
     253    /* true if GL_EXT_stencil_two_side is enabled (glEnable(GL_STENCIL_TEST_TWO_SIDE_EXT)) */
     254    GLboolean   stencilTwoSideEXT;
     255    /* GL_FRONT or GL_BACK */
     256    GLenum      activeStencilFace;
     257    GLint       clearValue;
     258    GLint       writeMask;
     259    CRStencilBufferState buffers[CRSTATE_STENCIL_BUFFER_COUNT];
    248260} CRStencilBufferStack;
    249261
  • trunk/src/VBox/GuestHost/OpenGL/include/state/cr_stencil.h

    r15532 r44326  
    1212
    1313#include <iprt/cdefs.h>
     14#include <iprt/assert.h>
    1415
    1516#ifdef __cplusplus
     
    1718#endif
    1819
     20#define CRSTATE_STENCIL_BUFFER_ID_FRONT         0
     21#define CRSTATE_STENCIL_BUFFER_ID_BACK          1
     22#define CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK 2
     23#define CRSTATE_STENCIL_BUFFER_COUNT            3
     24
     25/* stencil buffer settings were accessed with StencilXxx with ActiveStencilFaceEXT == GL_FRONT or StencilXxxSeparate(GL_FRONT_AND_BACK) */
     26#define CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK     0
     27/* stencil buffer settings were accessed with StencilXxxSeparate(GL_FRONT_FRONT) */
     28#define CRSTATE_STENCIL_BUFFER_REF_ID_FRONT              1
     29/* stencil buffer settings were accessed with StencilXxxSeparate(GL_FRONT_BACK) */
     30#define CRSTATE_STENCIL_BUFFER_REF_ID_BACK               2
     31/* stencil buffer settings were accessed with StencilXxx with ActiveStencilFaceEXT == GL_BACK */
     32#define CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK      3
     33#define CRSTATE_STENCIL_BUFFER_REF_COUNT                 4
     34
    1935typedef struct {
    20         CRbitvalue dirty[CR_MAX_BITARRAY];
    21         CRbitvalue enable[CR_MAX_BITARRAY];
    22         CRbitvalue func[CR_MAX_BITARRAY];
    23         CRbitvalue op[CR_MAX_BITARRAY];
    24         CRbitvalue clearValue[CR_MAX_BITARRAY];
    25         CRbitvalue writeMask[CR_MAX_BITARRAY];
     36    CRbitvalue dirty[CR_MAX_BITARRAY];
     37    CRbitvalue enable[CR_MAX_BITARRAY];
     38    CRbitvalue func[CR_MAX_BITARRAY];
     39    CRbitvalue op[CR_MAX_BITARRAY];
     40    CRbitvalue clearValue[CR_MAX_BITARRAY];
     41    CRbitvalue writeMask[CR_MAX_BITARRAY];
     42} CRStencilBits_v_33;
     43
     44typedef struct {
     45    CRbitvalue func[CR_MAX_BITARRAY];
     46    CRbitvalue op[CR_MAX_BITARRAY];
     47} CRStencilBufferRefBits;
     48
     49typedef struct {
     50    CRbitvalue dirty[CR_MAX_BITARRAY];
     51    CRbitvalue enable[CR_MAX_BITARRAY];
     52    CRbitvalue enableTwoSideEXT[CR_MAX_BITARRAY];
     53    CRbitvalue activeStencilFace[CR_MAX_BITARRAY];
     54    CRbitvalue clearValue[CR_MAX_BITARRAY];
     55    CRbitvalue writeMask[CR_MAX_BITARRAY];
     56    /* note: here we use _BUFFER_REF_ rather than _REF_ because we track the way buffers are accessed here,
     57     * to ensure the correct function is called on hw->chromium state restoration,
     58     * i.e. we want to avoid always calling StencilXxxSeparate, but call StencilXxx when it was actually called */
     59    CRStencilBufferRefBits bufferRefs[CRSTATE_STENCIL_BUFFER_REF_COUNT];
    2660} CRStencilBits;
    2761
    2862typedef struct {
     63    GLboolean   stencilTest;
     64    GLenum      func;
     65    GLint       mask;
     66    GLint       ref;
     67    GLenum      fail;
     68    GLenum      passDepthFail;
     69    GLenum      passDepthPass;
     70    GLint       clearValue;
     71    GLint       writeMask;
     72} CRStencilState_v_33;
     73
     74typedef struct {
     75    GLenum      func;
     76    GLint       mask;
     77    GLint       ref;
     78    GLenum      fail;
     79    GLenum      passDepthFail;
     80    GLenum      passDepthPass;
     81} CRStencilBufferState;
     82
     83typedef struct {
     84    /* true if stencil test is enabled */
    2985        GLboolean       stencilTest;
    30         GLenum          func;
    31         GLint           mask;
    32         GLint           ref;
    33         GLenum          fail;
    34         GLenum          passDepthFail;
    35         GLenum          passDepthPass;
    36         GLint           clearValue;
    37         GLint           writeMask;
     86        /* true if GL_EXT_stencil_two_side is enabled (glEnable(GL_STENCIL_TEST_TWO_SIDE_EXT)) */
     87        GLboolean   stencilTwoSideEXT;
     88        /* GL_FRONT or GL_BACK */
     89    GLenum      activeStencilFace;
     90    GLint       clearValue;
     91    GLint       writeMask;
     92        CRStencilBufferState buffers[CRSTATE_STENCIL_BUFFER_COUNT];
    3893} CRStencilState;
    3994
    4095DECLEXPORT(void) crStateStencilInit(CRContext *ctx);
     96DECLEXPORT(void) crStateStencilBufferInit(CRStencilBufferState *s);
    4197
    4298DECLEXPORT(void) crStateStencilDiff(CRStencilBits *bb, CRbitvalue *bitID,
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_attrib.c

    r31808 r44326  
    440440    {
    441441        a->stencilBufferStack[a->stencilBufferStackDepth].stencilTest = g->stencil.stencilTest;
    442         a->stencilBufferStack[a->stencilBufferStackDepth].func = g->stencil.func;
    443         a->stencilBufferStack[a->stencilBufferStackDepth].mask = g->stencil.mask;
    444         a->stencilBufferStack[a->stencilBufferStackDepth].ref = g->stencil.ref;
    445         a->stencilBufferStack[a->stencilBufferStackDepth].fail = g->stencil.fail;
    446         a->stencilBufferStack[a->stencilBufferStackDepth].passDepthFail = g->stencil.passDepthFail;
    447         a->stencilBufferStack[a->stencilBufferStackDepth].passDepthPass = g->stencil.passDepthPass;
    448442        a->stencilBufferStack[a->stencilBufferStackDepth].clearValue = g->stencil.clearValue;
    449443        a->stencilBufferStack[a->stencilBufferStackDepth].writeMask = g->stencil.writeMask;
     444        for (i = 0; i < CRSTATE_STENCIL_BUFFER_COUNT; ++i)
     445        {
     446            a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].func = g->stencil.buffers[i].func;
     447            a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].mask = g->stencil.buffers[i].mask;
     448            a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].ref = g->stencil.buffers[i].ref;
     449            a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].fail = g->stencil.buffers[i].fail;
     450            a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].passDepthFail = g->stencil.buffers[i].passDepthFail;
     451            a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].passDepthPass = g->stencil.buffers[i].passDepthPass;
     452        }
    450453        a->stencilBufferStackDepth++;
    451454    }
     
    10341037        a->stencilBufferStackDepth--;
    10351038        g->stencil.stencilTest = a->stencilBufferStack[a->stencilBufferStackDepth].stencilTest;
    1036         g->stencil.func = a->stencilBufferStack[a->stencilBufferStackDepth].func;
    1037         g->stencil.mask = a->stencilBufferStack[a->stencilBufferStackDepth].mask;
    1038         g->stencil.ref = a->stencilBufferStack[a->stencilBufferStackDepth].ref;
    1039         g->stencil.fail = a->stencilBufferStack[a->stencilBufferStackDepth].fail;
    1040         g->stencil.passDepthFail = a->stencilBufferStack[a->stencilBufferStackDepth].passDepthFail;
    1041         g->stencil.passDepthPass = a->stencilBufferStack[a->stencilBufferStackDepth].passDepthPass;
    10421039        g->stencil.clearValue = a->stencilBufferStack[a->stencilBufferStackDepth].clearValue;
    10431040        g->stencil.writeMask = a->stencilBufferStack[a->stencilBufferStackDepth].writeMask;
     1041        for (i = 0; i < CRSTATE_STENCIL_BUFFER_COUNT; ++i)
     1042        {
     1043            g->stencil.buffers[i].func = a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].func;
     1044            g->stencil.buffers[i].mask = a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].mask;
     1045            g->stencil.buffers[i].ref = a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].ref;
     1046            g->stencil.buffers[i].fail = a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].fail;
     1047            g->stencil.buffers[i].passDepthFail = a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].passDepthFail;
     1048            g->stencil.buffers[i].passDepthPass = a->stencilBufferStack[a->stencilBufferStackDepth].buffers[i].passDepthPass;
     1049        }
     1050
    10441051        DIRTY(sb->stencil.dirty, g->neg_bitid);
    10451052        DIRTY(sb->stencil.enable, g->neg_bitid);
    1046         DIRTY(sb->stencil.func, g->neg_bitid);
    1047         DIRTY(sb->stencil.op, g->neg_bitid);
    10481053        DIRTY(sb->stencil.clearValue, g->neg_bitid);
    10491054        DIRTY(sb->stencil.writeMask, g->neg_bitid);
     1055
     1056        for (i = 0; i < CRSTATE_STENCIL_BUFFER_REF_COUNT; ++i)
     1057        {
     1058            DIRTY(sb->stencil.bufferRefs[i].func, g->neg_bitid);
     1059            DIRTY(sb->stencil.bufferRefs[i].op, g->neg_bitid);
     1060        }
    10501061    }
    10511062    if (mask & GL_TEXTURE_BIT)
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_bits_globalop.h

    r44290 r44326  
    1919#include <iprt/cdefs.h>
    2020
     21#include <cr_version.h>
     22
    2123#ifndef CRSTATE_BITS_OP
    2224# error "CRSTATE_BITS_OP must be defined!"
     
    2527#define _CRSTATE_BITS_OP_SIZEOF(_val) CRSTATE_BITS_OP(_val, RT_SIZEOFMEMB(CRStateBits, _val))
    2628
     29#ifndef CRSTATE_BITS_OP_VERSION
     30# define CRSTATE_BITS_OP_VERSION SHCROGL_SSM_VERSION
     31#endif
     32
    2733do {
    2834int i;
     35#ifdef _CRSTATE_BITS_OP_STENCIL_V_33
     36# error "_CRSTATE_BITS_OP_STENCIL_V_33 must no be defined!"
     37#endif
     38#if CRSTATE_BITS_OP_VERSION < SHCROGL_SSM_VERSION_WITH_FIXED_STENCIL
     39# define _CRSTATE_BITS_OP_STENCIL_V_33
     40#endif
     41
     42#ifdef _CRSTATE_BITS_OP_STENCIL_V_33
     43# ifndef CRSTATE_BITS_OP_STENCIL_OP_V_33
     44#  error "CRSTATE_BITS_OP_STENCIL_OP_V_33 undefined!"
     45# endif
     46# ifndef CRSTATE_BITS_OP_STENCIL_FUNC_V_33
     47#  error "CRSTATE_BITS_OP_STENCIL_FUNC_V_33 undefined!"
     48# endif
     49#endif
     50
    2951_CRSTATE_BITS_OP_SIZEOF(attrib.dirty);
    3052
     
    258280_CRSTATE_BITS_OP_SIZEOF(stencil.dirty);
    259281_CRSTATE_BITS_OP_SIZEOF(stencil.enable);
    260 _CRSTATE_BITS_OP_SIZEOF(stencil.func);
    261 _CRSTATE_BITS_OP_SIZEOF(stencil.op);
     282#ifdef _CRSTATE_BITS_OP_STENCIL_V_33
     283_CRSTATE_BITS_OP_SIZEOF(stencil.bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].func);
     284_CRSTATE_BITS_OP_SIZEOF(stencil.bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].op);
     285for (i = CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK + 1; i < CRSTATE_STENCIL_BUFFER_REF_COUNT; ++i)
     286{
     287    CRSTATE_BITS_OP_STENCIL_FUNC_V_33(i, stencil.bufferRefs[i].func);
     288    CRSTATE_BITS_OP_STENCIL_OP_V_33(i, stencil.bufferRefs[i].op);
     289}
    262290_CRSTATE_BITS_OP_SIZEOF(stencil.clearValue);
    263291_CRSTATE_BITS_OP_SIZEOF(stencil.writeMask);
     292#else
     293_CRSTATE_BITS_OP_SIZEOF(stencil.enableTwoSideEXT);
     294_CRSTATE_BITS_OP_SIZEOF(stencil.activeStencilFace);
     295_CRSTATE_BITS_OP_SIZEOF(stencil.clearValue);
     296_CRSTATE_BITS_OP_SIZEOF(stencil.writeMask);
     297for (i = 0; i < CRSTATE_STENCIL_BUFFER_REF_COUNT; ++i)
     298{
     299    _CRSTATE_BITS_OP_SIZEOF(stencil.bufferRefs[i].func);
     300    _CRSTATE_BITS_OP_SIZEOF(stencil.bufferRefs[i].op);
     301}
     302#endif
    264303
    265304_CRSTATE_BITS_OP_SIZEOF(texture.dirty);
     
    292331
    293332} while (0);
     333
     334#undef CRSTATE_BITS_OP_VERSION
     335#undef _CRSTATE_BITS_OP_STENCIL_V_33
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_enable.c

    r15532 r44326  
    497497                                crStateDisableClientState(cap);
    498498                        break;
     499#ifdef CR_EXT_stencil_two_side
     500                case GL_STENCIL_TEST_TWO_SIDE_EXT:
     501            g->stencil.stencilTwoSideEXT= val;
     502            DIRTY(sb->stencil.enableTwoSideEXT, neg_bitid);
     503            DIRTY(sb->stencil.dirty, neg_bitid);
     504                    break;
     505#endif
    499506                default:
    500507                        crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glEnable/glDisable called with bogus cap: 0x%x", cap);
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_get.txt

    r31808 r44326  
    234234
    235235GLint     GL_STENCIL_CLEAR_VALUE      g->stencil.clearValue
    236 GLint     GL_STENCIL_FAIL             g->stencil.fail
    237 GLint     GL_STENCIL_FUNC             g->stencil.func
    238 GLint     GL_STENCIL_PASS_DEPTH_FAIL  g->stencil.passDepthFail
    239 GLint     GL_STENCIL_PASS_DEPTH_PASS  g->stencil.passDepthPass
    240 GLint     GL_STENCIL_REF              g->stencil.ref
     236GLint     GL_STENCIL_FAIL             g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_FRONT:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].fail
     237GLint     GL_STENCIL_BACK_FAIL        g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_BACK:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].fail
     238GLint     GL_STENCIL_FUNC             g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_FRONT:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].func
     239GLint     GL_STENCIL_BACK_FUNC        g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_BACK:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].func
     240GLint     GL_STENCIL_PASS_DEPTH_FAIL  g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_FRONT:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].passDepthFail
     241GLint     GL_STENCIL_BACK_PASS_DEPTH_FAIL  g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_BACK:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].passDepthFail
     242GLint     GL_STENCIL_PASS_DEPTH_PASS  g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_FRONT:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].passDepthPass
     243GLint     GL_STENCIL_BACK_PASS_DEPTH_PASS  g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_BACK:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].passDepthPass
     244GLint     GL_STENCIL_REF              g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_FRONT:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].ref
     245GLint     GL_STENCIL_BACK_REF         g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_BACK:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].ref
    241246GLboolean GL_STENCIL_TEST             g->stencil.stencilTest
    242 GLint     GL_STENCIL_VALUE_MASK       g->stencil.mask
     247GLint     GL_STENCIL_VALUE_MASK       g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_FRONT:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].mask
     248GLint     GL_STENCIL_BACK_VALUE_MASK  g->stencil.buffers[g->stencil.activeStencilFace==GL_FRONT?CRSTATE_STENCIL_BUFFER_ID_BACK:CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].mask
    243249GLint     GL_STENCIL_WRITEMASK        g->stencil.writeMask
    244250
     
    309315GLint GL_ARRAY_ELEMENT_LOCK_FIRST_EXT g->client.array.lockFirst
    310316GLint GL_ARRAY_ELEMENT_LOCK_COUNT_EXT g->client.array.lockCount
     317
     318GLint GL_ACTIVE_STENCIL_FACE_EXT g->stencil.activeStencilFace
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_init.c

    r44290 r44326  
    348348{
    349349    CRASSERT(g_pAvailableContexts[ctx->id] == ctx);
    350     if (ctx->id || ctx == defaultContext)
     350    if (g_pAvailableContexts[ctx->id] == ctx)
    351351    {
    352352        g_pAvailableContexts[ctx->id] = NULL;
    353353        --g_cContexts;
    354354        CRASSERT(g_cContexts < RT_ELEMENTS(g_pAvailableContexts));
     355    }
     356    else
     357    {
     358        crWarning("freeing context 0x%x, id(%d) not being in the context list", ctx, ctx->id);
    355359    }
    356360
     
    406410    for (i=0;i<CR_MAX_CONTEXTS;i++)
    407411        g_pAvailableContexts[i] = NULL;
     412    g_cContexts = 0;
    408413
    409414#ifdef CHROMIUM_THREADSAFE
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_lists.c

    r44117 r44326  
    296296    if (CHECKDIRTY(sb->stencil.dirty, negbitID))
    297297    {
     298        GLenum activeFace;
     299        GLboolean backIsSet = GL_FALSE, frontIsSet = GL_FALSE;
     300
    298301        if (CHECKDIRTY(sb->stencil.enable, negbitID))
    299302        {
     
    301304        }
    302305
    303         if (CHECKDIRTY(sb->stencil.func, negbitID))
    304         {
    305             CRSTATE_SET_ENUM(stencil.func, GL_STENCIL_FUNC);
    306                         CRSTATE_SET_INT(stencil.ref, GL_STENCIL_REF);
    307                         CRSTATE_SET_INT(stencil.mask, GL_STENCIL_VALUE_MASK);
    308         }
    309 
    310         if (CHECKDIRTY(sb->stencil.op, negbitID))
    311         {
    312             CRSTATE_SET_ENUM(stencil.fail, GL_STENCIL_FAIL);
    313                         CRSTATE_SET_ENUM(stencil.passDepthFail, GL_STENCIL_PASS_DEPTH_FAIL);
    314                         CRSTATE_SET_ENUM(stencil.passDepthPass, GL_STENCIL_PASS_DEPTH_PASS);
     306        if (CHECKDIRTY(sb->stencil.enableTwoSideEXT, negbitID))
     307        {
     308            CRSTATE_SET_ENABLED(stencil.stencilTwoSideEXT, GL_STENCIL_TEST_TWO_SIDE_EXT);
     309        }
     310
     311        if (CHECKDIRTY(sb->stencil.activeStencilFace, negbitID))
     312        {
     313            CRSTATE_SET_ENUM(stencil.activeStencilFace, GL_ACTIVE_STENCIL_FACE_EXT);
     314        }
     315
     316        activeFace = g->stencil.activeStencilFace;
     317
     318
     319#define CRSTATE_SET_STENCIL_FUNC(_idx, _suff) do { \
     320        CRSTATE_SET_ENUM(stencil.buffers[(_idx)].func, GL_STENCIL##_suff##FUNC); \
     321        CRSTATE_SET_INT(stencil.buffers[(_idx)].ref, GL_STENCIL##_suff##REF); \
     322        CRSTATE_SET_INT(stencil.buffers[(_idx)].mask, GL_STENCIL##_suff##VALUE_MASK); \
     323    } while (0)
     324
     325#define CRSTATE_SET_STENCIL_OP(_idx, _suff) do { \
     326        CRSTATE_SET_ENUM(stencil.buffers[(_idx)].fail, GL_STENCIL##_suff##FAIL); \
     327        CRSTATE_SET_ENUM(stencil.buffers[(_idx)].passDepthFail, GL_STENCIL##_suff##PASS_DEPTH_FAIL); \
     328        CRSTATE_SET_ENUM(stencil.buffers[(_idx)].passDepthPass, GL_STENCIL##_suff##PASS_DEPTH_PASS); \
     329    } while (0)
     330
     331        /* func */
     332
     333        if (CHECKDIRTY(sb->stencil.bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].func, negbitID))
     334        {
     335            /* this if branch is not needed here actually, just in case ogl drivers misbehave */
     336            if (activeFace == GL_BACK)
     337            {
     338                diff_api.ActiveStencilFaceEXT(GL_FRONT);
     339                activeFace = GL_FRONT;
     340            }
     341
     342            CRSTATE_SET_STENCIL_FUNC(CRSTATE_STENCIL_BUFFER_ID_BACK, _BACK_);
     343            backIsSet = GL_TRUE;
     344        }
     345
     346        if (CHECKDIRTY(sb->stencil.bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].func, negbitID))
     347        {
     348            if (activeFace == GL_BACK)
     349            {
     350                diff_api.ActiveStencilFaceEXT(GL_FRONT);
     351                activeFace = GL_FRONT;
     352            }
     353            CRSTATE_SET_STENCIL_FUNC(CRSTATE_STENCIL_BUFFER_ID_FRONT, _);
     354            frontIsSet = GL_TRUE;
     355        }
     356
     357        if ((!frontIsSet || !backIsSet) && CHECKDIRTY(sb->stencil.bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].func, negbitID))
     358        {
     359            if (activeFace == GL_BACK)
     360            {
     361                diff_api.ActiveStencilFaceEXT(GL_FRONT);
     362                activeFace = GL_FRONT;
     363            }
     364            CRSTATE_SET_STENCIL_FUNC(CRSTATE_STENCIL_BUFFER_ID_FRONT, _);
     365            if (!backIsSet)
     366            {
     367                g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func;
     368                g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].ref = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref;
     369                g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask;
     370            }
     371        }
     372
     373        /* op */
     374        backIsSet = GL_FALSE, frontIsSet = GL_FALSE;
     375
     376        if (CHECKDIRTY(sb->stencil.bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].op, negbitID))
     377        {
     378            /* this if branch is not needed here actually, just in case ogl drivers misbehave */
     379            if (activeFace == GL_BACK)
     380            {
     381                diff_api.ActiveStencilFaceEXT(GL_FRONT);
     382                activeFace = GL_FRONT;
     383            }
     384
     385            CRSTATE_SET_STENCIL_OP(CRSTATE_STENCIL_BUFFER_ID_BACK, _BACK_);
     386            backIsSet = GL_TRUE;
     387        }
     388
     389        if (CHECKDIRTY(sb->stencil.bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].op, negbitID))
     390        {
     391            if (activeFace == GL_BACK)
     392            {
     393                diff_api.ActiveStencilFaceEXT(GL_FRONT);
     394                activeFace = GL_FRONT;
     395            }
     396            CRSTATE_SET_STENCIL_OP(CRSTATE_STENCIL_BUFFER_ID_FRONT, _);
     397            frontIsSet = GL_TRUE;
     398        }
     399
     400        if ((!frontIsSet || !backIsSet) && CHECKDIRTY(sb->stencil.bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].op, negbitID))
     401        {
     402            if (activeFace == GL_BACK)
     403            {
     404                diff_api.ActiveStencilFaceEXT(GL_FRONT);
     405                activeFace = GL_FRONT;
     406            }
     407            CRSTATE_SET_STENCIL_OP(CRSTATE_STENCIL_BUFFER_ID_FRONT, _);
     408            if (!backIsSet)
     409            {
     410                g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail;
     411                g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthFail = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail;
     412                g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass = g->stencil.buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass;
     413            }
    315414        }
    316415
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_snapshot.c

    r44290 r44326  
    8686        } while (0)
    8787
     88#define SHCROGL_ROUNDBOUND(_v, _b) (((_v) + ((_b) - 1)) & ~((_b) - 1))
     89#define SHCROGL_ALIGNTAILSIZE(_v, _b) (SHCROGL_ROUNDBOUND((_v),(_b)) - (_v))
     90#define SHCROGL_CUT_FOR_OLD_TYPE_TO_ENSURE_ALIGNMENT_SIZE(_type, _field, _oldFieldType, _nextFieldAllignment) (SHCROGL_ALIGNTAILSIZE(((RT_OFFSETOF(_type, _field) + sizeof (_oldFieldType))), (_nextFieldAllignment)))
     91#define SHCROGL_CUT_FOR_OLD_TYPE_TO_ENSURE_ALIGNMENT(_type, _field, _oldFieldType, _nextFieldAllignment)  do { \
     92        const int32_t cbAlignment = SHCROGL_CUT_FOR_OLD_TYPE_TO_ENSURE_ALIGNMENT_SIZE(_type, _field, _oldFieldType, _nextFieldAllignment); \
     93        /*AssertCompile(SHCROGL_CUT_TAIL_ALIGNMENT_SIZE(_type, _lastField) >= 0 && SHCROGL_CUT_TAIL_ALIGNMENT_SIZE(_type, _lastField) < sizeof (void*));*/ \
     94        if (cbAlignment) { \
     95            rc = SSMR3Skip(pSSM, cbAlignment); \
     96        } \
     97    } while (0)
     98
     99
    88100#define SHCROGL_CUT_TAIL_ALIGNMENT_SIZE(_type, _lastField) (sizeof (_type) - RT_OFFSETOF(_type, _lastField) - RT_SIZEOFMEMB(_type, _lastField))
    89101#define SHCROGL_CUT_TAIL_ALIGNMENT(_type, _lastField) do { \
     
    140152}
    141153
     154static int32_t crStateLoadStencilState_v_33(CRStencilState *s, PSSMHANDLE pSSM)
     155{
     156    CRStencilState_v_33 stencilV33;
     157    int32_t rc = SSMR3GetMem(pSSM, &stencilV33, sizeof (stencilV33));
     158    AssertRCReturn(rc, rc);
     159    s->stencilTest = stencilV33.stencilTest;
     160    s->stencilTwoSideEXT = GL_FALSE;
     161    s->activeStencilFace = GL_FRONT;
     162    s->clearValue = stencilV33.clearValue;
     163    s->writeMask = stencilV33.writeMask;
     164    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func = stencilV33.func;
     165    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask = stencilV33.mask;
     166    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref = stencilV33.ref;
     167    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail = stencilV33.fail;
     168    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail = stencilV33.passDepthFail;
     169    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass = stencilV33.passDepthPass;
     170    s->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK] = s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT];
     171    crStateStencilBufferInit(&s->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK]);
     172    return VINF_SUCCESS;
     173}
     174
    142175static int32_t crStateLoadTextureState_v_BEFORE_CTXUSAGE_BITS(CRTextureState *t, PSSMHANDLE pSSM)
    143176{
     
    203236    SHCROGL_CUT_TAIL_ALIGNMENT(CRTextureState, unit);
    204237
     238    return VINF_SUCCESS;
     239}
     240
     241static int32_t crStateStencilBufferStack_v_33(CRStencilBufferStack *s, PSSMHANDLE pSSM)
     242{
     243    CRStencilBufferStack_v_33 stackV33;
     244    int32_t rc = SSMR3GetMem(pSSM, &stackV33, sizeof (stackV33));
     245
     246    s->stencilTest = stackV33.stencilTest;
     247    s->stencilTwoSideEXT = GL_FALSE;
     248    s->activeStencilFace = GL_FRONT;
     249    s->clearValue = stackV33.clearValue;
     250    s->writeMask = stackV33.writeMask;
     251    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func = stackV33.func;
     252    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask = stackV33.mask;
     253    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref = stackV33.ref;
     254    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail = stackV33.fail;
     255    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail = stackV33.passDepthFail;
     256    s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass = stackV33.passDepthPass;
     257    s->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK] = s->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT];
     258
     259    s->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].func = GL_ALWAYS;
     260    s->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].mask = 0xFFFFFFFF;
     261    s->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].ref = 0;
     262    s->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].fail = GL_KEEP;
     263    s->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].passDepthFail = GL_KEEP;
     264    s->buffers[CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK].passDepthPass = GL_KEEP;
     265
     266    return VINF_SUCCESS;
     267}
     268
     269static int32_t crStateLoadAttribState_v_33(CRAttribState *t, PSSMHANDLE pSSM)
     270{
     271    int32_t i, rc;
     272    SHCROGL_GET_STRUCT_HEAD(t, CRAttribState, stencilBufferStack);
     273    for (i = 0; i < CR_MAX_ATTRIB_STACK_DEPTH; ++i)
     274    {
     275        rc = crStateStencilBufferStack_v_33(&t->stencilBufferStack[i], pSSM);
     276        AssertRCReturn(rc, rc);
     277    }
     278    SHCROGL_GET_STRUCT_TAIL(t, CRAttribState, textureStackDepth);
    205279    return rc;
    206280}
     
    222296{
    223297    int32_t i, rc;
    224     SHCROGL_GET_STRUCT_HEAD(t, CRAttribState, textureStack);
     298
     299    SHCROGL_GET_STRUCT_HEAD(t, CRAttribState, stencilBufferStack);
     300    for (i = 0; i < CR_MAX_ATTRIB_STACK_DEPTH; ++i)
     301    {
     302        rc = crStateStencilBufferStack_v_33(&t->stencilBufferStack[i], pSSM);
     303        AssertRCReturn(rc, rc);
     304    }
     305    SHCROGL_GET_STRUCT_PART(t, CRAttribState, textureStackDepth, textureStack);
    225306    for (i = 0; i < CR_MAX_ATTRIB_STACK_DEPTH; ++i)
    226307    {
     
    16501731            rc = SSMR3GetMem(pSSM, (pBits->_var), _size); \
    16511732            AssertRCReturn(rc, rc);
     1733
     1734        if (u32Version < SHCROGL_SSM_VERSION_WITH_FIXED_STENCIL)
     1735        {
     1736#define CRSTATE_BITS_OP_VERSION (SHCROGL_SSM_VERSION_WITH_FIXED_STENCIL - 1)
     1737#define CRSTATE_BITS_OP_STENCIL_FUNC_V_33(_i, _var) do {} while (0)
     1738#define CRSTATE_BITS_OP_STENCIL_OP_V_33(_i, _var) do {} while (0)
    16521739#include "state_bits_globalop.h"
     1740#undef CRSTATE_BITS_OP_VERSION
     1741#undef CRSTATE_BITS_OP_STENCIL_FUNC_V_33
     1742#undef CRSTATE_BITS_OP_STENCIL_OP_V_33
     1743        }
     1744        else
     1745        {
     1746#include "state_bits_globalop.h"
     1747        }
    16531748#undef CRSTATE_BITS_OP
    16541749        return VINF_SUCCESS;
     
    17451840            AssertRCReturn(rc, rc);
    17461841            SHCROGL_CUT_FIELD_ALIGNMENT(CRContext, attrib, buffer);
    1747             SHCROGL_GET_STRUCT_PART(pTmpContext, CRContext, buffer, texture);
     1842            SHCROGL_GET_STRUCT_PART(pTmpContext, CRContext, buffer, stencil);
     1843            rc = crStateLoadStencilState_v_33(&pTmpContext->stencil, pSSM);
     1844            AssertRCReturn(rc, rc);
     1845            SHCROGL_CUT_FOR_OLD_TYPE_TO_ENSURE_ALIGNMENT(CRContext, stencil, CRStencilState_v_33, sizeof (void*));
    17481846            rc = crStateLoadTextureState_v_BEFORE_CTXUSAGE_BITS(&pTmpContext->texture, pSSM);
    17491847            AssertRCReturn(rc, rc);
     
    17531851        else
    17541852        {
    1755             SHCROGL_GET_STRUCT_TAIL(pTmpContext, CRContext, shared);
     1853            SHCROGL_GET_STRUCT_PART(pTmpContext, CRContext, shared, attrib);
     1854            rc = crStateLoadAttribState_v_33(&pTmpContext->attrib, pSSM);
     1855            AssertRCReturn(rc, rc);
     1856            SHCROGL_CUT_FIELD_ALIGNMENT(CRContext, attrib, buffer);
     1857            SHCROGL_GET_STRUCT_PART(pTmpContext, CRContext, buffer, stencil);
     1858            rc = crStateLoadStencilState_v_33(&pTmpContext->stencil, pSSM);
     1859            AssertRCReturn(rc, rc);
     1860            SHCROGL_CUT_FOR_OLD_TYPE_TO_ENSURE_ALIGNMENT(CRContext, stencil, CRStencilState_v_33, sizeof (void*));
     1861            SHCROGL_GET_STRUCT_TAIL(pTmpContext, CRContext, texture);
    17561862        }
    17571863
    17581864        pTmpContext->error = GL_NO_ERROR; /* <- the error state contained some random error data here
    17591865                                                   * treat as no error */
     1866    }
     1867    else if (u32Version < SHCROGL_SSM_VERSION_WITH_FIXED_STENCIL)
     1868    {
     1869        SHCROGL_GET_STRUCT_HEAD(pTmpContext, CRContext, attrib);
     1870        rc = crStateLoadAttribState_v_33(&pTmpContext->attrib, pSSM);
     1871        AssertRCReturn(rc, rc);
     1872        SHCROGL_CUT_FIELD_ALIGNMENT(CRContext, attrib, buffer);
     1873        SHCROGL_GET_STRUCT_PART(pTmpContext, CRContext, buffer, stencil);
     1874        rc = crStateLoadStencilState_v_33(&pTmpContext->stencil, pSSM);
     1875        AssertRCReturn(rc, rc);
     1876        SHCROGL_CUT_FOR_OLD_TYPE_TO_ENSURE_ALIGNMENT(CRContext, stencil, CRStencilState_v_33, sizeof (void*));
     1877        SHCROGL_GET_STRUCT_TAIL(pTmpContext, CRContext, texture);
    17601878    }
    17611879    else
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_special

    r44083 r44326  
    158158StencilFunc
    159159StencilOp
     160StencilFuncSeparate
     161StencilOpSeparate
     162ActiveStencilFaceEXT
    160163ClearStencil
    161164StencilMask
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_stencil.c

    r15532 r44326  
    1010#include "state_internals.h"
    1111
     12
     13static GLint crStateStencilBufferGetIdxAndCount(CRStencilState *s, GLenum face, GLint *pIdx, GLint *pBitsIdx)
     14{
     15    switch (face)
     16    {
     17        case GL_FRONT_AND_BACK:
     18            *pIdx = 0;
     19            *pBitsIdx = CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK;
     20            return 2;
     21        case GL_FRONT:
     22            *pIdx = CRSTATE_STENCIL_BUFFER_ID_FRONT;
     23            *pBitsIdx = CRSTATE_STENCIL_BUFFER_REF_ID_FRONT;
     24            return 1;
     25        case GL_BACK:
     26            *pIdx = CRSTATE_STENCIL_BUFFER_ID_BACK;
     27            *pBitsIdx = CRSTATE_STENCIL_BUFFER_REF_ID_BACK;
     28            return 1;
     29        case 0:
     30            if (!s->stencilTwoSideEXT || s->activeStencilFace == GL_FRONT)
     31            {
     32                /* both front and back */
     33                *pIdx = 0;
     34                *pBitsIdx = CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK;
     35                return 2;
     36            }
     37            *pIdx = CRSTATE_STENCIL_BUFFER_ID_TWO_SIDE_BACK;
     38            *pBitsIdx = CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK;
     39            return 1;
     40        default:
     41            crStateError(__LINE__,__FILE__,GL_INVALID_ENUM, "crStateStencilBufferGetIdxAndCount");
     42            return 0;
     43    }
     44    crError("should never be here!");
     45    return 0;
     46}
     47
     48void crStateStencilBufferInit(CRStencilBufferState *s)
     49{
     50    s->func = GL_ALWAYS;
     51    s->mask = 0xFFFFFFFF;
     52    s->ref = 0;
     53
     54    s->fail = GL_KEEP;
     55    s->passDepthFail = GL_KEEP;
     56    s->passDepthPass = GL_KEEP;
     57}
     58
     59static void crStateStencilBufferRefBitsInit(CRContext *ctx, CRStencilBufferRefBits *sb)
     60{
     61    RESET(sb->func, ctx->bitid);
     62    RESET(sb->op, ctx->bitid);
     63}
     64
    1265void crStateStencilInit(CRContext *ctx)
    1366{
     
    1568        CRStateBits *stateb = GetCurrentBits();
    1669        CRStencilBits *sb = &(stateb->stencil);
     70        int i;
    1771
    1872        s->stencilTest = GL_FALSE;
    1973        RESET(sb->enable, ctx->bitid);
    2074
    21         s->func = GL_ALWAYS;
    22         s->mask = 0xFFFFFFFF;
    23         s->ref = 0;
    24         RESET(sb->func, ctx->bitid);
    25 
    26         s->fail = GL_KEEP;
    27         s->passDepthFail = GL_KEEP;
    28         s->passDepthPass = GL_KEEP;
    29         RESET(sb->op, ctx->bitid);
     75    s->stencilTwoSideEXT = GL_FALSE;
     76    RESET(sb->enableTwoSideEXT, ctx->bitid);
     77
     78        s->activeStencilFace = GL_FRONT;
     79        RESET(sb->activeStencilFace, ctx->bitid);
    3080
    3181        s->clearValue = 0;
     
    3686
    3787        RESET(sb->dirty, ctx->bitid);
    38 }
    39 
    40 void STATE_APIENTRY crStateStencilFunc(GLenum func, GLint ref, GLuint mask)
     88
     89        for (i = 0; i < CRSTATE_STENCIL_BUFFER_COUNT; ++i)
     90        {
     91            crStateStencilBufferInit(&s->buffers[i]);
     92        }
     93
     94    for (i = 0; i < CRSTATE_STENCIL_BUFFER_REF_COUNT; ++i)
     95    {
     96        crStateStencilBufferRefBitsInit(ctx, &sb->bufferRefs[i]);
     97    }
     98}
     99
     100static void crStateStencilBufferFunc(CRContext *g, CRStencilBufferState *s, GLenum func, GLint ref, GLuint mask)
     101{
     102    s->func = func;
     103    s->ref = ref;
     104    s->mask = mask;
     105}
     106
     107static void crStateStencilFuncPerform(GLenum face, GLenum func, GLint ref, GLuint mask)
     108{
     109    CRContext *g = GetCurrentContext();
     110    CRStencilState *s = &(g->stencil);
     111    CRStateBits *stateb = GetCurrentBits();
     112    CRStencilBits *sb = &(stateb->stencil);
     113    GLint idx, bitsIdx, count, i;
     114
     115
     116    if (g->current.inBeginEnd)
     117    {
     118        crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
     119            "glStencilFunc called in begin/end");
     120        return;
     121    }
     122
     123    FLUSH();
     124
     125    if (func != GL_NEVER &&
     126        func != GL_LESS &&
     127        func != GL_LEQUAL &&
     128        func != GL_GREATER &&
     129        func != GL_GEQUAL &&
     130        func != GL_EQUAL &&
     131        func != GL_NOTEQUAL &&
     132        func != GL_ALWAYS)
     133    {
     134        crStateError(__LINE__, __FILE__, GL_INVALID_ENUM,
     135            "glStencilFunc called with bogu func: %d", func);
     136        return;
     137    }
     138
     139    count = crStateStencilBufferGetIdxAndCount(s, face, &idx, &bitsIdx);
     140    if (count)
     141    {
     142        for (i = idx; i < idx + count; ++i)
     143        {
     144            crStateStencilBufferFunc(g, &s->buffers[i], func, ref, mask);
     145        }
     146        DIRTY(sb->bufferRefs[bitsIdx].func, g->neg_bitid);
     147
     148        DIRTY(sb->dirty, g->neg_bitid);
     149    }
     150}
     151
     152void STATE_APIENTRY crStateStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
     153{
     154    if (!face)
     155    {
     156        /* crStateStencilFuncPerform accepts 0 value, while glStencilFuncSeparate does not,
     157         * filter it out here */
     158        crStateError(__LINE__,__FILE__,GL_INVALID_ENUM, "crStateStencilFuncSeparate");
     159        return;
     160    }
     161    crStateStencilFuncPerform(face, func, ref, mask);
     162}
     163
     164void STATE_APIENTRY crStateStencilFunc(GLenum func, GLint ref, GLuint mask)
     165{
     166    crStateStencilFuncPerform(0, func, ref, mask);
     167}
     168
     169static void STATE_APIENTRY crStateStencilBufferOp (CRContext *g, CRStencilBufferState *s, GLenum fail, GLenum zfail, GLenum zpass)
     170{
     171    s->fail = fail;
     172    s->passDepthFail = zfail;
     173    s->passDepthPass = zpass;
     174}
     175
     176static void crStateStencilOpPerform (GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
    41177{
    42178        CRContext *g = GetCurrentContext();
     
    44180        CRStateBits *stateb = GetCurrentBits();
    45181        CRStencilBits *sb = &(stateb->stencil);
    46 
    47 
    48         if (g->current.inBeginEnd)
    49         {
    50                 crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION,
    51                         "glStencilFunc called in begin/end");
    52                 return;
    53         }
    54 
    55         FLUSH();
    56 
    57         if (func != GL_NEVER &&
    58                 func != GL_LESS &&
    59                 func != GL_LEQUAL &&
    60                 func != GL_GREATER &&
    61                 func != GL_GEQUAL &&
    62                 func != GL_EQUAL &&
    63                 func != GL_NOTEQUAL &&
    64                 func != GL_ALWAYS)
    65         {
    66                 crStateError(__LINE__, __FILE__, GL_INVALID_ENUM,
    67                         "glStencilFunc called with bogu func: %d", func);
    68                 return;
    69         }
    70 
    71         s->func = func;
    72         s->ref = ref;
    73         s->mask = mask;
    74 
    75         DIRTY(sb->func, g->neg_bitid);
    76         DIRTY(sb->dirty, g->neg_bitid);
    77 }
    78 
    79 void STATE_APIENTRY crStateStencilOp (GLenum fail, GLenum zfail, GLenum zpass)
    80 {
    81         CRContext *g = GetCurrentContext();
    82         CRStencilState *s = &(g->stencil);
    83         CRStateBits *stateb = GetCurrentBits();
    84         CRStencilBits *sb = &(stateb->stencil);
     182    GLint idx, bitsIdx, count, i;
    85183
    86184        if (g->current.inBeginEnd)
     
    147245        }
    148246
    149         s->fail = fail;
    150         s->passDepthFail = zfail;
    151         s->passDepthPass = zpass;
    152 
    153         DIRTY(sb->op, g->neg_bitid);
    154         DIRTY(sb->dirty, g->neg_bitid);
    155 }
    156 
     247    count = crStateStencilBufferGetIdxAndCount(s, face, &idx, &bitsIdx);
     248    if (count)
     249    {
     250        for (i = idx; i < idx + count; ++i)
     251        {
     252            crStateStencilBufferOp(g, &s->buffers[i], fail, zfail, zpass);
     253        }
     254
     255        DIRTY(sb->bufferRefs[bitsIdx].op, g->neg_bitid);
     256
     257        DIRTY(sb->dirty, g->neg_bitid);
     258    }
     259}
     260
     261void STATE_APIENTRY crStateStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
     262{
     263    if (!face)
     264    {
     265        /* crStateStencilOpPerform accepts 0 value, while glStencilOpSeparate does not,
     266         * filter it out here */
     267        crStateError(__LINE__,__FILE__,GL_INVALID_ENUM, "crStateStencilOpSeparate");
     268        return;
     269    }
     270    crStateStencilOpPerform (0, fail, zfail, zpass);
     271}
     272
     273void STATE_APIENTRY crStateStencilOp (GLenum fail, GLenum zfail, GLenum zpass)
     274{
     275    crStateStencilOpPerform (0, fail, zfail, zpass);
     276}
    157277
    158278void STATE_APIENTRY crStateClearStencil (GLint c)
     
    172292        FLUSH();
    173293
    174 
    175294        s->clearValue = c;
    176295       
     
    200319        DIRTY(sb->dirty, g->neg_bitid);
    201320}
     321
     322void STATE_APIENTRY crStateActiveStencilFaceEXT (GLenum face)
     323{
     324    CRContext *g = GetCurrentContext();
     325    CRStencilState *s = &(g->stencil);
     326    CRStateBits *stateb = GetCurrentBits();
     327    CRStencilBits *sb = &(stateb->stencil);
     328
     329    switch (face)
     330    {
     331    case GL_FRONT:
     332    case GL_BACK:
     333        s->activeStencilFace = face;
     334        break;
     335    default:
     336        crStateError(__LINE__,__FILE__,GL_INVALID_ENUM, "crStateActiveStencilFaceEXT");
     337        return;
     338    }
     339
     340    DIRTY(sb->activeStencilFace, g->neg_bitid);
     341    DIRTY(sb->dirty, g->neg_bitid);
     342}
     343
     344#define CR_STATE_STENCIL_FUNC_MATCH(_s1, _i1, _s2, _i2) (\
     345    (_s1)->buffers[(_i1)].func == (_s2)->buffers[(_i2)].func && \
     346    (_s1)->buffers[(_i1)].ref  == (_s2)->buffers[(_i2)].ref  && \
     347    (_s1)->buffers[(_i1)].mask == (_s2)->buffers[(_i2)].mask)
     348
     349#define CR_STATE_STENCIL_FUNC_COPY(_s1, _i1, _s2, _i2) do { \
     350        (_s1)->buffers[(_i1)].func = (_s2)->buffers[(_i2)].func; \
     351        (_s1)->buffers[(_i1)].ref  = (_s2)->buffers[(_i2)].ref; \
     352        (_s1)->buffers[(_i1)].mask = (_s2)->buffers[(_i2)].mask; \
     353    } while (0)
     354
     355
     356#define CR_STATE_STENCIL_OP_MATCH(_s1, _i1, _s2, _i2) (\
     357        (_s1)->buffers[(_i1)].fail == (_s2)->buffers[(_i2)].fail && \
     358        (_s1)->buffers[(_i1)].passDepthFail  == (_s2)->buffers[(_i2)].passDepthFail  && \
     359        (_s1)->buffers[(_i1)].passDepthPass == (_s2)->buffers[(_i2)].passDepthPass)
     360
     361#define CR_STATE_STENCIL_OP_COPY(_s1, _i1, _s2, _i2) do { \
     362        (_s1)->buffers[(_i1)].fail = (_s2)->buffers[(_i2)].fail; \
     363        (_s1)->buffers[(_i1)].passDepthFail  = (_s2)->buffers[(_i2)].passDepthFail; \
     364        (_s1)->buffers[(_i1)].passDepthPass = (_s2)->buffers[(_i2)].passDepthPass; \
     365    } while (0)
     366
     367
     368void crStateStencilDiff(CRStencilBits *b, CRbitvalue *bitID,
     369        CRContext *fromCtx, CRContext *toCtx)
     370{
     371    CRStencilState *from = &(fromCtx->stencil);
     372    CRStencilState *to = &(toCtx->stencil);
     373    unsigned int j, i;
     374    GLenum activeFace;
     375    GLboolean backIsSet = GL_FALSE, frontIsSet = GL_FALSE, frontBackDirty, frontDirty, backDirty;
     376    GLchar frontMatch = -1, backMatch = -1, toFrontBackMatch = -1;
     377    CRbitvalue nbitID[CR_MAX_BITARRAY];
     378    for (j=0;j<CR_MAX_BITARRAY;j++)
     379        nbitID[j] = ~bitID[j];
     380    i = 0; /* silence compiler */
     381
     382    if (CHECKDIRTY(b->enable, bitID))
     383    {
     384        glAble able[2];
     385        able[0] = diff_api.Disable;
     386        able[1] = diff_api.Enable;
     387        if (from->stencilTest != to->stencilTest)
     388        {
     389            able[to->stencilTest](GL_STENCIL_TEST);
     390            from->stencilTest = to->stencilTest;
     391        }
     392        CLEARDIRTY(b->enable, nbitID);
     393    }
     394
     395    if (CHECKDIRTY(b->enableTwoSideEXT, bitID))
     396    {
     397        glAble able[2];
     398        able[0] = diff_api.Disable;
     399        able[1] = diff_api.Enable;
     400        if (from->stencilTwoSideEXT != to->stencilTwoSideEXT)
     401        {
     402            able[to->stencilTwoSideEXT](GL_STENCIL_TEST_TWO_SIDE_EXT);
     403            from->stencilTwoSideEXT = to->stencilTwoSideEXT;
     404        }
     405        CLEARDIRTY(b->enableTwoSideEXT, nbitID);
     406    }
     407
     408    if (CHECKDIRTY(b->clearValue, bitID))
     409    {
     410        if (from->clearValue != to->clearValue)
     411        {
     412            diff_api.ClearStencil (to->clearValue);
     413            from->clearValue = to->clearValue;
     414        }
     415        CLEARDIRTY(b->clearValue, nbitID);
     416    }
     417
     418    activeFace = to->activeStencilFace;
     419
     420
     421    /* func */
     422    frontBackDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].func, bitID);
     423    frontDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].func, bitID);
     424    backDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].func, bitID);
     425#define CR_STATE_STENCIL_FUNC_FRONT_MATCH() ( \
     426        frontMatch >= 0 ? \
     427                frontMatch \
     428                : (frontMatch = CR_STATE_STENCIL_FUNC_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT)))
     429
     430#define CR_STATE_STENCIL_FUNC_BACK_MATCH() ( \
     431        backMatch >= 0 ? \
     432                backMatch \
     433                : (backMatch = CR_STATE_STENCIL_FUNC_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_BACK)))
     434
     435#define CR_STATE_STENCIL_FUNC_TO_FRONT_BACK_MATCH() ( \
     436        toFrontBackMatch >= 0 ? \
     437                toFrontBackMatch \
     438                : (toFrontBackMatch = CR_STATE_STENCIL_FUNC_MATCH(to, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_BACK)))
     439
     440    if (frontBackDirty)
     441    {
     442        if (!CR_STATE_STENCIL_FUNC_FRONT_MATCH()
     443                || !CR_STATE_STENCIL_FUNC_BACK_MATCH())
     444        {
     445            if (CR_STATE_STENCIL_FUNC_TO_FRONT_BACK_MATCH())
     446            {
     447                if (activeFace == GL_BACK)
     448                {
     449                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     450                    activeFace = GL_FRONT;
     451                }
     452
     453                diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     454                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     455                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     456
     457                CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     458                CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     459                frontIsSet = GL_TRUE;
     460                backIsSet = GL_TRUE;
     461            }
     462            else if (!CR_STATE_STENCIL_FUNC_FRONT_MATCH())
     463            {
     464                if (activeFace == GL_BACK)
     465                {
     466                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     467                    activeFace = GL_FRONT;
     468                }
     469
     470                diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     471                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     472                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     473
     474                CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     475                frontIsSet = GL_TRUE;
     476            }
     477            else if (!CR_STATE_STENCIL_FUNC_BACK_MATCH())
     478            {
     479                if (activeFace == GL_BACK)
     480                {
     481                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     482                    activeFace = GL_FRONT;
     483                }
     484
     485                diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
     486                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].ref,
     487                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask);
     488
     489                CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_BACK);
     490
     491                backIsSet = GL_TRUE;
     492            }
     493        }
     494
     495        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].func, nbitID);
     496    }
     497
     498    if (frontDirty)
     499    {
     500        if (!CR_STATE_STENCIL_FUNC_FRONT_MATCH())
     501        {
     502            if (CR_STATE_STENCIL_FUNC_TO_FRONT_BACK_MATCH())
     503            {
     504                if (!frontIsSet || !backIsSet)
     505                {
     506                    if (activeFace == GL_BACK)
     507                    {
     508                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     509                        activeFace = GL_FRONT;
     510                    }
     511
     512                    diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     513                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     514                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     515
     516                    CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     517                    CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     518
     519                    frontIsSet = GL_TRUE;
     520                    backIsSet = GL_TRUE;
     521                }
     522            }
     523            else if (!CR_STATE_STENCIL_FUNC_FRONT_MATCH())
     524            {
     525                if (!frontIsSet)
     526                {
     527                    if (activeFace == GL_BACK)
     528                    {
     529                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     530                        activeFace = GL_FRONT;
     531                    }
     532
     533                    diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     534                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     535                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     536
     537                    CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     538                    frontIsSet = GL_TRUE;
     539                }
     540            }
     541            else if (!CR_STATE_STENCIL_FUNC_BACK_MATCH())
     542            {
     543                if (!backIsSet)
     544                {
     545                    if (activeFace == GL_BACK)
     546                    {
     547                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     548                        activeFace = GL_FRONT;
     549                    }
     550
     551                    diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
     552                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].ref,
     553                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask);
     554                    CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_BACK);
     555                    backIsSet = GL_TRUE;
     556                }
     557            }
     558        }
     559        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].func, nbitID);
     560    }
     561
     562
     563    if (backDirty)
     564    {
     565        if (!CR_STATE_STENCIL_FUNC_FRONT_MATCH())
     566        {
     567            if (CR_STATE_STENCIL_FUNC_TO_FRONT_BACK_MATCH())
     568            {
     569                if (!frontIsSet || !backIsSet)
     570                {
     571                    if (activeFace == GL_BACK)
     572                    {
     573                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     574                        activeFace = GL_FRONT;
     575                    }
     576
     577                    diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     578                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     579                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     580
     581                    CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     582                    CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     583
     584                    frontIsSet = GL_TRUE;
     585                    backIsSet = GL_TRUE;
     586                }
     587            }
     588            else if (!CR_STATE_STENCIL_FUNC_FRONT_MATCH())
     589            {
     590                if (!frontIsSet)
     591                {
     592                    if (activeFace == GL_BACK)
     593                    {
     594                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     595                        activeFace = GL_FRONT;
     596                    }
     597
     598                    diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     599                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     600                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     601
     602                    CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     603                    frontIsSet = GL_TRUE;
     604                }
     605            }
     606            else if (!CR_STATE_STENCIL_FUNC_BACK_MATCH())
     607            {
     608                if (!backIsSet)
     609                {
     610                    if (activeFace == GL_BACK)
     611                    {
     612                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     613                        activeFace = GL_FRONT;
     614                    }
     615
     616                    diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
     617                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].ref,
     618                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask);
     619                    CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_BACK);
     620                    backIsSet = GL_TRUE;
     621                }
     622            }
     623        }
     624        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].func, nbitID);
     625    }
     626
     627    if (CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func, bitID))
     628    {
     629        if (CR_STATE_STENCIL_FUNC_MATCH(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK))
     630        {
     631            if (activeFace == GL_FRONT)
     632            {
     633                diff_api.ActiveStencilFaceEXT(GL_BACK);
     634                activeFace = GL_BACK;
     635            }
     636
     637            diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func,
     638                to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].ref,
     639                to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].mask);
     640            CR_STATE_STENCIL_FUNC_COPY(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK);
     641        }
     642        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func, nbitID);
     643    }
     644
     645#undef CR_STATE_STENCIL_FUNC_FRONT_MATCH
     646#undef CR_STATE_STENCIL_FUNC_BACK_MATCH
     647#undef CR_STATE_STENCIL_FUNC_TO_FRONT_BACK_MATCH
     648
     649    /* op */
     650    backIsSet = GL_FALSE, frontIsSet = GL_FALSE;
     651    frontMatch = -1, backMatch = -1, toFrontBackMatch = -1;
     652    frontBackDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].op, bitID);
     653    frontDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].op, bitID);
     654    backDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].op, bitID);
     655
     656#define CR_STATE_STENCIL_OP_FRONT_MATCH() ( \
     657        frontMatch >= 0 ? \
     658                frontMatch \
     659                : (frontMatch = CR_STATE_STENCIL_OP_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT)))
     660
     661#define CR_STATE_STENCIL_OP_BACK_MATCH() ( \
     662        backMatch >= 0 ? \
     663                backMatch \
     664                : (backMatch = CR_STATE_STENCIL_OP_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_BACK)))
     665
     666#define CR_STATE_STENCIL_OP_TO_FRONT_BACK_MATCH() ( \
     667        toFrontBackMatch >= 0 ? \
     668                toFrontBackMatch \
     669                : (toFrontBackMatch = CR_STATE_STENCIL_OP_MATCH(to, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_BACK)))
     670
     671    if (frontBackDirty)
     672    {
     673        if (!CR_STATE_STENCIL_OP_FRONT_MATCH()
     674                || !CR_STATE_STENCIL_OP_BACK_MATCH())
     675        {
     676            if (CR_STATE_STENCIL_OP_TO_FRONT_BACK_MATCH())
     677            {
     678                if (activeFace == GL_BACK)
     679                {
     680                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     681                    activeFace = GL_FRONT;
     682                }
     683
     684                diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     685                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     686                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     687
     688                CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     689                CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     690
     691                frontIsSet = GL_TRUE;
     692                backIsSet = GL_TRUE;
     693            }
     694            else if (!CR_STATE_STENCIL_OP_FRONT_MATCH())
     695            {
     696                if (activeFace == GL_BACK)
     697                {
     698                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     699                    activeFace = GL_FRONT;
     700                }
     701
     702                diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     703                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     704                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     705                CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     706                frontIsSet = GL_TRUE;
     707            }
     708            else if (!CR_STATE_STENCIL_OP_BACK_MATCH())
     709            {
     710                if (activeFace == GL_BACK)
     711                {
     712                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     713                    activeFace = GL_FRONT;
     714                }
     715
     716                diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
     717                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthFail,
     718                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass);
     719                CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_BACK);
     720                backIsSet = GL_TRUE;
     721            }
     722        }
     723
     724        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].op, nbitID);
     725    }
     726
     727    if (frontDirty)
     728    {
     729        if (!CR_STATE_STENCIL_OP_FRONT_MATCH())
     730        {
     731            if (CR_STATE_STENCIL_OP_TO_FRONT_BACK_MATCH())
     732            {
     733                if (!frontIsSet || !backIsSet)
     734                {
     735                    if (activeFace == GL_BACK)
     736                    {
     737                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     738                        activeFace = GL_FRONT;
     739                    }
     740
     741                    diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     742                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     743                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     744
     745                    CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     746                    CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     747
     748                    frontIsSet = GL_TRUE;
     749                    backIsSet = GL_TRUE;
     750                }
     751            }
     752            else if (!CR_STATE_STENCIL_OP_FRONT_MATCH())
     753            {
     754                if (!frontIsSet)
     755                {
     756                    if (activeFace == GL_BACK)
     757                    {
     758                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     759                        activeFace = GL_FRONT;
     760                    }
     761
     762                    diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     763                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     764                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     765
     766                    CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     767
     768                    frontIsSet = GL_TRUE;
     769                }
     770            }
     771            else if (!CR_STATE_STENCIL_OP_BACK_MATCH())
     772            {
     773                if (!backIsSet)
     774                {
     775                    if (activeFace == GL_BACK)
     776                    {
     777                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     778                        activeFace = GL_FRONT;
     779                    }
     780
     781                    diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
     782                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthFail,
     783                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass);
     784                    CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_BACK);
     785                    backIsSet = GL_TRUE;
     786                }
     787            }
     788        }
     789        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].op, nbitID);
     790    }
     791
     792
     793    if (backDirty)
     794    {
     795        if (!CR_STATE_STENCIL_OP_FRONT_MATCH())
     796        {
     797            if (CR_STATE_STENCIL_OP_TO_FRONT_BACK_MATCH())
     798            {
     799                if (!frontIsSet || !backIsSet)
     800                {
     801                    if (activeFace == GL_BACK)
     802                    {
     803                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     804                        activeFace = GL_FRONT;
     805                    }
     806
     807                    diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     808                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     809                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     810
     811                    CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     812                    CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     813
     814                    frontIsSet = GL_TRUE;
     815                    backIsSet = GL_TRUE;
     816                }
     817            }
     818            else if (!CR_STATE_STENCIL_OP_FRONT_MATCH())
     819            {
     820                if (!frontIsSet)
     821                {
     822                    if (activeFace == GL_BACK)
     823                    {
     824                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     825                        activeFace = GL_FRONT;
     826                    }
     827
     828                    diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     829                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     830                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     831
     832                    CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT);
     833
     834                    frontIsSet = GL_TRUE;
     835                }
     836            }
     837            else if (!CR_STATE_STENCIL_OP_BACK_MATCH())
     838            {
     839                if (!backIsSet)
     840                {
     841                    if (activeFace == GL_BACK)
     842                    {
     843                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     844                        activeFace = GL_FRONT;
     845                    }
     846
     847                    diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
     848                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthFail,
     849                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass);
     850                    CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_BACK);
     851                    backIsSet = GL_TRUE;
     852                }
     853            }
     854        }
     855        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].op, nbitID);
     856    }
     857
     858    if (CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].op, bitID))
     859    {
     860        if (CR_STATE_STENCIL_OP_MATCH(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK))
     861        {
     862            if (activeFace == GL_FRONT)
     863            {
     864                diff_api.ActiveStencilFaceEXT(GL_BACK);
     865                activeFace = GL_BACK;
     866            }
     867
     868            diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].fail,
     869                                    to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].passDepthFail,
     870                                    to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].passDepthPass);
     871            CR_STATE_STENCIL_OP_COPY(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK);
     872        }
     873        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].op, nbitID);
     874    }
     875
     876#undef CR_STATE_STENCIL_OP_FRONT_MATCH
     877#undef CR_STATE_STENCIL_OP_BACK_MATCH
     878#undef CR_STATE_STENCIL_OP_TO_FRONT_BACK_MATCH
     879
     880
     881    if (activeFace != to->activeStencilFace)
     882    {
     883        diff_api.ActiveStencilFaceEXT(activeFace);
     884    }
     885
     886    if (CHECKDIRTY(b->activeStencilFace, bitID))
     887    {
     888        if (from->activeStencilFace != to->activeStencilFace)
     889        {
     890            /* we already did it ( see above )*/
     891            /* diff_api.ActiveStencilFaceEXT(to->activeStencilFace); */
     892            from->activeStencilFace = to->activeStencilFace;
     893        }
     894        CLEARDIRTY(b->activeStencilFace, nbitID);
     895    }
     896
     897    if (CHECKDIRTY(b->writeMask, bitID))
     898    {
     899        if (from->writeMask != to->writeMask)
     900        {
     901            diff_api.StencilMask (to->writeMask);
     902            from->writeMask = to->writeMask;
     903        }
     904        CLEARDIRTY(b->writeMask, nbitID);
     905    }
     906    CLEARDIRTY(b->dirty, nbitID);
     907}
     908
     909void crStateStencilSwitch(CRStencilBits *b, CRbitvalue *bitID,
     910        CRContext *fromCtx, CRContext *toCtx)
     911{
     912    CRStencilState *from = &(fromCtx->stencil);
     913    CRStencilState *to = &(toCtx->stencil);
     914    unsigned int j, i;
     915    GLenum activeFace;
     916    GLboolean backIsSet = GL_FALSE, frontIsSet = GL_FALSE, frontBackDirty, frontDirty, backDirty;
     917    GLchar frontMatch = -1, backMatch = -1, toFrontBackMatch = -1;
     918    CRbitvalue nbitID[CR_MAX_BITARRAY];
     919    for (j=0;j<CR_MAX_BITARRAY;j++)
     920        nbitID[j] = ~bitID[j];
     921    i = 0; /* silence compiler */
     922
     923    if (CHECKDIRTY(b->enable, bitID))
     924    {
     925        glAble able[2];
     926        able[0] = diff_api.Disable;
     927        able[1] = diff_api.Enable;
     928        if (from->stencilTest != to->stencilTest)
     929        {
     930            able[to->stencilTest](GL_STENCIL_TEST);
     931            FILLDIRTY(b->enable);
     932            FILLDIRTY(b->dirty);
     933        }
     934        CLEARDIRTY(b->enable, nbitID);
     935    }
     936    if (CHECKDIRTY(b->enableTwoSideEXT, bitID))
     937    {
     938        glAble able[2];
     939        able[0] = diff_api.Disable;
     940        able[1] = diff_api.Enable;
     941        if (from->stencilTwoSideEXT != to->stencilTwoSideEXT)
     942        {
     943            able[to->stencilTwoSideEXT](GL_STENCIL_TEST_TWO_SIDE_EXT);
     944            FILLDIRTY(b->enableTwoSideEXT);
     945            FILLDIRTY(b->dirty);
     946        }
     947        CLEARDIRTY(b->enableTwoSideEXT, nbitID);
     948    }
     949    if (CHECKDIRTY(b->clearValue, bitID))
     950    {
     951        if (from->clearValue != to->clearValue)
     952        {
     953            diff_api.ClearStencil (to->clearValue);
     954            FILLDIRTY(b->clearValue);
     955            FILLDIRTY(b->dirty);
     956        }
     957        CLEARDIRTY(b->clearValue, nbitID);
     958    }
     959
     960    activeFace = from->activeStencilFace;
     961
     962    /* func */
     963    frontBackDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].func, bitID);
     964    frontDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].func, bitID);
     965    backDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].func, bitID);
     966#define CR_STATE_STENCIL_FUNC_FRONT_MATCH() ( \
     967        frontMatch >= 0 ? \
     968                frontMatch \
     969                : (frontMatch = CR_STATE_STENCIL_FUNC_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT)))
     970
     971#define CR_STATE_STENCIL_FUNC_BACK_MATCH() ( \
     972        backMatch >= 0 ? \
     973                backMatch \
     974                : (backMatch = CR_STATE_STENCIL_FUNC_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_BACK)))
     975
     976#define CR_STATE_STENCIL_FUNC_TO_FRONT_BACK_MATCH() ( \
     977        toFrontBackMatch >= 0 ? \
     978                toFrontBackMatch \
     979                : (toFrontBackMatch = CR_STATE_STENCIL_FUNC_MATCH(to, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_BACK)))
     980
     981    if (frontBackDirty)
     982    {
     983        if (!CR_STATE_STENCIL_FUNC_FRONT_MATCH()
     984                || !CR_STATE_STENCIL_FUNC_BACK_MATCH())
     985        {
     986            if (CR_STATE_STENCIL_FUNC_TO_FRONT_BACK_MATCH())
     987            {
     988                if (activeFace == GL_BACK)
     989                {
     990                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     991                    activeFace = GL_FRONT;
     992                }
     993
     994                diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     995                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     996                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     997
     998                frontIsSet = GL_TRUE;
     999                backIsSet = GL_TRUE;
     1000            }
     1001            else if (!CR_STATE_STENCIL_FUNC_FRONT_MATCH())
     1002            {
     1003                if (activeFace == GL_BACK)
     1004                {
     1005                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1006                    activeFace = GL_FRONT;
     1007                }
     1008
     1009                diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     1010                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     1011                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     1012                frontIsSet = GL_TRUE;
     1013            }
     1014            else if (!CR_STATE_STENCIL_FUNC_BACK_MATCH())
     1015            {
     1016                if (activeFace == GL_BACK)
     1017                {
     1018                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1019                    activeFace = GL_FRONT;
     1020                }
     1021
     1022                diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
     1023                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].ref,
     1024                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask);
     1025                backIsSet = GL_TRUE;
     1026            }
     1027            FILLDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].func);
     1028            FILLDIRTY(b->dirty);
     1029        }
     1030
     1031        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].func, nbitID);
     1032    }
     1033
     1034    if (frontDirty)
     1035    {
     1036        if (!CR_STATE_STENCIL_FUNC_FRONT_MATCH())
     1037        {
     1038            if (CR_STATE_STENCIL_FUNC_TO_FRONT_BACK_MATCH())
     1039            {
     1040                if (!frontIsSet || !backIsSet)
     1041                {
     1042                    if (activeFace == GL_BACK)
     1043                    {
     1044                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1045                        activeFace = GL_FRONT;
     1046                    }
     1047
     1048                    diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     1049                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     1050                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     1051
     1052                    frontIsSet = GL_TRUE;
     1053                    backIsSet = GL_TRUE;
     1054                }
     1055            }
     1056            else if (!CR_STATE_STENCIL_FUNC_FRONT_MATCH())
     1057            {
     1058                if (!frontIsSet)
     1059                {
     1060                    if (activeFace == GL_BACK)
     1061                    {
     1062                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1063                        activeFace = GL_FRONT;
     1064                    }
     1065
     1066                    diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     1067                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     1068                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     1069                    frontIsSet = GL_TRUE;
     1070                }
     1071            }
     1072            else if (!CR_STATE_STENCIL_FUNC_BACK_MATCH())
     1073            {
     1074                if (!backIsSet)
     1075                {
     1076                    if (activeFace == GL_BACK)
     1077                    {
     1078                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1079                        activeFace = GL_FRONT;
     1080                    }
     1081
     1082                    diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
     1083                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].ref,
     1084                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask);
     1085                    backIsSet = GL_TRUE;
     1086                }
     1087            }
     1088            FILLDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].func);
     1089            FILLDIRTY(b->dirty);
     1090        }
     1091        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].func, nbitID);
     1092    }
     1093
     1094
     1095    if (backDirty)
     1096    {
     1097        if (!CR_STATE_STENCIL_FUNC_BACK_MATCH())
     1098        {
     1099            if (CR_STATE_STENCIL_FUNC_TO_FRONT_BACK_MATCH())
     1100            {
     1101                if (!frontIsSet || !backIsSet)
     1102                {
     1103                    if (activeFace == GL_BACK)
     1104                    {
     1105                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1106                        activeFace = GL_FRONT;
     1107                    }
     1108
     1109                    diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     1110                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     1111                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     1112
     1113                    frontIsSet = GL_TRUE;
     1114                    backIsSet = GL_TRUE;
     1115                }
     1116            }
     1117            else if (!CR_STATE_STENCIL_FUNC_FRONT_MATCH())
     1118            {
     1119                if (!frontIsSet)
     1120                {
     1121                    if (activeFace == GL_BACK)
     1122                    {
     1123                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1124                        activeFace = GL_FRONT;
     1125                    }
     1126
     1127                    diff_api.StencilFuncSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].func,
     1128                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].ref,
     1129                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].mask);
     1130                    frontIsSet = GL_TRUE;
     1131                }
     1132            }
     1133            else if (!CR_STATE_STENCIL_FUNC_BACK_MATCH())
     1134            {
     1135                if (!backIsSet)
     1136                {
     1137                    if (activeFace == GL_BACK)
     1138                    {
     1139                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1140                        activeFace = GL_FRONT;
     1141                    }
     1142
     1143                    diff_api.StencilFuncSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].func,
     1144                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].ref,
     1145                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].mask);
     1146                    backIsSet = GL_TRUE;
     1147                }
     1148            }
     1149            FILLDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].func);
     1150            FILLDIRTY(b->dirty);
     1151        }
     1152        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].func, nbitID);
     1153    }
     1154
     1155    if (CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func, bitID))
     1156    {
     1157        if (CR_STATE_STENCIL_FUNC_MATCH(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK))
     1158        {
     1159            if (activeFace == GL_FRONT)
     1160            {
     1161                diff_api.ActiveStencilFaceEXT(GL_BACK);
     1162                activeFace = GL_BACK;
     1163            }
     1164
     1165            diff_api.StencilFunc (to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func,
     1166                to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].ref,
     1167                to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].mask);
     1168
     1169            FILLDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func);
     1170            FILLDIRTY(b->dirty);
     1171        }
     1172        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].func, nbitID);
     1173    }
     1174
     1175#undef CR_STATE_STENCIL_FUNC_FRONT_MATCH
     1176#undef CR_STATE_STENCIL_FUNC_BACK_MATCH
     1177#undef CR_STATE_STENCIL_FUNC_TO_FRONT_BACK_MATCH
     1178
     1179    /* op */
     1180    backIsSet = GL_FALSE, frontIsSet = GL_FALSE;
     1181    frontMatch = -1, backMatch = -1, toFrontBackMatch = -1;
     1182    frontBackDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].op, bitID);
     1183    frontDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].op, bitID);
     1184    backDirty = CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].op, bitID);
     1185
     1186#define CR_STATE_STENCIL_OP_FRONT_MATCH() ( \
     1187        frontMatch >= 0 ? \
     1188                frontMatch \
     1189                : (frontMatch = CR_STATE_STENCIL_OP_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_FRONT)))
     1190
     1191#define CR_STATE_STENCIL_OP_BACK_MATCH() ( \
     1192        backMatch >= 0 ? \
     1193                backMatch \
     1194                : (backMatch = CR_STATE_STENCIL_OP_MATCH(from, CRSTATE_STENCIL_BUFFER_ID_BACK, to, CRSTATE_STENCIL_BUFFER_ID_BACK)))
     1195
     1196#define CR_STATE_STENCIL_OP_TO_FRONT_BACK_MATCH() ( \
     1197        toFrontBackMatch >= 0 ? \
     1198                toFrontBackMatch \
     1199                : (toFrontBackMatch = CR_STATE_STENCIL_OP_MATCH(to, CRSTATE_STENCIL_BUFFER_ID_FRONT, to, CRSTATE_STENCIL_BUFFER_ID_BACK)))
     1200
     1201    if (frontBackDirty)
     1202    {
     1203        if (!CR_STATE_STENCIL_OP_FRONT_MATCH()
     1204                || !CR_STATE_STENCIL_OP_BACK_MATCH())
     1205        {
     1206            if (CR_STATE_STENCIL_OP_TO_FRONT_BACK_MATCH())
     1207            {
     1208                if (activeFace == GL_BACK)
     1209                {
     1210                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1211                    activeFace = GL_FRONT;
     1212                }
     1213
     1214                diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1215                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     1216                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1217
     1218                frontIsSet = GL_TRUE;
     1219                backIsSet = GL_TRUE;
     1220            }
     1221            else if (!CR_STATE_STENCIL_OP_FRONT_MATCH())
     1222            {
     1223                if (activeFace == GL_BACK)
     1224                {
     1225                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1226                    activeFace = GL_FRONT;
     1227                }
     1228
     1229                diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1230                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     1231                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1232                frontIsSet = GL_TRUE;
     1233            }
     1234            else if (!CR_STATE_STENCIL_OP_BACK_MATCH())
     1235            {
     1236                if (activeFace == GL_BACK)
     1237                {
     1238                    diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1239                    activeFace = GL_FRONT;
     1240                }
     1241
     1242                diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
     1243                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthFail,
     1244                    to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass);
     1245                backIsSet = GL_TRUE;
     1246            }
     1247            FILLDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].op);
     1248            FILLDIRTY(b->dirty);
     1249        }
     1250
     1251        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT_AND_BACK].op, nbitID);
     1252    }
     1253
     1254    if (frontDirty)
     1255    {
     1256        if (!CR_STATE_STENCIL_OP_FRONT_MATCH())
     1257        {
     1258            if (CR_STATE_STENCIL_OP_TO_FRONT_BACK_MATCH())
     1259            {
     1260                if (!frontIsSet || !backIsSet)
     1261                {
     1262                    if (activeFace == GL_BACK)
     1263                    {
     1264                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1265                        activeFace = GL_FRONT;
     1266                    }
     1267
     1268                    diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1269                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     1270                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1271
     1272                    frontIsSet = GL_TRUE;
     1273                    backIsSet = GL_TRUE;
     1274                }
     1275            }
     1276            else if (!CR_STATE_STENCIL_OP_FRONT_MATCH())
     1277            {
     1278                if (!frontIsSet)
     1279                {
     1280                    if (activeFace == GL_BACK)
     1281                    {
     1282                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1283                        activeFace = GL_FRONT;
     1284                    }
     1285
     1286                    diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1287                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     1288                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1289                    frontIsSet = GL_TRUE;
     1290                }
     1291            }
     1292            else if (!CR_STATE_STENCIL_OP_BACK_MATCH())
     1293            {
     1294                if (!backIsSet)
     1295                {
     1296                    if (activeFace == GL_BACK)
     1297                    {
     1298                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1299                        activeFace = GL_FRONT;
     1300                    }
     1301
     1302                    diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
     1303                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthFail,
     1304                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass);
     1305                    backIsSet = GL_TRUE;
     1306                }
     1307            }
     1308
     1309            FILLDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].op);
     1310            FILLDIRTY(b->dirty);
     1311        }
     1312        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_FRONT].op, nbitID);
     1313    }
     1314
     1315
     1316    if (backDirty)
     1317    {
     1318        if (!CR_STATE_STENCIL_OP_BACK_MATCH())
     1319        {
     1320            if (CR_STATE_STENCIL_OP_TO_FRONT_BACK_MATCH())
     1321            {
     1322                if (!frontIsSet || !backIsSet)
     1323                {
     1324                    if (activeFace == GL_BACK)
     1325                    {
     1326                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1327                        activeFace = GL_FRONT;
     1328                    }
     1329
     1330                    diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1331                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     1332                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1333
     1334                    frontIsSet = GL_TRUE;
     1335                    backIsSet = GL_TRUE;
     1336                }
     1337            }
     1338            else if (!CR_STATE_STENCIL_OP_FRONT_MATCH())
     1339            {
     1340                if (!frontIsSet)
     1341                {
     1342                    if (activeFace == GL_BACK)
     1343                    {
     1344                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1345                        activeFace = GL_FRONT;
     1346                    }
     1347
     1348                    diff_api.StencilOpSeparate (GL_FRONT, to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].fail,
     1349                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthFail,
     1350                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_FRONT].passDepthPass);
     1351                    frontIsSet = GL_TRUE;
     1352                }
     1353            }
     1354            else if (!CR_STATE_STENCIL_OP_BACK_MATCH())
     1355            {
     1356                if (!backIsSet)
     1357                {
     1358                    if (activeFace == GL_BACK)
     1359                    {
     1360                        diff_api.ActiveStencilFaceEXT(GL_FRONT);
     1361                        activeFace = GL_FRONT;
     1362                    }
     1363
     1364                    diff_api.StencilOpSeparate (GL_BACK, to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].fail,
     1365                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthFail,
     1366                        to->buffers[CRSTATE_STENCIL_BUFFER_ID_BACK].passDepthPass);
     1367                    backIsSet = GL_TRUE;
     1368                }
     1369            }
     1370
     1371            FILLDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].op);
     1372            FILLDIRTY(b->dirty);
     1373        }
     1374        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_BACK].op, nbitID);
     1375    }
     1376
     1377    if (CHECKDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].op, bitID))
     1378    {
     1379        if (CR_STATE_STENCIL_OP_MATCH(from, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK, to, CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK))
     1380        {
     1381            if (activeFace == GL_FRONT)
     1382            {
     1383                diff_api.ActiveStencilFaceEXT(GL_BACK);
     1384                activeFace = GL_BACK;
     1385            }
     1386
     1387            diff_api.StencilOp (to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].fail,
     1388                                    to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].passDepthFail,
     1389                                    to->buffers[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].passDepthPass);
     1390
     1391            FILLDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].op);
     1392            FILLDIRTY(b->dirty);
     1393        }
     1394        CLEARDIRTY(b->bufferRefs[CRSTATE_STENCIL_BUFFER_REF_ID_TWO_SIDE_BACK].op, nbitID);
     1395    }
     1396
     1397#undef CR_STATE_STENCIL_OP_FRONT_MATCH
     1398#undef CR_STATE_STENCIL_OP_BACK_MATCH
     1399#undef CR_STATE_STENCIL_OP_TO_FRONT_BACK_MATCH
     1400
     1401    if (activeFace != to->activeStencilFace)
     1402    {
     1403        diff_api.ActiveStencilFaceEXT(activeFace);
     1404    }
     1405
     1406    if (CHECKDIRTY(b->activeStencilFace, bitID))
     1407    {
     1408        if (from->activeStencilFace != to->activeStencilFace)
     1409        {
     1410            /* we already did it ( see above )*/
     1411            /* diff_api.ActiveStencilFaceEXT(to->activeStencilFace); */
     1412            FILLDIRTY(b->activeStencilFace);
     1413            FILLDIRTY(b->dirty);
     1414        }
     1415        CLEARDIRTY(b->activeStencilFace, nbitID);
     1416    }
     1417
     1418    if (CHECKDIRTY(b->writeMask, bitID))
     1419    {
     1420        if (from->writeMask != to->writeMask)
     1421        {
     1422            diff_api.StencilMask (to->writeMask);
     1423            FILLDIRTY(b->writeMask);
     1424            FILLDIRTY(b->dirty);
     1425        }
     1426        CLEARDIRTY(b->writeMask, nbitID);
     1427    }
     1428
     1429    CLEARDIRTY(b->dirty, nbitID);
     1430}
     1431
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette