[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20725] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Mon Jun 8 12:00:15 CEST 2009


Revision: 20725
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20725
Author:   ton
Date:     2009-06-08 12:00:14 +0200 (Mon, 08 Jun 2009)

Log Message:
-----------
2.5

Preview renders:

- Added proper button type (BUT_EXTRA) for preview buttons, to
  handle drawing better. It now first draws an alpha mask, to 
  ensure the preview is correctly fitting inside the widget style.
  It then draws the outline.
- Added protection for executing preview renders while regular
  rendering, that's not going to work...

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenlib/BLI_threads.h
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    branches/blender2.5/blender/source/blender/editors/preview/previewrender.c
    branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_subwindow.c

Modified: branches/blender2.5/blender/source/blender/blenlib/BLI_threads.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenlib/BLI_threads.h	2009-06-08 02:33:24 UTC (rev 20724)
+++ branches/blender2.5/blender/source/blender/blenlib/BLI_threads.h	2009-06-08 10:00:14 UTC (rev 20725)
@@ -53,6 +53,10 @@
 
 int		BLI_system_thread_count( void ); /* gets the number of threads the system can make use of */
 
+		/* exported by preview render, it has to ensure render buffers are not freed while draw */
+void	BLI_lock_malloc_thread(void);
+void	BLI_unlock_malloc_thread(void);
+
 /* ThreadedWorker is a simple tool for dispatching work to a limited number of threads in a transparent
  * fashion from the caller's perspective
  * */

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-06-08 02:33:24 UTC (rev 20724)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-06-08 10:00:14 UTC (rev 20725)
@@ -193,6 +193,7 @@
 #define OPTION		(38<<9)
 #define OPTIONN		(39<<9)
 #define SEARCH_MENU	(40<<9)
+#define BUT_EXTRA	(41<<9)
 #define BUTTYPE	(63<<9)
 
 /* Drawing

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-06-08 02:33:24 UTC (rev 20724)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-06-08 10:00:14 UTC (rev 20725)
@@ -665,13 +665,7 @@
 	/* widgets */
 	for(but= block->buttons.first; but; but= but->next) {
 		ui_but_to_pixelrect(&rect, ar, block, but);
-		ui_draw_but(ar, &style, but, &rect);
-		
-		/* temp? roundbox defines size/location of preview, and ID type */
-		if(but->type==ROUNDBOX)
-			if(block->drawextra) 
-				block->drawextra(C, but->poin, &rect);
-		
+		ui_draw_but(C, ar, &style, but, &rect);
 	}
 	
 	/* restore matrix */

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h	2009-06-08 02:33:24 UTC (rev 20724)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h	2009-06-08 10:00:14 UTC (rev 20725)
@@ -403,7 +403,7 @@
 void ui_draw_menu_back(struct uiStyle *style, uiBlock *block, rcti *rect);
 void ui_draw_search_back(struct uiStyle *style, uiBlock *block, rcti *rect);
 
-extern void ui_draw_but(ARegion *ar, struct uiStyle *style, uiBut *but, rcti *rect);
+extern void ui_draw_but(const struct bContext *C, ARegion *ar, struct uiStyle *style, uiBut *but, rcti *rect);
 		/* theme color init */
 struct ThemeUI;
 void ui_widget_color_init(struct ThemeUI *tui);

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c	2009-06-08 02:33:24 UTC (rev 20724)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c	2009-06-08 10:00:14 UTC (rev 20725)
@@ -51,8 +51,6 @@
 #include "UI_resources.h"
 #include "UI_view2d.h"
 
-#include "BIF_gl.h"
-
 #include "ED_util.h"
 #include "ED_types.h"
 #include "ED_screen.h"

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c	2009-06-08 02:33:24 UTC (rev 20724)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c	2009-06-08 10:00:14 UTC (rev 20725)
@@ -1321,8 +1321,8 @@
 
 	col= uiLayoutColumn(row, 0);
 	uiLayoutSetKeepAspect(col, 1);
-	uiDefBut(block, ROUNDBOX, 0, "", 0, 0, UI_UNIT_X*6, UI_UNIT_Y*6, id, 0.0, 0.0, 0, 0, "");
-	/* extra draw is tied to roundbox for now */
+	
+	uiDefBut(block, BUT_EXTRA, 0, "", 0, 0, UI_UNIT_X*6, UI_UNIT_Y*6, id, 0.0, 0.0, 0, 0, "");
 	uiBlockSetDrawExtraFunc(block, ED_preview_draw);
 	
 	uiBlockSetHandleFunc(block, do_preview_buttons, NULL);

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c	2009-06-08 02:33:24 UTC (rev 20724)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c	2009-06-08 10:00:14 UTC (rev 20725)
@@ -545,12 +545,20 @@
 	/* backdrop non AA */
 	if(wtb->inner) {
 		if(wcol->shaded==0) {
+			
+			/* this is to enable drawing zero alpha masks */
+			if(wcol->inner[3]==0)
+				glDisable(GL_BLEND);
+			
 			/* filled center, solid */
 			glColor4ubv(wcol->inner);
 			glBegin(GL_POLYGON);
 			for(a=0; a<wtb->totvert; a++)
 				glVertex2fv(wtb->inner_v[a]);
 			glEnd();
+
+			if(wcol->inner[3]==0)
+				glEnable(GL_BLEND);
 		}
 		else {
 			char col1[4], col2[4];
@@ -1596,6 +1604,46 @@
 	widgetbase_draw(&wtb, wcol);
 }
 
+static void widget_draw_extra_mask(const bContext *C, uiBut *but, uiWidgetType *wt, rcti *rect)
+{
+	uiWidgetBase wtb;
+	uiWidgetColors *wcol= &wt->wcol;
+	char col[4];
+	
+	/* state copy! */
+	wt->wcol= *(wt->wcol_theme);
+	
+	widget_init(&wtb);
+	
+	/* filled rect in back color, alpha 1 */
+	UI_GetThemeColor4ubv(TH_BACK, col);
+	col[3]= 255;
+	glColor4ubv(col);
+	glRecti(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
+	
+	/* inner mask with alpha zero */
+	wcol->inner[0]= wcol->inner[1]= wcol->inner[2]= wcol->inner[3]= 0;
+	wtb.outline= 0;
+	round_box_edges(&wtb, 15, rect, 5.0f);
+	widgetbase_draw(&wtb, wcol);
+	
+	if(but->block->drawextra) {
+		glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE);
+		glEnable(GL_BLEND);
+		
+		but->block->drawextra(C, but->poin, rect);
+		
+		glDisable(GL_BLEND);
+		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	}
+	/* outline */
+	wtb.outline= 1;
+	wtb.inner= 0;
+	widgetbase_draw(&wtb, wcol);
+	
+}
+
+
 static void widget_disabled(rcti *rect)
 {
 	float col[4];
@@ -1774,7 +1822,7 @@
 }
 
 /* conversion from old to new buttons, so still messy */
-void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect)
+void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rcti *rect)
 {
 	bTheme *btheme= U.themes.first;
 	ThemeUI *tui= &btheme->tui;
@@ -1864,6 +1912,10 @@
 			case ROUNDBOX:
 				wt= widget_type(UI_WTYPE_BOX);
 				break;
+			
+			case BUT_EXTRA:
+				widget_draw_extra_mask(C, but, widget_type(UI_WTYPE_BOX), rect);
+				break;
 				
 				 // XXX four old button types
 			case HSVCUBE:

Modified: branches/blender2.5/blender/source/blender/editors/preview/previewrender.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/preview/previewrender.c	2009-06-08 02:33:24 UTC (rev 20724)
+++ branches/blender2.5/blender/source/blender/editors/preview/previewrender.c	2009-06-08 10:00:14 UTC (rev 20725)
@@ -640,14 +640,8 @@
 
 	if(rres.rectf) {
 		if(rres.rectx==newx && rres.recty==newy) {
-			glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA);
-			glEnable(GL_BLEND);
-			
 			glaDrawPixelsSafe(rect->xmin, rect->ymin, rres.rectx, rres.recty, rres.rectx, GL_RGBA, GL_FLOAT, rres.rectf);
 			ok= 1;
-			
-			glDisable(GL_BLEND);
-			glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 		}
 	}
 	BLI_unlock_malloc_thread();
@@ -1083,9 +1077,16 @@
 
 void ED_preview_shader_job(const bContext *C, void *owner, ID *id, int sizex, int sizey)
 {
-	wmJob *steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), owner);
-	ShaderPreview *sp= MEM_callocN(sizeof(ShaderPreview), "shader preview");
+	wmJob *steve;
+	ShaderPreview *sp;
 
+	/* XXX ugly global still, but we can't do preview while rendering */
+	if(G.rendering)
+		return;
+
+	steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), owner);
+	sp= MEM_callocN(sizeof(ShaderPreview), "shader preview");
+
 	/* customdata for preview thread */
 	sp->scene= CTX_data_scene(C);
 	sp->owner= owner;

Modified: branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c	2009-06-08 02:33:24 UTC (rev 20724)
+++ branches/blender2.5/blender/source/blender/render/intern/source/pipeline.c	2009-06-08 10:00:14 UTC (rev 20725)
@@ -2432,7 +2432,7 @@
 /* general Blender frame render call */
 void RE_BlenderFrame(Render *re, Scene *scene, int frame)
 {
-	/* ugly global still... is to prevent renderwin events and signal subsurfs etc to make full resol */
+	/* ugly global still... is to prevent preview events and signal subsurfs etc to make full resol */
 	G.rendering= 1;
 	re->result_ok= 0;
 	

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_subwindow.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_subwindow.c	2009-06-08 02:33:24 UTC (rev 20724)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_subwindow.c	2009-06-08 10:00:14 UTC (rev 20725)
@@ -307,10 +307,16 @@
 		glGetFloatv(GL_MODELVIEW_MATRIX, (float *)_curswin->winmat);
 }
 
+static int debugpush= 0;
+
 void wmPushMatrix(void)
 {
 	if(_curswin==NULL) return;
 	
+	if(debugpush)
+		printf("wmPushMatrix error already pushed\n");
+	debugpush= 1;
+	
 	Mat4CpyMat4(_curswin->viewmat1, _curswin->viewmat);
 	Mat4CpyMat4(_curswin->winmat1, _curswin->winmat);
 }
@@ -319,6 +325,10 @@
 {
 	if(_curswin==NULL) return;
 	
+	if(debugpush==0)
+		printf("wmPopMatrix error nothing popped\n");
+	debugpush= 0;
+	
 	Mat4CpyMat4(_curswin->viewmat, _curswin->viewmat1);
 	Mat4CpyMat4(_curswin->winmat, _curswin->winmat1);
 	





More information about the Bf-blender-cvs mailing list