Commit: 7fefdaadc88c02d0639befccb410a19592c81c1d
Author: Dalai Felinto
Date:   Tue Nov 25 13:35:58 2014 -0200
Branches: multiview
https://developer.blender.org/rB7fefdaadc88c02d0639befccb410a19592c81c1d

Merge remote-tracking branch 'origin/master' into multiview

Conflicts:
        source/blender/editors/space_view3d/view3d_draw.c
        source/blender/makesdna/DNA_view3d_types.h
        source/blender/makesdna/DNA_space_types.h

===================================================================



===================================================================

diff --cc source/blender/editors/space_view3d/view3d_draw.c
index 8e0e1ac,d4a0c01..d7fa680
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@@ -2871,15 -3016,13 +3041,15 @@@ void ED_view3d_draw_offscreen(Scene *sc
        }
        else {
                glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
+               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);             
        }
  
-       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  
        /* setup view matrices */
 -      view3d_main_area_setup_view(scene, v3d, ar, viewmat, winmat);
 -
 +      if ((viewname != NULL) && (viewmat == NULL))
 +              view3d_stereo3d_setup_offscreen(scene, v3d, ar, winmat, 
viewname);
 +      else
 +              view3d_main_area_setup_view(scene, v3d, ar, viewmat, winmat);
  
        /* main drawing call */
        view3d_draw_objects(NULL, scene, v3d, ar, NULL, do_bgpic, true);
@@@ -3236,275 -3374,6 +3406,104 @@@ static void view3d_main_area_draw_engin
        ED_region_info_draw(ar, rv3d->render_engine->text, 1, fill_color);
  }
  
- /*
-  * Function to clear the view
-  */
- static void view3d_main_area_clear(Scene *scene, View3D *v3d, ARegion *ar)
- {
-       /* clear background */
-       if (scene->world && (v3d->flag2 & V3D_RENDER_OVERRIDE)) {  /* clear 
with solid color */
-               if (scene->world->skytype & WO_SKYBLEND) {  /* blend sky */
-                       int x, y;
-                       float col_hor[3];
-                       float col_zen[3];
- 
- #define VIEWGRAD_RES_X 16
- #define VIEWGRAD_RES_Y 16
- 
-                       GLubyte grid_col[VIEWGRAD_RES_X][VIEWGRAD_RES_Y][4];
-                       static float   
grid_pos[VIEWGRAD_RES_X][VIEWGRAD_RES_Y][3];
-                       static GLushort indices[VIEWGRAD_RES_X - 
1][VIEWGRAD_RES_X - 1][4];
-                       static bool buf_calculated = false;
- 
-                       IMB_colormanagement_pixel_to_display_space_v3(col_hor, 
&scene->world->horr, &scene->view_settings,
-                                                                     
&scene->display_settings);
-                       IMB_colormanagement_pixel_to_display_space_v3(col_zen, 
&scene->world->zenr, &scene->view_settings,
-                                                                     
&scene->display_settings);
- 
-                       glMatrixMode(GL_PROJECTION);
-                       glPushMatrix();
-                       glLoadIdentity();
-                       glMatrixMode(GL_MODELVIEW);
-                       glPushMatrix();
-                       glLoadIdentity();
- 
-                       glShadeModel(GL_SMOOTH);
- 
-                       /* calculate buffers the first time only */
-                       if (!buf_calculated) {
-                               for (x = 0; x < VIEWGRAD_RES_X; x++) {
-                                       for (y = 0; y < VIEWGRAD_RES_Y; y++) {
-                                               const float xf = (float)x / 
(float)(VIEWGRAD_RES_X - 1);
-                                               const float yf = (float)y / 
(float)(VIEWGRAD_RES_Y - 1);
- 
-                                               /* -1..1 range */
-                                               grid_pos[x][y][0] = (xf - 0.5f) 
* 2.0f;
-                                               grid_pos[x][y][1] = (yf - 0.5f) 
* 2.0f;
-                                               grid_pos[x][y][2] = 1.0;
-                                       }
-                               }
- 
-                               for (x = 0; x < VIEWGRAD_RES_X - 1; x++) {
-                                       for (y = 0; y < VIEWGRAD_RES_Y - 1; 
y++) {
-                                               indices[x][y][0] = x * 
VIEWGRAD_RES_X + y;
-                                               indices[x][y][1] = x * 
VIEWGRAD_RES_X + y + 1;
-                                               indices[x][y][2] = (x + 1) * 
VIEWGRAD_RES_X + y + 1;
-                                               indices[x][y][3] = (x + 1) * 
VIEWGRAD_RES_X + y;
-                                       }
-                               }
- 
-                               buf_calculated = true;
-                       }
- 
-                       for (x = 0; x < VIEWGRAD_RES_X; x++) {
-                               for (y = 0; y < VIEWGRAD_RES_Y; y++) {
-                                       const float xf = (float)x / 
(float)(VIEWGRAD_RES_X - 1);
-                                       const float yf = (float)y / 
(float)(VIEWGRAD_RES_Y - 1);
-                                       const float mval[2] = {xf * 
(float)ar->winx, yf * ar->winy};
-                                       const float z_up[3] = {0.0f, 0.0f, 
1.0f};
-                                       float out[3];
-                                       GLubyte *col_ub = grid_col[x][y];
- 
-                                       float col_fac;
-                                       float col_fl[3];
- 
-                                       ED_view3d_win_to_vector(ar, mval, out);
- 
-                                       if (scene->world->skytype & 
WO_SKYPAPER) {
-                                               if (scene->world->skytype & 
WO_SKYREAL) {
-                                                       col_fac = 
fabsf(((float)y / (float)VIEWGRAD_RES_Y) - 0.5f) * 2.0f;
-                                               }
-                                               else {
-                                                       col_fac = (float)y / 
(float)VIEWGRAD_RES_Y;
-                                               }
-                                       }
-                                       else {
-                                               if (scene->world->skytype & 
WO_SKYREAL) {
-                                                       col_fac = 
fabsf((angle_normalized_v3v3(z_up, out) / (float)M_PI) - 0.5f) * 2.0f;
-                                               }
-                                               else {
-                                                       col_fac = 1.0f - 
(angle_normalized_v3v3(z_up, out) / (float)M_PI);
-                                               }
-                                       }
- 
-                                       interp_v3_v3v3(col_fl, col_hor, 
col_zen, col_fac);
- 
-                                       rgb_float_to_uchar(col_ub, col_fl);
-                                       col_ub[3] = 0;
-                               }
-                       }
- 
-                       glEnable(GL_DEPTH_TEST);
-                       glDepthFunc(GL_ALWAYS);
- 
-                       glEnableClientState(GL_VERTEX_ARRAY);
-                       glEnableClientState(GL_COLOR_ARRAY);
-                       glVertexPointer(3, GL_FLOAT, 0, grid_pos);
-                       glColorPointer(4, GL_UNSIGNED_BYTE, 0, grid_col);
- 
-                       glDrawElements(GL_QUADS, (VIEWGRAD_RES_X - 1) * 
(VIEWGRAD_RES_Y - 1) * 4, GL_UNSIGNED_SHORT, indices);
- 
-                       glDisableClientState(GL_VERTEX_ARRAY);
-                       glDisableClientState(GL_COLOR_ARRAY);
- 
-                       glDepthFunc(GL_LEQUAL);
-                       glDisable(GL_DEPTH_TEST);
- 
-                       glMatrixMode(GL_PROJECTION);
-                       glPopMatrix();
-                       glMatrixMode(GL_MODELVIEW);
-                       glPopMatrix();
- 
-                       glShadeModel(GL_FLAT);
- 
- #undef VIEWGRAD_RES_X
- #undef VIEWGRAD_RES_Y
-               }
-               else {  /* solid sky */
-                       float col_hor[3];
-                       IMB_colormanagement_pixel_to_display_space_v3(col_hor, 
&scene->world->horr, &scene->view_settings,
-                                                                     
&scene->display_settings);
- 
-                       glClearColor(col_hor[0], col_hor[1], col_hor[2], 0.0f);
-                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-               }
-       }
-       else {
-               if (UI_GetThemeValue(TH_SHOW_BACK_GRAD)) {
-                       glMatrixMode(GL_PROJECTION);
-                       glPushMatrix();
-                       glLoadIdentity();
-                       glMatrixMode(GL_MODELVIEW);
-                       glPushMatrix();
-                       glLoadIdentity();
- 
-                       glEnable(GL_DEPTH_TEST);
-                       glDepthFunc(GL_ALWAYS);
-                       glShadeModel(GL_SMOOTH);
-                       glBegin(GL_QUADS);
-                       UI_ThemeColor(TH_LOW_GRAD);
-                       glVertex3f(-1.0, -1.0, 1.0);
-                       glVertex3f(1.0, -1.0, 1.0);
-                       UI_ThemeColor(TH_HIGH_GRAD);
-                       glVertex3f(1.0, 1.0, 1.0);
-                       glVertex3f(-1.0, 1.0, 1.0);
-                       glEnd();
-                       glShadeModel(GL_FLAT);
- 
-                       glDepthFunc(GL_LEQUAL);
-                       glDisable(GL_DEPTH_TEST);
- 
-                       glMatrixMode(GL_PROJECTION);
-                       glPopMatrix();
- 
-                       glMatrixMode(GL_MODELVIEW);
-                       glPopMatrix();
-               }
-               else {
-                       UI_ThemeClearColor(TH_HIGH_GRAD);
-                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-               }
-       }
- }
- 
 +static bool view3d_stereo3d_active(const bContext *C, Scene *scene, View3D 
*v3d, RegionView3D *rv3d)
 +{
 +      wmWindow *win = CTX_wm_window(C);
 +
 +      if ((scene->r.scemode & R_MULTIVIEW) == 0)
 +              return false;
 +
 +      if (WM_stereo_enabled(C, win, true) == false)
 +              return false;
 +      
 +      if ((v3d->camera == NULL) || rv3d->persp != RV3D_CAMOB)
 +              return false;
 +
 +      if (scene->r.views_setup & SCE_VIEWS_SETUP_MULTIVIEW) {
 +              if (v3d->stereo3d_camera == STEREO_MONO_ID)
 +                      return false;
 +
 +              return BKE_scene_is_stereo3d(&scene->r);
 +      }
 +
 +      return true;
 +}
 +
 +/* setup the view and win matrices for the multiview cameras
 + *
 + * unlike view3d_stereo3d_setup_offscreen, when view3d_stereo3d_setup is 
called
 + * we have no winmatrix (i.e., projection matrix) defined at that time.
 + * Since the camera and the camera shift are needed for the winmat calculation
 + * we do a small hack to replace it temporarily so we don't need to change the
 + * view3d)main_area_setup_view() code to account for that.
 + */
 +static void view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar)
 +{
 +      bool is_left;
 +      const char *names[2] = {STEREO_LEFT_NAME, STEREO_RIGHT_NAME};
 +      const char *viewname;
 +
 +      /* show only left or right camera */
 +      if (v3d->stereo3d_camera != STEREO_3D_ID)
 +              v3d->eye = v3d->stereo3d_camera;
 +
 +      is_left = v3d->eye == STEREO_LEFT_ID;
 +      viewname = names[is_left ? STEREO_LEFT_ID : STEREO_RIGHT_ID];
 +
 +      /* update the viewport matrices with the new camera */
 +      if (scene->r.views_setup == SCE_VIEWS_SETUP_STEREO_3D) {
 +              Camera *data;
 +              float viewmat[4][4];
 +              float shiftx;
 +
 +              data = (Camera *)v3d->camera->data;
 +              shiftx = data->shiftx;
 +
 +              BLI_lock_thread(LOCK_VIEW3D);
 +              data->shiftx = BKE_camera_shift_x(&scene->r, v3d->camera, 
viewname);
 +
 +              BKE_camera_view_matrix(&scene->r, v3d->camera, is_left, 
viewmat);
 +              view3d_main_area_setup_view(scene, v3d, ar, viewmat, NULL);
 +
 +              data->shiftx = shiftx;
 +              BLI_unlock_thread(LOCK_VIEW3D);
 +      }
 +      else { /* SCE_VIEWS_SETUP_MULTIVIEW */
 +              float viewmat[4][4];
 +              Object *view_ob = v3d->camera;
 +              Object *camera = BKE_camera_render(scene, v3d->camera, 
viewname);
 +
 +              BLI_lock_thread(LOCK_VIEW3D);
 +              v3d->camera = camera;
 +
 +              BKE_camera_view_matrix(&scene->r, camera, false, viewmat);
 +              view3d_main_area_setup_view(scene, v3d, ar, viewmat, NULL);
 +
 +              v3d->camera = view_ob;
 +              BLI_unlock_thread(LOCK_VIEW3D);
 +      }
 +}
 +
 +static void view3d_stereo3d_setup_offscreen(Scene *scene, View3D *v3d, 
ARegion *ar,
 +                                            float winmat[4][4], const char 
*viewname)
 +{
 +      /* update the viewport matrices with the new camera */
 +      if (scene->r.views_setup == SCE_VIEWS_SETUP_STEREO_3D) {
 +              float viewmat[4][4];
 +              const bool is_left = STREQ(viewname, STEREO_LEFT_NAME);
 +
 +              BKE_camera_view_matrix(&scene->r, v3d->camera, is_left, 
viewmat);
 +              view3d_main_area_setup_view(scene, v3d, ar, viewmat, winmat);
 +      }
 +      else { /* SCE_VIEWS_SETUP_MULTIVIEW */
 +              float viewmat[4][4];
 +              Object *camera = BKE_camera_render(scene, v3d->camera, 
viewname);
 +
 +              BKE_camera_view_matrix(&scene->r, camera, false, viewmat);
 +              view3d_main_area_setup_view(scene, v3d, ar, viewmat, winmat);
 +      }
 +}
 +
  #ifdef WITH_GAMEENGINE
  static void update_lods(Scene *scene, float camera_pos[3])
  {
diff --cc source/blender/makesdna/DNA_space_types.h
index 3a5ccc0,dd661d0..cea37a1
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@@ -501,9 -503,6 +503,9 @@@ typedef struct SpaceSeq 
        struct bGPdata *gpd;        /* grease-pencil data */
  
        struct SequencerScopes scopes;  /* different scoped displayed in space 
*/
 +
 +      char eye;                               /* multiview current eye - for 
internal use */
-       char pad[7];
++      char pad2[7];
  } SpaceSeq;

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to