summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Bragg <robert@linux.intel.com>2011-01-24 18:42:28 +0000
committerRobert Bragg <robert@linux.intel.com>2011-01-24 18:53:08 +0000
commitdc56d908edb89fce99fcb9b911c53c91ee1be8a2 (patch)
treef2989a8cdff727c1bfd67a3c39eb95bf165d2ffe
parent325c620f81b4d164a066f246af7f2c5af06f4608 (diff)
downloadcogl-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.c27
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;
}