void _cogl_pipeline_hash_depth_state (CoglPipeline *authority, CoglPipelineHashState *state) { CoglDepthState *depth_state = &authority->big_state->depth_state; unsigned int hash = state->hash; if (depth_state->test_enabled) { uint8_t enabled = depth_state->test_enabled; CoglDepthTestFunction function = depth_state->test_function; hash = _cogl_util_one_at_a_time_hash (hash, &enabled, sizeof (enabled)); hash = _cogl_util_one_at_a_time_hash (hash, &function, sizeof (function)); } if (depth_state->write_enabled) { uint8_t enabled = depth_state->write_enabled; float near_val = depth_state->range_near; float far_val = depth_state->range_far; hash = _cogl_util_one_at_a_time_hash (hash, &enabled, sizeof (enabled)); hash = _cogl_util_one_at_a_time_hash (hash, &near_val, sizeof (near_val)); hash = _cogl_util_one_at_a_time_hash (hash, &far_val, sizeof (far_val)); } state->hash = hash; }
void _cogl_pipeline_hash_blend_enable_state (CoglPipeline *authority, CoglPipelineHashState *state) { uint8_t blend_enable = authority->blend_enable; state->hash = _cogl_util_one_at_a_time_hash (state->hash, &blend_enable, 1); }
void _cogl_pipeline_hash_color_state (CoglPipeline *authority, CoglPipelineHashState *state) { state->hash = _cogl_util_one_at_a_time_hash (state->hash, &authority->color, _COGL_COLOR_DATA_SIZE); }
void _cogl_pipeline_hash_logic_ops_state (CoglPipeline *authority, CoglPipelineHashState *state) { CoglPipelineLogicOpsState *logic_ops_state = &authority->big_state->logic_ops_state; state->hash = _cogl_util_one_at_a_time_hash (state->hash, &logic_ops_state->color_mask, sizeof (CoglColorMask)); }
void _cogl_pipeline_hash_point_size_state (CoglPipeline *authority, CoglPipelineHashState *state) { float point_size = authority->big_state->point_size; state->hash = _cogl_util_one_at_a_time_hash (state->hash, &point_size, sizeof (point_size)); }
void _cogl_pipeline_hash_alpha_func_reference_state (CoglPipeline *authority, CoglPipelineHashState *state) { CoglPipelineAlphaFuncState *alpha_state = &authority->big_state->alpha_state; float ref = alpha_state->alpha_func_reference; state->hash = _cogl_util_one_at_a_time_hash (state->hash, &ref, sizeof (float)); }
void _cogl_pipeline_hash_alpha_func_state (CoglPipeline *authority, CoglPipelineHashState *state) { CoglPipelineAlphaFuncState *alpha_state = &authority->big_state->alpha_state; state->hash = _cogl_util_one_at_a_time_hash (state->hash, &alpha_state->alpha_func, sizeof (alpha_state->alpha_func)); }
void _cogl_pipeline_hash_cull_face_state (CoglPipeline *authority, CoglPipelineHashState *state) { CoglPipelineCullFaceState *cull_face_state = &authority->big_state->cull_face_state; /* The cull face state is considered equal if two pipelines are both set to no culling. If the front winding property is ever used for anything else or the hashing is used not just for drawing then this would have to change */ if (cull_face_state->mode == COGL_PIPELINE_CULL_FACE_MODE_NONE) state->hash = _cogl_util_one_at_a_time_hash (state->hash, &cull_face_state->mode, sizeof (CoglPipelineCullFaceMode)); else state->hash = _cogl_util_one_at_a_time_hash (state->hash, cull_face_state, sizeof (CoglPipelineCullFaceState)); }
void _cogl_pipeline_snippet_list_hash (CoglPipelineSnippetList *list, unsigned int *hash) { GList *l; for (l = list->entries; l; l = l->next) { CoglSnippet *snippet = l->data; *hash = _cogl_util_one_at_a_time_hash (*hash, &snippet, sizeof (CoglSnippet *)); } }
void _cogl_pipeline_hash_blend_state (CoglPipeline *authority, CoglPipelineHashState *state) { CoglPipelineBlendState *blend_state = &authority->big_state->blend_state; unsigned int hash; _COGL_GET_CONTEXT (ctx, NO_RETVAL); if (!authority->real_blend_enable) return; hash = state->hash; #if defined(HAVE_COGL_GLES2) || defined(HAVE_COGL_GL) if (ctx->driver != COGL_DRIVER_GLES1) { hash = _cogl_util_one_at_a_time_hash (hash, &blend_state->blend_equation_rgb, sizeof (blend_state->blend_equation_rgb)); hash = _cogl_util_one_at_a_time_hash (hash, &blend_state->blend_equation_alpha, sizeof (blend_state->blend_equation_alpha)); hash = _cogl_util_one_at_a_time_hash (hash, &blend_state->blend_src_factor_alpha, sizeof (blend_state->blend_src_factor_alpha)); hash = _cogl_util_one_at_a_time_hash (hash, &blend_state->blend_dst_factor_alpha, sizeof (blend_state->blend_dst_factor_alpha)); if (blend_state->blend_src_factor_rgb == GL_ONE_MINUS_CONSTANT_COLOR || blend_state->blend_src_factor_rgb == GL_CONSTANT_COLOR || blend_state->blend_dst_factor_rgb == GL_ONE_MINUS_CONSTANT_COLOR || blend_state->blend_dst_factor_rgb == GL_CONSTANT_COLOR) { hash = _cogl_util_one_at_a_time_hash (hash, &blend_state->blend_constant, sizeof (blend_state->blend_constant)); } } #endif hash = _cogl_util_one_at_a_time_hash (hash, &blend_state->blend_src_factor_rgb, sizeof (blend_state->blend_src_factor_rgb)); hash = _cogl_util_one_at_a_time_hash (hash, &blend_state->blend_dst_factor_rgb, sizeof (blend_state->blend_dst_factor_rgb)); state->hash = hash; }