diff options
author | Ton Roosendaal <ton@blender.org> | 2006-07-31 23:23:42 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2006-07-31 23:23:42 +0400 |
commit | c2edcd48794b210c9b3fcd439830211350f8d140 (patch) | |
tree | bd0a192c20bd6e861b39e1ae319e463d9718b8b2 /source | |
parent | e168d67b3205977777715f143554a15f259c0a40 (diff) |
Siggraph show commit!
- pending commit for OSX intel systems, with intel graphics. These now call
an extra swapbuffers after glFlush(). Code is ifdeffed, and doesnt affect
other systems.
- show-off commit: option to have transparent nodes over the composite
result. Only draws Image for active Viewer Node now, and image doesnt
translate nor zoom (which isnt bad though).
Set in themes the alpha color of "node backdrop" to make nodes
transparent.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/include/BIF_glutil.h | 4 | ||||
-rw-r--r-- | source/blender/include/BIF_screen.h | 6 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_space_types.h | 1 | ||||
-rw-r--r-- | source/blender/src/drawnode.c | 35 | ||||
-rw-r--r-- | source/blender/src/drawobject.c | 2 | ||||
-rw-r--r-- | source/blender/src/drawtext.c | 3 | ||||
-rw-r--r-- | source/blender/src/editmesh_loop.c | 4 | ||||
-rw-r--r-- | source/blender/src/editmesh_mods.c | 2 | ||||
-rw-r--r-- | source/blender/src/editmesh_tools.c | 3 | ||||
-rw-r--r-- | source/blender/src/editscreen.c | 55 | ||||
-rw-r--r-- | source/blender/src/editsima.c | 2 | ||||
-rw-r--r-- | source/blender/src/editview.c | 4 | ||||
-rw-r--r-- | source/blender/src/glutil.c | 20 | ||||
-rw-r--r-- | source/blender/src/header_node.c | 2 | ||||
-rw-r--r-- | source/blender/src/interface.c | 26 | ||||
-rw-r--r-- | source/blender/src/previewrender.c | 4 | ||||
-rw-r--r-- | source/blender/src/space.c | 2 | ||||
-rwxr-xr-x | source/blender/src/transform.c | 3 |
18 files changed, 89 insertions, 89 deletions
diff --git a/source/blender/include/BIF_glutil.h b/source/blender/include/BIF_glutil.h index 48d4d903d28..db2b55aab86 100644 --- a/source/blender/include/BIF_glutil.h +++ b/source/blender/include/BIF_glutil.h @@ -198,12 +198,14 @@ void gla2DGetMap(gla2DDrawInfo *di, struct rctf *rect); void gla2DSetMap(gla2DDrawInfo *di, struct rctf *rect); -/* use this for platform hacks. for now glPointSize is solved here */ +/* use this for platform hacks. glPointSize is solved here */ void bglBegin(int mode); void bglEnd(void); void bglVertex3fv(float *vec); void bglVertex3f(float x, float y, float z); void bglVertex2fv(float *vec); +/* intel gfx cards frontbuffer problem */ +void bglFlush(void); void set_inverted_drawing(int enable); diff --git a/source/blender/include/BIF_screen.h b/source/blender/include/BIF_screen.h index c76f961014a..e97d10b2455 100644 --- a/source/blender/include/BIF_screen.h +++ b/source/blender/include/BIF_screen.h @@ -125,12 +125,6 @@ int do_screenhandlers(struct bScreen *sc); int has_screenhandler(struct bScreen *sc, short eventcode); /***/ - -/** - * Draw @a text in the header of each info window - * of the given screen. - */ -void screen_draw_info_text(struct bScreen *sc, char *text); /* return all layers of all 3d windows in a screen */ unsigned int screen_view3d_layers(void); diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 105218a0cab..98ca418cdde 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -323,6 +323,7 @@ typedef struct SpaceNode { /* snode->flag */ #define SNODE_DO_PREVIEW 1 +#define SNODE_BACKDRAW 2 # # diff --git a/source/blender/src/drawnode.c b/source/blender/src/drawnode.c index 0fc2b207f5b..81b2433ee8e 100644 --- a/source/blender/src/drawnode.c +++ b/source/blender/src/drawnode.c @@ -37,6 +37,7 @@ #include "DNA_action_types.h" #include "DNA_ipo_types.h" #include "DNA_ID.h" +#include "DNA_image_types.h" #include "DNA_material_types.h" #include "DNA_node_types.h" #include "DNA_object_types.h" @@ -76,6 +77,7 @@ #include "MEM_guardedalloc.h" #include "RE_pipeline.h" +#include "IMB_imbuf_types.h" #include "blendef.h" #include "butspace.h" @@ -1117,6 +1119,33 @@ static void draw_nodespace_grid(SpaceNode *snode) glEnd(); } +static void draw_nodespace_back(ScrArea *sa, SpaceNode *snode) +{ + Image *ima; + + draw_nodespace_grid(snode); + + if(snode->flag & SNODE_BACKDRAW) { + ima= (Image *)find_id("IM", "Viewer Node"); + if(ima && ima->ibuf) { + /* somehow the offset has to be calculated inverse */ + + glaDefine2DArea(&sa->winrct); + /* ortho at pixel level curarea */ + myortho2(-0.375, sa->winx-0.375, -0.375, sa->winy-0.375); + + if(ima->ibuf->rect) + glaDrawPixelsSafe((sa->winx-ima->ibuf->x)/2, (sa->winy-ima->ibuf->y)/2, ima->ibuf->x, ima->ibuf->y, ima->ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ima->ibuf->rect); + else + glaDrawPixelsSafe((sa->winx-ima->ibuf->x)/2, (sa->winy-ima->ibuf->y)/2, ima->ibuf->x, ima->ibuf->y, ima->ibuf->x, GL_RGBA, GL_FLOAT, ima->ibuf->rect_float); + + /* sort this out, this should not be needed */ + myortho2(snode->v2d.cur.xmin, snode->v2d.cur.xmax, snode->v2d.cur.ymin, snode->v2d.cur.ymax); + bwin_clear_viewmat(sa->win); /* clear buttons view */ + glLoadIdentity(); + } + } +} static void nodeshadow(rctf *rct, float radius, float aspect, int select) { @@ -1545,9 +1574,11 @@ static void node_draw_basis(ScrArea *sa, SpaceNode *snode, bNode *node) snode_drawstring(snode, node->name, (int)(iconofs - rct->xmin-18.0f)); /* body */ - BIF_ThemeColor(TH_NODE); + BIF_ThemeColor4(TH_NODE); + glEnable(GL_BLEND); uiSetRoundBox(8); uiRoundBox(rct->xmin, rct->ymin, rct->xmax, rct->ymax-NODE_DY, BASIS_RAD); + glDisable(GL_BLEND); /* scaling indicator */ node_scaling_widget(TH_NODE, snode->aspect, rct->xmax-BASIS_RAD*snode->aspect, rct->ymin, rct->xmax, rct->ymin+BASIS_RAD*snode->aspect); @@ -1958,7 +1989,7 @@ void drawnodespace(ScrArea *sa, void *spacedata) snode->curfont= uiSetCurFont_ext(snode->aspect); /* backdrop */ - draw_nodespace_grid(snode); + draw_nodespace_back(sa, snode); /* nodes */ snode_set_context(snode); diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c index 9d990f97d16..53337651249 100644 --- a/source/blender/src/drawobject.c +++ b/source/blender/src/drawobject.c @@ -4069,7 +4069,7 @@ void draw_object_ext(Base *base) G.f &= ~G_DRAW_EXT; - glFlush(); /* reveil frontbuffer drawing */ + bglFlush(); /* reveil frontbuffer drawing */ glDrawBuffer(GL_BACK); if(G.vd->zbuf) { diff --git a/source/blender/src/drawtext.c b/source/blender/src/drawtext.c index 5025b08de1e..c2c6aa89e7d 100644 --- a/source/blender/src/drawtext.c +++ b/source/blender/src/drawtext.c @@ -64,6 +64,7 @@ #include "BKE_main.h" #include "BIF_gl.h" +#include "BIF_glutil.h" #include "BIF_keyval.h" #include "BIF_interface.h" #include "BIF_drawtext.h" @@ -820,6 +821,7 @@ static void do_textscroll(SpaceText *st, int mode) glDrawBuffer(GL_FRONT); uiEmboss(st->txtbar.xmin, st->txtbar.ymin, st->txtbar.xmax, st->txtbar.ymax, st->flags & ST_SCROLL_SELECT); + bglFlush(); glDrawBuffer(GL_BACK); getmouseco_areawin(mval); @@ -857,6 +859,7 @@ static void do_textscroll(SpaceText *st, int mode) glDrawBuffer(GL_FRONT); uiEmboss(st->txtbar.xmin, st->txtbar.ymin, st->txtbar.xmax, st->txtbar.ymax, st->flags & ST_SCROLL_SELECT); + bglFlush(); glDrawBuffer(GL_BACK); } diff --git a/source/blender/src/editmesh_loop.c b/source/blender/src/editmesh_loop.c index 609b68b5cf5..8a88e40cb78 100644 --- a/source/blender/src/editmesh_loop.c +++ b/source/blender/src/editmesh_loop.c @@ -506,7 +506,7 @@ static CutCurve *get_mouse_trail(int *len, char mode) if( event==ESCKEY || event==RIGHTMOUSE ) { if (curve) MEM_freeN(curve); *len=0; - glFlush(); + bglFlush(); glDrawBuffer(GL_BACK); return(NULL); break; @@ -586,7 +586,7 @@ static CutCurve *get_mouse_trail(int *len, char mode) } } - glFlush(); + bglFlush(); glDrawBuffer(GL_BACK); persp(PERSP_VIEW); diff --git a/source/blender/src/editmesh_mods.c b/source/blender/src/editmesh_mods.c index ba6dce0001f..57b481e3191 100644 --- a/source/blender/src/editmesh_mods.c +++ b/source/blender/src/editmesh_mods.c @@ -696,7 +696,7 @@ static void unified_select_draw(EditVert *eve, EditEdge *eed, EditFace *efa) glPointSize(1.0); glPopMatrix(); - glFlush(); + bglFlush(); glDrawBuffer(GL_BACK); if(G.vd->flag & V3D_CLIPPING) diff --git a/source/blender/src/editmesh_tools.c b/source/blender/src/editmesh_tools.c index d7bcf39a1cf..3ce7ef4cd16 100644 --- a/source/blender/src/editmesh_tools.c +++ b/source/blender/src/editmesh_tools.c @@ -75,6 +75,7 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise #include "BIF_cursors.h" #include "BIF_editmesh.h" #include "BIF_gl.h" +#include "BIF_glutil.h" #include "BIF_graphics.h" #include "BIF_interface.h" #include "BIF_mywindow.h" @@ -4583,7 +4584,7 @@ void bevel_menu() setlinestyle(0); persp(PERSP_VIEW); - glFlush(); // flush display for frontbuffer + bglFlush(); // flush display for frontbuffer glDrawBuffer(GL_BACK); } while(qtest()) { diff --git a/source/blender/src/editscreen.c b/source/blender/src/editscreen.c index 7ae0bdfac5e..ca5037f5986 100644 --- a/source/blender/src/editscreen.c +++ b/source/blender/src/editscreen.c @@ -712,7 +712,7 @@ void splash(void *data, int datasize, char *string) BMF_DrawString(font, string); } - glFlush(); + bglFlush(); glDrawBuffer(GL_BACK); IMB_freeImBuf(bbuf); @@ -2750,7 +2750,7 @@ static void joinarea_interactive(ScrArea *area, ScrEdge *onedge) scrarea_draw_shape_dark(scr,'d'); else if(scr==down) scrarea_draw_shape_dark(scr,'u'); - glFlush(); + bglFlush(); /* "never ending loop" of interactive selection */ while(!ok) { @@ -2793,7 +2793,7 @@ static void joinarea_interactive(ScrArea *area, ScrEdge *onedge) /* cancel joining of joining */ if(val && (event==ESCKEY || event==RIGHTMOUSE)) ok= -1; - glFlush(); + bglFlush(); } glReadBuffer(GL_BACK); @@ -3074,12 +3074,12 @@ static void splitarea_interactive(ScrArea *area, ScrEdge *onedge) if(val && (event==ESCKEY || event==RIGHTMOUSE)) { ok= -1; } - glFlush(); + bglFlush(); } if (!first) { scrarea_draw_splitpoint(sa, dir, fac); - glFlush(); + bglFlush(); } glReadBuffer(GL_BACK); glDrawBuffer(GL_BACK); @@ -3390,7 +3390,7 @@ static void moveareas(ScrEdge *edge) delta= (dir=='h')?(mval[1]-mvalo[1]):(mval[0]-mvalo[0]); delta= CLAMPIS(delta, -smaller, bigger); draw_front_xor_dirdist_line(dir, edge_position+delta, edge_start, edge_end); - glFlush(); + bglFlush(); } else if (event==LEFTMOUSE) { doit= 1; @@ -3405,7 +3405,7 @@ static void moveareas(ScrEdge *edge) } draw_front_xor_dirdist_line(dir, edge_position+delta, edge_start, edge_end); - glFlush(); + bglFlush(); glReadBuffer(GL_BACK); glDrawBuffer(GL_BACK); @@ -3638,47 +3638,6 @@ void initscreen(void) default_twosplit(); } -/***/ - -void screen_draw_info_text(bScreen *sc, char *text) { - Window *oldactwin= winlay_get_active_window(); - ScrArea *sa; - - /* - * Because this is called from within rendering - * internals it is possible our window is not - * active. - */ - window_make_active(mainwin); - - for (sa= sc->areabase.first; sa; sa= sa->next) { - if (sa->spacetype==SPACE_INFO) { - int x= sa->headbutlen - 28; - int y= 6; - - areawinset(sa->headwin); - glDrawBuffer(GL_FRONT); - - cpack(0xA08060); - glRecti(x-11, y-6, x+55, y+13); - - cpack(0x909090); - glRecti(x+55, y-6, x+1280, y+14); - - cpack(0x0); - glRasterPos2i(x, y); - BMF_DrawString(G.fonts, text); - - glFlush(); - glDrawBuffer(GL_BACK); - - sa->head_swap= WIN_FRONT_OK; - } - } - - if (oldactwin && oldactwin!=mainwin) window_make_active(oldactwin); -} - static int curcursor; int get_cursor(void) { diff --git a/source/blender/src/editsima.c b/source/blender/src/editsima.c index 6785a0e607f..25454eece40 100644 --- a/source/blender/src/editsima.c +++ b/source/blender/src/editsima.c @@ -68,6 +68,7 @@ #include "BKE_utildefines.h" #include "BIF_gl.h" +#include "BIF_glutil.h" #include "BIF_interface.h" #include "BIF_screen.h" #include "BIF_drawimage.h" @@ -911,6 +912,7 @@ void uvedit_selectionCB(short selecting, Object *editobj, short *mval, float rad else { /* force_draw() is no good here... */ glDrawBuffer(GL_FRONT); draw_tfaces(); + bglFlush(); glDrawBuffer(GL_BACK); } } diff --git a/source/blender/src/editview.c b/source/blender/src/editview.c index c5bf0e9c487..19a644c5c7b 100644 --- a/source/blender/src/editview.c +++ b/source/blender/src/editview.c @@ -766,7 +766,7 @@ int gesture(void) if(i) { if(lasso) draw_lasso_select(mcords, i, 0); else sdrawXORline(mcords[i-1][0], mcords[i-1][1], mcords[i][0], mcords[i][1]); - glFlush(); + bglFlush(); } i++; } @@ -1777,7 +1777,7 @@ void borderselect(void) } } /* frontbuffer flush */ - glFlush(); + bglFlush(); MEM_freeN(vbuffer); diff --git a/source/blender/src/glutil.c b/source/blender/src/glutil.c index ef6728c1a0a..dced81579c3 100644 --- a/source/blender/src/glutil.c +++ b/source/blender/src/glutil.c @@ -32,6 +32,7 @@ * ***** END GPL/BL DUAL LICENSE BLOCK ***** */ +#include <stdio.h> #include <math.h> #include "MEM_guardedalloc.h" @@ -46,6 +47,7 @@ #include "BIF_gl.h" #include "BIF_glutil.h" +#include "BIF_mywindow.h" /* Invert line handling */ @@ -621,6 +623,24 @@ void bglPolygonOffset(float dist) } } +static int is_a_really_crappy_intel_card(void) +{ + static int well_is_it= -1; + + /* Do you understand the implication? Do you? */ + if (well_is_it==-1) + well_is_it= (strcmp((char*) glGetString(GL_VENDOR), "Intel Inc.") == 0); + + return well_is_it; +} +void bglFlush(void) +{ + glFlush(); +#ifdef __APPLE__ + if(is_a_really_crappy_intel_card()) + myswapbuffers(); //hack to get mac intel graphics to show frontbuffer +#endif +} diff --git a/source/blender/src/header_node.c b/source/blender/src/header_node.c index 91e421736f2..d639d9b0bea 100644 --- a/source/blender/src/header_node.c +++ b/source/blender/src/header_node.c @@ -602,6 +602,8 @@ void node_buttons(ScrArea *sa) xco+= 80; uiDefButBitS(block, TOG, R_COMP_FREE, B_NOP, "Free Unused", xco+5,0,80,19, &G.scene->r.scemode, 0.0f, 0.0f, 0, 0, "Free Nodes that are not used while composite"); xco+= 80; + uiDefButBitS(block, TOG, SNODE_BACKDRAW, B_NOP, "Backdrop", xco+5,0,80,19, &snode->flag, 0.0f, 0.0f, 0, 0, "Use active Viewer Node output as backdrop"); + xco+= 80; } /* always as last */ diff --git a/source/blender/src/interface.c b/source/blender/src/interface.c index b456e1d315c..3a4a15a723a 100644 --- a/source/blender/src/interface.c +++ b/source/blender/src/interface.c @@ -300,18 +300,6 @@ static uiOverDraw *ui_begin_overdraw(int minx, int miny, int maxx, int maxy) return od; } -#ifdef __APPLE__ -static int is_a_really_crappy_intel_card(void) { - static int well_is_it= -1; - - /* Do you understand the implication? Do you? */ - if (well_is_it==-1) - well_is_it= (strcmp((char*) glGetString(GL_VENDOR), "Intel Inc.") == 0); - - return well_is_it; -} -#endif - static void ui_flush_overdraw(uiOverDraw *od) { @@ -322,11 +310,7 @@ static void ui_flush_overdraw(uiOverDraw *od) glRasterPos2s(od->x, od->y); myglCopyPixels(od->x, od->y, od->sx, od->sy, GL_COLOR); glEnable(GL_DITHER); - glFlush(); -#ifdef __APPLE__ - if (is_a_really_crappy_intel_card()) - myswapbuffers(); //hack to get mac intel graphics to show menus -#endif + bglFlush(); glDrawBuffer(GL_BACK); } @@ -371,7 +355,7 @@ static void ui_end_overdraw(uiOverDraw *od) glRasterPos2s(od->x, od->y); glDrawPixels(od->sx, od->sy, GL_RGBA, GL_UNSIGNED_BYTE, od->rect); - glFlush(); + bglFlush(); glDrawBuffer(GL_BACK); glEnable(GL_DITHER); @@ -394,7 +378,7 @@ void ui_block_flush_back(uiBlock *block) /* exception, when we cannot use backbuffer for draw... */ if(block->flag & UI_BLOCK_FRONTBUFFER) { - glFlush(); + bglFlush(); glDrawBuffer(GL_BACK); block->needflush= 0; return; @@ -423,7 +407,7 @@ void ui_block_flush_back(uiBlock *block) myglCopyPixels(minx, miny, sizex, sizey, GL_COLOR); #endif glEnable(GL_DITHER); - glFlush(); + bglFlush(); glDrawBuffer(GL_BACK); mywinset(block->win); @@ -4051,7 +4035,7 @@ static void ui_do_active_linklines(uiBlock *block, short *mval) } but= but->next; } - glFlush(); + bglFlush(); glDrawBuffer(GL_BACK); } } diff --git a/source/blender/src/previewrender.c b/source/blender/src/previewrender.c index 5bf0a295403..a6e0d2ef27e 100644 --- a/source/blender/src/previewrender.c +++ b/source/blender/src/previewrender.c @@ -382,7 +382,7 @@ static void previewrender_progress(RenderResult *rr, volatile rcti *renrect) glDrawBuffer(GL_FRONT); glaDrawPixelsSafe_to32(ofsx, ofsy, rr->rectx, rr->recty, rr->rectx, rl->rectf); - glFlush(); + bglFlush(); glDrawBuffer(GL_BACK); } @@ -626,7 +626,7 @@ static void view3d_previewrender_progress(RenderResult *rr, volatile rcti *renre glDrawBuffer(GL_FRONT); glaDefine2DArea(&curarea->winrct); glaDrawPixelsSafe_to32(ofsx, ofsy, rr->rectx, rr->recty, rr->rectx, rl->rectf); - glFlush(); + bglFlush(); glDrawBuffer(GL_BACK); } diff --git a/source/blender/src/space.c b/source/blender/src/space.c index aa3536ec2ba..91d67ceb5d0 100644 --- a/source/blender/src/space.c +++ b/source/blender/src/space.c @@ -2421,7 +2421,7 @@ static void info_user_themebuts(uiBlock *block, short y1, short y2, short y3) } else { uiBlockBeginAlign(block); - if ELEM7(th_curcol, TH_PANEL, TH_LAMP, TH_FACE, TH_FACE_SELECT, TH_MENU_BACK, TH_MENU_HILITE, TH_MENU_ITEM) { + if ELEM8(th_curcol, TH_PANEL, TH_LAMP, TH_FACE, TH_FACE_SELECT, TH_MENU_BACK, TH_MENU_HILITE, TH_MENU_ITEM, TH_NODE) { uiDefButC(block, NUMSLI, B_UPDATE_THEME,"A ", 465,y3+25,200,20, col+3, 0.0, 255.0, B_THEMECOL, 0, ""); } uiDefButC(block, NUMSLI, B_UPDATE_THEME,"R ", 465,y3,200,20, col, 0.0, 255.0, B_THEMECOL, 0, ""); diff --git a/source/blender/src/transform.c b/source/blender/src/transform.c index f450628b640..76e6c7eaf51 100755 --- a/source/blender/src/transform.c +++ b/source/blender/src/transform.c @@ -64,6 +64,7 @@ #include "BIF_editview.h" /* arrows_move_cursor */ #include "BIF_gl.h" +#include "BIF_glutil.h" #include "BIF_mywindow.h" #include "BIF_resources.h" #include "BIF_screen.h" @@ -135,7 +136,7 @@ static void helpline(TransInfo *t, float *vec) setlinestyle(0); persp(PERSP_VIEW); - glFlush(); // flush display for frontbuffer + bglFlush(); // flush display for frontbuffer glDrawBuffer(GL_BACK); } } |