diff options
author | Robert Bragg <robert@linux.intel.com> | 2011-01-24 18:42:28 +0000 |
---|---|---|
committer | Robert Bragg <robert@linux.intel.com> | 2011-01-24 18:53:08 +0000 |
commit | dc56d908edb89fce99fcb9b911c53c91ee1be8a2 (patch) | |
tree | f2989a8cdff727c1bfd67a3c39eb95bf165d2ffe | |
parent | 325c620f81b4d164a066f246af7f2c5af06f4608 (diff) | |
download | cogl-dc56d908edb89fce99fcb9b911c53c91ee1be8a2.tar.gz |
pipeline: fix for _init_multi_property_sparse_state1.6.0
When copying COMBINE state in
_cogl_pipeline_layer_init_multi_property_sparse_state we would read some
state from the destination layer (invalid data potentially), then
redundantly set the value back on the destination. This was picked up by
valgrind, and the code is now more careful about how it references the
src layer vs the destination layer.
-rw-r--r-- | cogl/cogl-pipeline.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/cogl/cogl-pipeline.c b/cogl/cogl-pipeline.c index 24f30467..83f0c4bb 100644 --- a/cogl/cogl-pipeline.c +++ b/cogl/cogl-pipeline.c @@ -1745,28 +1745,29 @@ _cogl_pipeline_layer_init_multi_property_sparse_state ( { int n_args; int i; - CoglPipelineLayerBigState *big_state = layer->big_state; - GLint func = big_state->texture_combine_rgb_func; + CoglPipelineLayerBigState *src_big_state = authority->big_state; + CoglPipelineLayerBigState *dest_big_state = layer->big_state; + GLint func = src_big_state->texture_combine_rgb_func; - big_state->texture_combine_rgb_func = func; + dest_big_state->texture_combine_rgb_func = func; n_args = _cogl_get_n_args_for_combine_func (func); for (i = 0; i < n_args; i++) { - big_state->texture_combine_rgb_src[i] = - authority->big_state->texture_combine_rgb_src[i]; - big_state->texture_combine_rgb_op[i] = - authority->big_state->texture_combine_rgb_op[i]; + dest_big_state->texture_combine_rgb_src[i] = + src_big_state->texture_combine_rgb_src[i]; + dest_big_state->texture_combine_rgb_op[i] = + src_big_state->texture_combine_rgb_op[i]; } - func = authority->big_state->texture_combine_alpha_func; - big_state->texture_combine_alpha_func = func; + func = src_big_state->texture_combine_alpha_func; + dest_big_state->texture_combine_alpha_func = func; n_args = _cogl_get_n_args_for_combine_func (func); for (i = 0; i < n_args; i++) { - big_state->texture_combine_alpha_src[i] = - authority->big_state->texture_combine_alpha_src[i]; - big_state->texture_combine_alpha_op[i] = - authority->big_state->texture_combine_alpha_op[i]; + dest_big_state->texture_combine_alpha_src[i] = + src_big_state->texture_combine_alpha_src[i]; + dest_big_state->texture_combine_alpha_op[i] = + src_big_state->texture_combine_alpha_op[i]; } break; } |