diff --git a/source/blender/src/drawview.c b/source/blender/src/drawview.c index 96a01497c4f..e93e854e766 100644 --- a/source/blender/src/drawview.c +++ b/source/blender/src/drawview.c @@ -227,6 +227,7 @@ void default_gl_light(void) glDisable(GL_COLOR_MATERIAL); } +/* also called when render 'ogl' */ void init_gl_stuff(void) { float mat_specular[] = { 0.5, 0.5, 0.5, 1.0 }; @@ -1930,24 +1931,21 @@ void drawview3dspace(ScrArea *sa, void *spacedata) */ void drawview3d_render(struct View3D *v3d) { - extern void mywindow_build_and_set_renderwin(void); extern short v3d_windowmode; Base *base; Object *ob; free_all_realtime_images(); - mywindow_build_and_set_renderwin(); - + v3d_windowmode= 1; setwinmatrixview3d(0); v3d_windowmode= 0; glMatrixMode(GL_PROJECTION); - glLoadMatrixf(R.winmat); + myloadmatrix(R.winmat); glMatrixMode(GL_MODELVIEW); setviewmatrixview3d(); - glLoadMatrixf(v3d->viewmat); - + myloadmatrix(v3d->viewmat); Mat4MulMat4(v3d->persmat, v3d->viewmat, R.winmat); Mat4Invert(v3d->persinv, v3d->persmat); Mat4Invert(v3d->viewinv, v3d->viewmat); @@ -1964,11 +1962,10 @@ void drawview3d_render(struct View3D *v3d) BIF_GetThemeColor3fv(TH_BACK, col); glClearColor(col[0], col[1], col[2], 0.0); } - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); - glLoadMatrixf(v3d->viewmat); + myloadmatrix(v3d->viewmat); /* abuse! to make sure it doesnt draw the helpstuff */ G.f |= G_SIMULATION; @@ -2083,7 +2080,7 @@ void drawview3d_render(struct View3D *v3d) } if(G.scene->radio) RAD_drawall(G.vd->drawtype>=OB_SOLID); - + if(G.zbuf) { G.zbuf= FALSE; glDisable(GL_DEPTH_TEST); diff --git a/source/blender/src/edit.c b/source/blender/src/edit.c index ccb5f988da3..e4b4ec469d6 100644 --- a/source/blender/src/edit.c +++ b/source/blender/src/edit.c @@ -71,21 +71,22 @@ #include "BKE_lattice.h" #include "BKE_mesh.h" -#include "BIF_gl.h" -#include "BIF_mywindow.h" -#include "BIF_screen.h" -#include "BIF_interface.h" -#include "BIF_space.h" -#include "BIF_editview.h" -#include "BIF_glutil.h" -#include "BIF_toolbox.h" #include "BIF_editmesh.h" +#include "BIF_editview.h" +#include "BIF_gl.h" +#include "BIF_glutil.h" +#include "BIF_interface.h" +#include "BIF_mywindow.h" +#include "BIF_resources.h" +#include "BIF_space.h" +#include "BIF_screen.h" +#include "BIF_toolbox.h" -#include "BSE_view.h" #include "BSE_edit.h" -#include "BSE_trans_types.h" #include "BSE_drawipo.h" #include "BSE_drawview.h" +#include "BSE_trans_types.h" +#include "BSE_view.h" #include "BDR_editobject.h" #include "BDR_editmball.h" @@ -214,15 +215,18 @@ int get_border(rcti *rect, short col) /* draw size information in corner */ if(curarea->spacetype==SPACE_VIEW3D) { - glColor3f(0.4375, 0.4375, 0.4375); - glRecti(0, 10, 250, 20); - glColor3f(0.0, 0.0, 0.0); + BIF_ThemeColor(TH_BACK); + glRecti(10, 25, 250, 40); if(G.vd->persp==0) { window_to_3d(dvec, mvalo[0]-x1, mvalo[1]-y1); - glRasterPos2i(10, 10); sprintf(str, "X %.4f Y %.4f Z %.4f Dia %.4f", dvec[0], dvec[1], dvec[2], sqrt(dvec[0]*dvec[0]+dvec[1]*dvec[1]+dvec[2]*dvec[2])); + glColor3f(0.0, 0.0, 0.0); + glRasterPos2i(15, 27); + BMF_DrawString(G.fonts, str); + glColor3f(0.7, 0.7, 0.7); + glRasterPos2i(16, 28); BMF_DrawString(G.fonts, str); } else if(G.vd->persp==2) { @@ -236,25 +240,32 @@ int get_border(rcti *rect, short col) fac2= (mvalo[1]-y1)/( (float) (vb.ymax-vb.ymin) ); fac2*= 0.01*G.scene->r.size*G.scene->r.ysch; - glRasterPos2i(10, 10); sprintf(str, "X %.1f Y %.1f Dia %.1f", fabs(fac1), fabs(fac2), sqrt(fac1*fac1 + fac2*fac2) ); + glColor3f(0.0, 0.0, 0.0); + glRasterPos2i(15, 27); + BMF_DrawString(G.fonts, str); + glColor3f(0.7, 0.7, 0.7); + glRasterPos2i(16, 28); BMF_DrawString(G.fonts, str); } } else if(curarea->spacetype==SPACE_IPO) { SpaceIpo *sipo= curarea->spacedata.first; - glColor3f(.40625, .40625, .40625); + BIF_ThemeColor(TH_BACK); glRecti(20, 30, 170, 40); - glColor3f(0.0, 0.0, 0.0); mvalo[2]= x1; mvalo[3]= y1; areamouseco_to_ipoco(&sipo->v2d, mval, dvec, dvec+1); areamouseco_to_ipoco(&sipo->v2d, mvalo+2, dvec+2, dvec+3); - - glRasterPos2i(30, 30); + sprintf(str, "Time: %.4f Y %.4f", dvec[0]-dvec[2], dvec[1]-dvec[3]); + glRasterPos2i(30, 30); + glColor3f(0.0, 0.0, 0.0); + BMF_DrawString(G.fonts, str); + glRasterPos2i(31, 31); + glColor3f(0.9, 0.9, 0.9); BMF_DrawString(G.fonts, str); } diff --git a/source/blender/src/mywindow.c b/source/blender/src/mywindow.c index 9071d5e919d..d92e8c16409 100644 --- a/source/blender/src/mywindow.c +++ b/source/blender/src/mywindow.c @@ -114,16 +114,27 @@ void mywindow_init_mainwin(Window *win, int orx, int ory, int sizex, int sizey) } } -/* XXXXXXXXXXXXXXXX very hacky, not allowed to release again after 2.24 - * again after 2.24 +/* XXXXXXXXXXXXXXXX very hacky, because of blenderwindows vs ghostwindows vs renderwindow + this routine sets up a blenderwin (a mywin) */ -void mywindow_build_and_set_renderwin(void) +void mywindow_build_and_set_renderwin( int orx, int ory, int sizex, int sizey) { + + swinarray[2]= &renderwindow; + + renderwindow.xmin= orx; + renderwindow.ymin= ory; + renderwindow.xmax= orx+sizex-1; + renderwindow.ymax= ory+sizey-1; + renderwindow.qevents= NULL; + + myortho2(-0.5, (float)sizex-0.5, -0.5, (float)sizey-0.5); + glLoadIdentity(); + glGetFloatv(GL_PROJECTION_MATRIX, (float *)renderwindow.winmat); glGetFloatv(GL_MODELVIEW_MATRIX, (float *)renderwindow.viewmat); - swinarray[2]= &renderwindow; - renderwindow.qevents= NULL; + mywinset(2); curswin= 2; } @@ -318,8 +329,7 @@ void mywinset(int wid) printf("mywinset %d: doesn't exist\n", wid); return; } - - if (wid == 1) { /* main window */ + if (wid == 1 || wid == 2) { /* main window or renderwindow*/ glViewport(0, 0, ( win->xmax-win->xmin)+1, ( win->ymax-win->ymin)+1); glScissor(0, 0, ( win->xmax-win->xmin)+1, ( win->ymax-win->ymin)+1); } diff --git a/source/blender/src/renderwin.c b/source/blender/src/renderwin.c index 500dcedb8b9..0a6b6d6e91a 100644 --- a/source/blender/src/renderwin.c +++ b/source/blender/src/renderwin.c @@ -467,6 +467,7 @@ static char *renderwin_get_title(int doswap) /* opens window and allocs struct */ static void open_renderwin(int winpos[2], int winsize[2]) { + extern void mywindow_build_and_set_renderwin( int orx, int ory, int sizex, int sizey); // mywindow.c Window *win; char *title; @@ -481,7 +482,12 @@ static void open_renderwin(int winpos[2], int winsize[2]) winlay_process_events(0); window_make_active(render_win->win); winlay_process_events(0); - + + /* mywindow has to know about it too */ + mywindow_build_and_set_renderwin(winpos[0], winpos[1], winsize[0], winsize[1]); + /* and we should be able to draw 3d in it */ + init_gl_stuff(); + renderwin_draw(render_win, 1); renderwin_draw(render_win, 1); } @@ -565,6 +571,7 @@ static void renderwin_init_display_cb(void) else { window_raise(render_win->win); window_make_active(render_win->win); + mywinset(2); // to assign scissor/viewport again in mywindow.c. is hackish yes } renderwin_reset_view(render_win); @@ -849,7 +856,7 @@ static void do_render(View3D *ogl_render_view3d, int anim, int force_dispwin) window_set_cursor(render_win->win, CURSOR_WAIT); // when opening new window... not cross platform identical behaviour, so // for now call it each time - if(ogl_render_view3d) init_gl_stuff(); + // if(ogl_render_view3d) init_gl_stuff(); } waitcursor(1); @@ -924,6 +931,14 @@ static void scalefastrect(unsigned int *recto, unsigned int *rectn, int oldx, in /* -------------- API: externally called --------------- */ +void BIF_renderwin_make_active(void) +{ + if(render_win) { + window_make_active(render_win->win); + mywinset(2); + } +} + /* set up display, render an image or scene */ void BIF_do_render(int anim) { diff --git a/source/blender/src/view.c b/source/blender/src/view.c index 9f8e65da670..1327e60dc99 100644 --- a/source/blender/src/view.c +++ b/source/blender/src/view.c @@ -586,6 +586,7 @@ void viewmove(int mode) short v3d_windowmode=0; +/* important to not set windows active in here, can be renderwin for example */ void setwinmatrixview3d(rctf *rect) /* rect: for picking */ { Camera *cam=0; @@ -629,7 +630,7 @@ void setwinmatrixview3d(rctf *rect) /* rect: for picking */ } } - if(v3d_windowmode) { + if(v3d_windowmode) { // hackish winx= R.rectx; winy= R.recty; } @@ -723,7 +724,7 @@ void obmat_to_viewmat(Object *ob) Mat3ToQuat(tmat, G.vd->viewquat); } - +/* dont set windows active in in here, is used by renderwin too */ void setviewmatrixview3d() { Camera *cam;