[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55719] trunk/blender/source/blender: Usability fix, for color grading.

Ton Roosendaal ton at blender.org
Tue Apr 2 14:41:11 CEST 2013


Revision: 55719
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55719
Author:   ton
Date:     2013-04-02 12:41:11 +0000 (Tue, 02 Apr 2013)
Log Message:
-----------
Usability fix, for color grading.

The Scopes and Histogram (Image editor, Sequencer) were not updating on
changes in color or display settings. 

- Missing notifiers for refreshing
- Missing code to draw correct for managed byte buffers.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/colortools.c
    trunk/blender/source/blender/editors/space_image/space_image.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
    trunk/blender/source/blender/editors/space_sequencer/space_sequencer.c

Modified: trunk/blender/source/blender/blenkernel/intern/colortools.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/colortools.c	2013-04-02 12:38:05 UTC (rev 55718)
+++ trunk/blender/source/blender/blenkernel/intern/colortools.c	2013-04-02 12:41:11 UTC (rev 55719)
@@ -1008,6 +1008,7 @@
 		IMB_colormanagement_processor_free(cm_processor);
 }
 
+/* if view_settings, it also applies this to byte buffers */
 void scopes_update(Scopes *scopes, ImBuf *ibuf, const ColorManagedViewSettings *view_settings,
                    const ColorManagedDisplaySettings *display_settings)
 {
@@ -1021,7 +1022,7 @@
 	float rgba[4], ycc[3], luma;
 	int ycc_mode = -1;
 	const short is_float = (ibuf->rect_float != NULL);
-
+	void *cache_handle = NULL;
 	struct ColormanageProcessor *cm_processor = NULL;
 
 	if (ibuf->rect == NULL && ibuf->rect_float == NULL) return;
@@ -1090,12 +1091,17 @@
 	
 	if (is_float)
 		rf = ibuf->rect_float;
-	else
-		rc = (unsigned char *)ibuf->rect;
-
+	else {
+		if (view_settings)
+			rc = (unsigned char *)IMB_display_buffer_acquire(ibuf, view_settings, display_settings, &cache_handle);
+		else
+			rc = (unsigned char *)ibuf->rect;
+	}
+	
 	if (ibuf->rect_float)
 		cm_processor = IMB_colormanagement_display_processor_new(view_settings, display_settings);
 
+	printf("update %p\n", cm_processor);
 	for (y = 0; y < ibuf->y; y++) {
 		if (savedlines < scopes->sample_lines && y >= ((savedlines) * ibuf->y) / (scopes->sample_lines + 1)) {
 			saveline = 1;
@@ -1193,7 +1199,9 @@
 
 	if (cm_processor)
 		IMB_colormanagement_processor_free(cm_processor);
-
+	if (cache_handle)
+		IMB_display_buffer_release(cache_handle);
+	
 	scopes->ok = 1;
 }
 

Modified: trunk/blender/source/blender/editors/space_image/space_image.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/space_image.c	2013-04-02 12:38:05 UTC (rev 55718)
+++ trunk/blender/source/blender/editors/space_image/space_image.c	2013-04-02 12:41:11 UTC (rev 55719)
@@ -435,6 +435,12 @@
 	
 	/* context changes */
 	switch (wmn->category) {
+		case NC_WINDOW:
+			/* notifier comes from editing color space */
+			image_scopes_tag_refresh(sa);
+			ED_area_tag_refresh(sa);
+			ED_area_tag_redraw(sa);
+			break;
 		case NC_SCENE:
 			switch (wmn->data) {
 				case ND_FRAME:
@@ -801,11 +807,15 @@
 	Scene *scene = CTX_data_scene(C);
 	void *lock;
 	ImBuf *ibuf = ED_space_image_acquire_buffer(sima, &lock);
+	
 	if (ibuf) {
 		if (!sima->scopes.ok) {
 			BKE_histogram_update_sample_line(&sima->sample_line_hist, ibuf, &scene->view_settings, &scene->display_settings);
 		}
-		scopes_update(&sima->scopes, ibuf, &scene->view_settings, &scene->display_settings);
+		if (sima->image->flag & IMA_VIEW_AS_RENDER)
+			scopes_update(&sima->scopes, ibuf, &scene->view_settings, &scene->display_settings);
+		else
+			scopes_update(&sima->scopes, ibuf, NULL, &scene->display_settings);
 	}
 	ED_space_image_release_buffer(sima, ibuf, lock);
 	

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2013-04-02 12:38:05 UTC (rev 55718)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2013-04-02 12:41:11 UTC (rev 55719)
@@ -897,10 +897,8 @@
 	ImBuf *display_ibuf = IMB_dupImBuf(ibuf);
 	ImBuf *scope;
 
-	if (display_ibuf->rect_float) {
-		IMB_colormanagement_imbuf_make_display_space(display_ibuf, &scene->view_settings,
+	IMB_colormanagement_imbuf_make_display_space(display_ibuf, &scene->view_settings,
 		                                             &scene->display_settings);
-	}
 
 	scope = make_scope_cb(display_ibuf);
 

Modified: trunk/blender/source/blender/editors/space_sequencer/space_sequencer.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/space_sequencer.c	2013-04-02 12:38:05 UTC (rev 55718)
+++ trunk/blender/source/blender/editors/space_sequencer/space_sequencer.c	2013-04-02 12:41:11 UTC (rev 55719)
@@ -330,6 +330,7 @@
 					break;
 			}
 			break;
+		case NC_WINDOW:
 		case NC_SPACE:
 			if (wmn->data == ND_SPACE_SEQUENCER)
 				sequencer_scopes_tag_refresh(sa);




More information about the Bf-blender-cvs mailing list