[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