svn merge ^/trunk/blender -r42426:42439
authorCampbell Barton <ideasman42@gmail.com>
Mon, 5 Dec 2011 17:54:33 +0000 (17:54 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 5 Dec 2011 17:54:33 +0000 (17:54 +0000)
13 files changed:
extern/libmv/libmv-capi.cpp
extern/libmv/libmv/numeric/numeric.h
extern/libmv/libmv/tracking/brute_region_tracker.cc
extern/libmv/third_party/glog/src/config.h
extern/libmv/third_party/glog/src/config_freebsd.h [new file with mode: 0644]
source/blender/blenkernel/BKE_blender.h
source/blender/blenkernel/intern/dynamicpaint.c
source/blender/blenkernel/intern/tracking.c
source/blender/blenloader/intern/readfile.c
source/blender/editors/screen/screendump.c
source/blender/makesrna/intern/rna_object_api.c
source/blender/windowmanager/WM_api.h
source/blender/windowmanager/intern/wm_draw.c

index ed89f8cbfb3e089fbaad6d9a5581ea8b0db6a0eb..dd98d0828dcc2dcd1e66937830e1afe4c665a9e2 100644 (file)
@@ -132,7 +132,7 @@ libmv_RegionTracker *libmv_hybridRegionTrackerNew(int max_iterations, int half_w
        esm_region_tracker->min_determinant = 1e-4;
 
        libmv::BruteRegionTracker *brute_region_tracker = new libmv::BruteRegionTracker;
-  brute_region_tracker->half_window_size = half_window_size;
+       brute_region_tracker->half_window_size = half_window_size;
 
        libmv::HybridRegionTracker *hybrid_region_tracker =
                new libmv::HybridRegionTracker(brute_region_tracker, esm_region_tracker);
@@ -494,7 +494,7 @@ double libmv_reporojectionErrorForTrack(libmv_Reconstruction *libmv_reconstructi
 {
        libmv::EuclideanReconstruction *reconstruction = &libmv_reconstruction->reconstruction;
        libmv::CameraIntrinsics *intrinsics = &libmv_reconstruction->intrinsics;
-       libmv::vector<libmv::Marker> markers =  libmv_reconstruction->tracks.MarkersForTrack(track);
+       libmv::vector<libmv::Marker> markers = libmv_reconstruction->tracks.MarkersForTrack(track);
 
        int num_reprojected = 0;
        double total_error = 0.0;
@@ -678,7 +678,7 @@ void libmv_destroyFeatures(struct libmv_Features *libmv_features)
 /* ************ camera intrinsics ************ */
 
 struct libmv_CameraIntrinsics *libmv_ReconstructionExtractIntrinsics(struct libmv_Reconstruction *libmv_Reconstruction) {
-  return (struct libmv_CameraIntrinsics *)&libmv_Reconstruction->intrinsics;
+       return (struct libmv_CameraIntrinsics *)&libmv_Reconstruction->intrinsics;
 }
 
 struct libmv_CameraIntrinsics *libmv_CameraIntrinsicsNew(double focal_length, double principal_x, double principal_y,
index 21e0f067446a2ff7b454a0f0a19a156a3bc9b280..bb7f9b364effaef39643321772de34098d392bb9 100644 (file)
@@ -33,7 +33,7 @@
 #include <Eigen/QR>
 #include <Eigen/SVD>
 
-#if _WIN32 || __APPLE__
+#if _WIN32 || __APPLE__ || __FreeBSD__
   void static sincos (double x, double *sinx, double *cosx) {
     *sinx = sin(x);
     *cosx = cos(x);
index c33432b7fd7492b7df90dad18b8ec8258ec715ad..a416710ad2bae9cccd0bdbfe92323768dfb17fb4 100644 (file)
@@ -24,7 +24,7 @@
 #include <emmintrin.h>
 #endif
 
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(__FreeBSD__)
 // Needed for memalign on Linux and _aligned_alloc on Windows.
 #ifdef FREE_WINDOWS
 /* make sure _aligned_malloc is included */
@@ -59,6 +59,15 @@ void *aligned_malloc(int size, int alignment) {
   // they work natively with SSE types with no further work.
   CHECK_EQ(alignment, 16);
   return malloc(size);
+#elif __FreeBSD__
+  void *result;
+
+  if(posix_memalign(&result, alignment, size)) {
+    // non-zero means allocation error
+    // either no allocation or bad alignment value
+    return NULL;
+  }
+  return result;
 #else // This is for Linux.
   return memalign(alignment, size);
 #endif
index 06ed686f87c8bec3475ec8472caf38b7fe703066..49c0d8905b0cc6ea37102211019f376e7a98fd5b 100644 (file)
@@ -4,6 +4,8 @@
 /* Namespace for Google classes */
 #ifdef __APPLE__
  #include "config_mac.h"
+#elif __FreeBSD__
+ #include "config_freebsd.h"
 #elif __MINGW32__
  #include "windows/config.h"
 #elif __GNUC__
diff --git a/extern/libmv/third_party/glog/src/config_freebsd.h b/extern/libmv/third_party/glog/src/config_freebsd.h
new file mode 100644 (file)
index 0000000..caaef9d
--- /dev/null
@@ -0,0 +1,161 @@
+/* src/config.h.  Generated from config.h.in by configure.  */
+/* src/config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Namespace for Google classes */
+#define GOOGLE_NAMESPACE google
+
+/* Define if you have the `dladdr' function */
+/* #undef HAVE_DLADDR */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
+/* Define to 1 if you have the <execinfo.h> header file. */
+#define HAVE_EXECINFO_H 1
+
+/* Define if you have the `fcntl' function */
+#define HAVE_FCNTL 1
+
+/* Define to 1 if you have the <glob.h> header file. */
+#define HAVE_GLOB_H 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `pthread' library (-lpthread). */
+#define HAVE_LIBPTHREAD 1
+
+/* Define to 1 if you have the <libunwind.h> header file. */
+/* #undef HAVE_LIBUNWIND_H */
+
+/* define if you have google gflags library */
+#define HAVE_LIB_GFLAGS 1
+
+/* define if you have google gmock library */
+/* #undef HAVE_LIB_GMOCK */
+
+/* define if you have google gtest library */
+/* #undef HAVE_LIB_GTEST */
+
+/* define if you have libunwind */
+/* #undef HAVE_LIB_UNWIND */
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* define if the compiler implements namespaces */
+#define HAVE_NAMESPACES 1
+
+/* Define if you have POSIX threads libraries and header files. */
+#define HAVE_PTHREAD 1
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#define HAVE_PWD_H 1
+
+/* define if the compiler implements pthread_rwlock_* */
+#define HAVE_RWLOCK 1
+
+/* Define if you have the `sigaltstack' function */
+#define HAVE_SIGALTSTACK 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the <syscall.h> header file. */
+/* #undef HAVE_SYSCALL_H */
+
+/* Define to 1 if you have the <syslog.h> header file. */
+#define HAVE_SYSLOG_H 1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/syscall.h> header file. */
+#define HAVE_SYS_SYSCALL_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have the <sys/ucontext.h> header file. */
+#define HAVE_SYS_UCONTEXT_H 1
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+#define HAVE_SYS_UTSNAME_H 1
+
+/* Define to 1 if you have the <ucontext.h> header file. */
+#define HAVE_UCONTEXT_H 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* define if the compiler supports using expression for operator */
+#define HAVE_USING_OPERATOR 1
+
+/* define if your compiler has __attribute__ */
+#define HAVE___ATTRIBUTE__ 1
+
+/* define if your compiler has __builtin_expect */
+#define HAVE___BUILTIN_EXPECT 1
+
+/* define if your compiler has __sync_val_compare_and_swap */
+/* #undef HAVE___SYNC_VAL_COMPARE_AND_SWAP */
+
+/* Name of package */
+#define PACKAGE "glog"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "opensource@google.com"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "glog"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "glog 0.3.1"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "glog"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "0.3.1"
+
+/* How to access the PC from a struct ucontext */
+/* #define PC_FROM_UCONTEXT uc_mcontext.gregs[REG_RIP] */
+
+/* Define to necessary symbol if this constant uses a non-standard name on
+   your system. */
+/* #undef PTHREAD_CREATE_JOINABLE */
+
+/* The size of `void *', as computed by sizeof. */
+#define SIZEOF_VOID_P 8
+
+/* Define to 1 if you have the ANSI C header files. */
+/* #undef STDC_HEADERS */
+
+#define STDC_HEADERS 1
+/* the namespace where STL code like vector<> is defined */
+#define STL_NAMESPACE std
+
+/* location of source code */
+#define TEST_SRC_DIR "."
+
+/* Version number of package */
+#define VERSION "0.3.1"
+
+/* Stops putting the code inside the Google namespace */
+#define _END_GOOGLE_NAMESPACE_ }
+
+/* Puts following code inside the Google namespace */
+#define _START_GOOGLE_NAMESPACE_ namespace google {
+
index 50a1331d7ab1dc22f063e1587e6e103982c3383a..a8819b1cda6853246b4938e1d271264d22b6457a 100644 (file)
@@ -42,7 +42,7 @@ extern "C" {
  * and keep comment above the defines.
  * Use STRINGIFY() rather than defining with quotes */
 #define BLENDER_VERSION                        260
-#define BLENDER_SUBVERSION             6
+#define BLENDER_SUBVERSION             7
 
 #define BLENDER_MINVERSION             250
 #define BLENDER_MINSUBVERSION  0
@@ -51,7 +51,7 @@ extern "C" {
                /* can be left blank, otherwise a,b,c... etc with no quotes */
 #define BLENDER_VERSION_CHAR   a
                /* alpha/beta/rc/release, docs use this */
-#define BLENDER_VERSION_CYCLE  beta
+#define BLENDER_VERSION_CYCLE  rc
 
 extern char versionstr[]; /* from blender.c */
 
index 229f21253648a210fe7e49dd610611a2fe9aa12f..9c2ea70c0c85c0933bec5056c1b8e7854f306292 100644 (file)
@@ -24,6 +24,7 @@
 #include "BLI_utildefines.h"
 
 #include "DNA_anim_types.h"
+#include "DNA_constraint_types.h"
 #include "DNA_dynamicpaint_types.h"
 #include "DNA_group_types.h" /*GroupObject*/
 #include "DNA_material_types.h"
@@ -39,6 +40,7 @@
 #include "BKE_bvhutils.h"      /* bvh tree     */
 #include "BKE_blender.h"
 #include "BKE_cdderivedmesh.h"
+#include "BKE_constraint.h"
 #include "BKE_context.h"
 #include "BKE_customdata.h"
 #include "BKE_colortools.h"
@@ -453,15 +455,35 @@ static void object_cacheIgnoreClear(Object *ob, int state)
 static void subframe_updateObject(Scene *scene, Object *ob, int flags, float frame)
 {
        DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)modifiers_findByType(ob, eModifierType_DynamicPaint);
+       bConstraint *con;
 
        /* if other is dynamic paint canvas, dont update */
        if (pmd && pmd->canvas)
                return;
 
-       /* if object has parent, update it too */
-       if ((flags & UPDATE_PARENTS) && ob->parent) subframe_updateObject(scene, ob->parent, 0, frame);
-       if ((flags & UPDATE_PARENTS) && ob->track) subframe_updateObject(scene, ob->track, 0, frame);
-
+       /* if object has parents, update them too */
+       if (flags & UPDATE_PARENTS) {
+               if (ob->parent) subframe_updateObject(scene, ob->parent, 0, frame);
+               if (ob->track) subframe_updateObject(scene, ob->track, 0, frame);
+
+               /* also update constraint targets */
+               for (con = ob->constraints.first; con; con=con->next) {
+                       bConstraintTypeInfo *cti= constraint_get_typeinfo(con);
+                       ListBase targets = {NULL, NULL};
+
+                       if (cti && cti->get_constraint_targets) {
+                               bConstraintTarget *ct;
+                               cti->get_constraint_targets(con, &targets);
+                               for (ct= targets.first; ct; ct= ct->next) {
+                                       if (ct->tar)
+                                               subframe_updateObject(scene, ct->tar, 0, frame);
+                               }
+                               /* free temp targets */
+                               if (cti->flush_constraint_targets)
+                                       cti->flush_constraint_targets(con, &targets, 0);
+                       }
+               }
+       }
        /* for curve following objects, parented curve has to be updated too */
        if(ob->type==OB_CURVE) {
                Curve *cu= ob->data;
index 4b5dc917cb6b49f4482459f9e5c0be6131a18e36..66c0c0265a1a734cc171e0a9cd6a597ff2ca49fa 100644 (file)
@@ -1145,7 +1145,7 @@ int BKE_tracking_next(MovieTrackingContext *context)
        if(!ibuf_new)
                return 0;
 
-    #pragma omp parallel for private(a) shared(ibuf_new, ok) if(map_size>1)
+       #pragma omp parallel for private(a) shared(ibuf_new, ok) if(map_size>1)
        for(a= 0; a<map_size; a++) {
                TrackContext *track_context;
                MovieTrackingTrack *track;
index 7c997e9cc561d3b429e0d3d88b07444bf9d3a6fb..241e993cbb2eab4220aba88d7e4f170086c4d9f0 100644 (file)
@@ -12724,6 +12724,18 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
                        }
                }
        }
+       /* sigh, this dscale vs dsize version patching was not done right, fix for fix,
+        * this intentionally checks an exact subversion, also note this was never in a release,
+        * at some point this could be removed. */
+       else if (main->versionfile == 260 && main->subversionfile == 6)
+       {
+               Object *ob;
+               for (ob= main->object.first; ob; ob= ob->id.next) {
+                       if (is_zero_v3(ob->dscale)) {
+                               fill_vn_fl(ob->dscale, 3, 1.0f);
+                       }
+               }
+       }
 
        /* put compatibility code here until next subversion bump */
        {
index 7d0ec866456fe50e5e4927ecb852a3693ab3c9bc..7c76766affa789ede4bb650583241dab1e06dbb5 100644 (file)
 typedef struct ScreenshotData {
        unsigned int *dumprect;
        int dumpsx, dumpsy;
+       rcti crop;
 } ScreenshotData;
 
 /* get shot from frontbuffer */
-static unsigned int *screenshot(bContext *C, int *dumpsx, int *dumpsy, int fscreen)
+static unsigned int *screenshot(bContext *C, int *dumpsx, int *dumpsy)
 {
        wmWindow *win= CTX_wm_window(C);
-       ScrArea *curarea= CTX_wm_area(C);
        int x=0, y=0;
        unsigned int *dumprect= NULL;
        
-       if(fscreen) {   /* full screen */
-               x= 0;
-               y= 0;
-               *dumpsx= win->sizex;
-               *dumpsy= win->sizey;
-       } 
-       else {
-               x= curarea->totrct.xmin;
-               y= curarea->totrct.ymin;
-               *dumpsx= curarea->totrct.xmax-x;
-               *dumpsy= curarea->totrct.ymax-y;
-       }
+       x= 0;
+       y= 0;
+       *dumpsx= win->sizex;
+       *dumpsy= win->sizey;
 
        if (*dumpsx && *dumpsy) {
                
@@ -108,15 +100,23 @@ static int screenshot_data_create(bContext *C, wmOperator *op)
 {
        unsigned int *dumprect;
        int dumpsx, dumpsy;
+
+       /* do redraw so we don't show popups/menus */
+       WM_redraw_windows(C);
        
-       dumprect= screenshot(C, &dumpsx, &dumpsy, RNA_boolean_get(op->ptr, "full"));
+       dumprect= screenshot(C, &dumpsx, &dumpsy);
+
        if(dumprect) {
                ScreenshotData *scd= MEM_callocN(sizeof(ScreenshotData), "screenshot");
+               ScrArea *sa= CTX_wm_area(C);
                
                scd->dumpsx= dumpsx;
                scd->dumpsy= dumpsy;
                scd->dumprect= dumprect;
+               if(sa)
+                       scd->crop= sa->totrct;
                op->customdata= scd;
+
                return TRUE;
        }
        else {
@@ -137,6 +137,21 @@ static void screenshot_data_free(wmOperator *op)
        }
 }
 
+static void screenshot_crop(ImBuf *ibuf, rcti crop)
+{
+       unsigned int *to= ibuf->rect;
+       unsigned int *from= ibuf->rect + crop.ymin*ibuf->x + crop.xmin;
+       int y, cropw= crop.xmax - crop.xmin, croph = crop.ymax - crop.ymin;
+
+       if(cropw > 0 && croph > 0) {
+               for(y=0; y<croph; y++, to+=cropw, from+=ibuf->x)
+                       memmove(to, from, sizeof(unsigned int)*cropw);
+
+               ibuf->x= cropw;
+               ibuf->y= croph;
+       }
+}
+
 static int screenshot_exec(bContext *C, wmOperator *op)
 {
        ScreenshotData *scd= op->customdata;
@@ -166,6 +181,10 @@ static int screenshot_exec(bContext *C, wmOperator *op)
                        ibuf= IMB_allocImBuf(scd->dumpsx, scd->dumpsy, 24, 0);
                        ibuf->rect= scd->dumprect;
 
+                       /* crop to show only single editor */
+                       if(!RNA_boolean_get(op->ptr, "full"))
+                               screenshot_crop(ibuf, scd->crop);
+
                        BKE_write_ibuf(ibuf, path, &scene->r.im_format);
 
                        IMB_freeImBuf(ibuf);
@@ -213,7 +232,6 @@ void SCREEN_OT_screenshot(wmOperatorType *ot)
        
        WM_operator_properties_filesel(ot, FOLDERFILE|IMAGEFILE, FILE_SPECIAL, FILE_SAVE, WM_FILESEL_FILEPATH);
        prop= RNA_def_boolean(ot->srna, "full", 1, "Full Screen", "");
-       RNA_def_property_flag(prop, PROP_HIDDEN); /* hide because once the file sel is displayed, the option no longer does anything */
 }
 
 /* *************** screenshot movie job ************************* */
index 86fa9180d41d3d44833b42b99177b425817b7f32..75ed4db577feaeecffc80c801100ebf1512b4879 100644 (file)
@@ -130,7 +130,7 @@ Mesh *rna_Object_to_mesh(Object *ob, ReportList *reports, Scene *sce, int apply_
 
        case OB_MBALL: {
                /* metaballs don't have modifiers, so just convert to mesh */
-               Object *basis_ob = find_basis_mball( sce, ob );
+               Object *basis_ob = find_basis_mball(sce, ob);
                /* todo, re-generatre for render-res */
                /* metaball_polygonize(scene, ob) */
 
@@ -138,7 +138,15 @@ Mesh *rna_Object_to_mesh(Object *ob, ReportList *reports, Scene *sce, int apply_
                        return NULL; /* only do basis metaball */
 
                tmpmesh = add_mesh("Mesh");
-               mball_to_mesh( &ob->disp, tmpmesh );
+                       
+               if(render) {
+                       ListBase disp = {NULL, NULL};
+                       makeDispListMBall_forRender(sce, ob, &disp);
+                       mball_to_mesh(&disp, tmpmesh);
+                       freedisplist(&disp);
+               }
+               else
+                       mball_to_mesh(&ob->disp, tmpmesh);
                break;
 
        }
index 1d8161086b049f47bc4b60191ad69f246531ce37..2c0e22337c0fecc886a52852ab78060052a1edf2 100644 (file)
@@ -331,6 +331,9 @@ void                WM_progress_clear(struct wmWindow *win);
 void           WM_console_toggle(struct bContext *C, short show);
 #endif
 
+                       /* Draw (for screenshot) */
+void           WM_redraw_windows(struct bContext *C);
+
 /* debugging only, convenience function to write on crash */
 int write_crash_blend(void);
 
index 389049d9e598fe384eacd2b371004ea609a3d757..f03680852ea191bc0abefdefb2d2bd0865d5fece 100644 (file)
@@ -835,3 +835,16 @@ void wm_draw_region_clear(wmWindow *win, ARegion *ar)
        win->screen->do_draw= 1;
 }
 
+void WM_redraw_windows(bContext *C)
+{
+       wmWindow *win_prev= CTX_wm_window(C);
+       ScrArea *area_prev= CTX_wm_area(C);
+       ARegion *ar_prev= CTX_wm_region(C);
+
+       wm_draw_update(C);
+
+       CTX_wm_window_set(C, win_prev);
+       CTX_wm_area_set(C, area_prev);
+       CTX_wm_region_set(C, ar_prev);
+}
+