Revision: 40118
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40118
Author:   campbellbarton
Date:     2011-09-11 08:28:16 +0000 (Sun, 11 Sep 2011)
Log Message:
-----------
svn merge -r40104:40117 https://svn.blender.org/svnroot/bf-blender/trunk/blender

Revision Links:
--------------
    
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40104

Modified Paths:
--------------
    branches/bmesh/blender/doc/python_api/rst/info_gotcha.rst
    branches/bmesh/blender/source/blender/blenfont/intern/blf_font.c
    branches/bmesh/blender/source/blender/blenfont/intern/blf_internal.h
    branches/bmesh/blender/source/blender/blenfont/intern/blf_util.c
    branches/bmesh/blender/source/blender/blenkernel/BKE_colortools.h
    branches/bmesh/blender/source/blender/blenkernel/intern/brush.c
    branches/bmesh/blender/source/blender/blenkernel/intern/colortools.c
    branches/bmesh/blender/source/blender/blenkernel/intern/curve.c
    branches/bmesh/blender/source/blender/blenkernel/intern/shrinkwrap.c
    branches/bmesh/blender/source/blender/blenlib/intern/BLI_kdopbvh.c
    
branches/bmesh/blender/source/blender/editors/animation/anim_channels_defines.c
    branches/bmesh/blender/source/blender/editors/armature/meshlaplacian.c
    branches/bmesh/blender/source/blender/editors/include/UI_interface.h
    branches/bmesh/blender/source/blender/editors/include/UI_resources.h
    branches/bmesh/blender/source/blender/editors/interface/interface_draw.c
    branches/bmesh/blender/source/blender/editors/interface/interface_panel.c
    branches/bmesh/blender/source/blender/editors/interface/interface_widgets.c
    branches/bmesh/blender/source/blender/editors/interface/resources.c
    branches/bmesh/blender/source/blender/editors/object/CMakeLists.txt
    branches/bmesh/blender/source/blender/editors/screen/area.c
    branches/bmesh/blender/source/blender/editors/space_file/file_draw.c
    branches/bmesh/blender/source/blender/editors/space_nla/nla_draw.c
    branches/bmesh/blender/source/blender/editors/space_node/drawnode.c
    branches/bmesh/blender/source/blender/editors/space_node/node_draw.c
    branches/bmesh/blender/source/blender/editors/space_outliner/outliner_draw.c
    
branches/bmesh/blender/source/blender/editors/space_sequencer/sequencer_draw.c
    branches/bmesh/blender/source/blender/editors/space_text/text_draw.c
    branches/bmesh/blender/source/blender/editors/space_view3d/drawarmature.c
    branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c
    branches/bmesh/blender/source/blender/editors/space_view3d/drawvolume.c
    branches/bmesh/blender/source/blender/editors/space_view3d/view3d_draw.c
    branches/bmesh/blender/source/blender/editors/util/CMakeLists.txt
    branches/bmesh/blender/source/blender/modifiers/CMakeLists.txt
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_navmesh.cpp
    
branches/bmesh/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c
    branches/bmesh/blender/source/blender/render/intern/include/render_types.h
    branches/bmesh/blender/source/blender/render/intern/include/rendercore.h
    branches/bmesh/blender/source/blender/render/intern/include/renderdatabase.h
    branches/bmesh/blender/source/blender/render/intern/include/shading.h
    branches/bmesh/blender/source/blender/render/intern/include/zbuf.h
    branches/bmesh/blender/source/blender/render/intern/source/convertblender.c
    branches/bmesh/blender/source/blender/render/intern/source/render_texture.c
    branches/bmesh/blender/source/blender/render/intern/source/rendercore.c
    branches/bmesh/blender/source/blender/render/intern/source/renderdatabase.c
    branches/bmesh/blender/source/blender/render/intern/source/shadeinput.c
    branches/bmesh/blender/source/blender/render/intern/source/shadeoutput.c
    branches/bmesh/blender/source/blender/render/intern/source/sss.c
    branches/bmesh/blender/source/blender/render/intern/source/volumetric.c
    branches/bmesh/blender/source/blender/render/intern/source/zbuf.c
    branches/bmesh/blender/source/blender/windowmanager/intern/wm_dragdrop.c
    branches/bmesh/blender/source/blenderplayer/CMakeLists.txt
    
branches/bmesh/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    
branches/bmesh/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    branches/bmesh/blender/source/gameengine/GamePlayer/ghost/GPG_Application.h
    branches/bmesh/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
    branches/bmesh/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
    branches/bmesh/blender/source/gameengine/Ketsji/KX_KetsjiEngine.h
    branches/bmesh/blender/source/gameengine/Ketsji/KX_PythonInit.cpp

Property Changed:
----------------
    branches/bmesh/blender/
    branches/bmesh/blender/release/
    branches/bmesh/blender/source/blender/editors/space_outliner/


Property changes on: branches/bmesh/blender
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/blender:39992-40104
   + /trunk/blender:39992-40117

Modified: branches/bmesh/blender/doc/python_api/rst/info_gotcha.rst
===================================================================
--- branches/bmesh/blender/doc/python_api/rst/info_gotcha.rst   2011-09-11 
08:21:26 UTC (rev 40117)
+++ branches/bmesh/blender/doc/python_api/rst/info_gotcha.rst   2011-09-11 
08:28:16 UTC (rev 40118)
@@ -378,6 +378,41 @@
 As suggested above, simply not holding references to data when Blender is used 
interactively by the user is the only way to ensure the script doesn't become 
unstable.
 
 
+Edit Mode / Memory Access
+-------------------------
+
+Switching edit-mode ``bpy.ops.object.mode_set(mode='EDIT')`` / 
``bpy.ops.object.mode_set(mode='OBJECT')`` will re-allocate objects data, any 
references to a meshes vertices/faces/uvs, armatures bones, curves points etc 
cannot be accessed after switching edit-mode.
+
+Only the reference to the data its self can be re-accessed, the following 
example will crash.
+
+.. code-block:: python
+
+   mesh = bpy.context.active_object.data
+   faces = mesh.faces
+   bpy.ops.object.mode_set(mode='EDIT')
+   bpy.ops.object.mode_set(mode='OBJECT')
+
+   # this will crash
+   print(faces)
+
+
+So after switching edit-mode you need to re-access any object data variables, 
the following example shows how to avoid the crash above.
+
+.. code-block:: python
+
+   mesh = bpy.context.active_object.data
+   faces = mesh.faces
+   bpy.ops.object.mode_set(mode='EDIT')
+   bpy.ops.object.mode_set(mode='OBJECT')
+
+   # faces have been re-allocated
+   faces = mesh.faces
+   print(faces)
+
+
+These kinds of problems can happen for any functions which re-allocate the 
object data but are most common when switching edit-mode.
+
+
 Array Re-Allocation
 -------------------
 


Property changes on: branches/bmesh/blender/release
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/blender/release:31524-40104
   + /trunk/blender/release:31524-40117

Modified: branches/bmesh/blender/source/blender/blenfont/intern/blf_font.c
===================================================================
--- branches/bmesh/blender/source/blender/blenfont/intern/blf_font.c    
2011-09-11 08:21:26 UTC (rev 40117)
+++ branches/bmesh/blender/source/blender/blenfont/intern/blf_font.c    
2011-09-11 08:28:16 UTC (rev 40118)
@@ -97,14 +97,52 @@
        }
 }
 
+static void blf_font_ensure_ascii_table(FontBLF *font)
+{
+       /* build ascii on demand */
+       if(font->glyph_ascii_table['0']==NULL) {
+               GlyphBLF *g;
+               unsigned int i;
+               for(i=0; i<256; i++) {
+                       g= blf_glyph_search(font->glyph_cache, i);
+                       if (!g) {
+                               FT_UInt glyph_index= 
FT_Get_Char_Index(font->face, i);
+                               g= blf_glyph_add(font, glyph_index, i);
+                       }
+                       font->glyph_ascii_table[i]= g;
+               }
+       }
+}
+
+/* Fast path for runs of ASCII characters. Given that common UTF-8
+ * input will consist of an overwhelming majority of ASCII
+ * characters.
+ */
+
+/* Note,
+ * blf_font_ensure_ascii_table(font); must be called before this macro */
+
+#define BLF_UTF8_NEXT_FAST(font, g, str, i, c)                                \
+       if(((c)= (str)[i]) < 0x80) {                                            
  \
+               g= (font)->glyph_ascii_table[c];                                
      \
+               i++;                                                            
      \
+       }                                                                       
  \
+       else if ((c= blf_utf8_next((unsigned char *)(str), &(i)))) {            
  \
+               if ((g= blf_glyph_search((font)->glyph_cache, c)) == NULL) {    
      \
+                       g= blf_glyph_add(font, FT_Get_Char_Index((font)->face, 
c), c);    \
+               }                                                               
      \
+       }                                                                       
  \
+
+
+
 void blf_font_draw(FontBLF *font, const char *str, unsigned int len)
 {
        unsigned int c;
        GlyphBLF *g, *g_prev;
        FT_Vector delta;
-       FT_UInt glyph_index;
        int pen_x, pen_y;
-       int i, has_kerning, st;
+       int has_kerning, st;
+       unsigned int i;
 
        if (!font->glyph_cache)
                return;
@@ -115,17 +153,15 @@
        has_kerning= FT_HAS_KERNING(font->face);
        g_prev= NULL;
 
+       blf_font_ensure_ascii_table(font);
+
        while (str[i] && i < len) {
-               c= blf_utf8_next((unsigned char *)str, &i);
+
+               BLF_UTF8_NEXT_FAST(font, g, str, i, c);
+
                if (c == 0)
                        break;
 
-               g= blf_glyph_search(font->glyph_cache, c);
-               if (!g) {
-                       glyph_index= FT_Get_Char_Index(font->face, c);
-                       g= blf_glyph_add(font, glyph_index, c);
-               }
-
                /* if we don't found a glyph, skip it. */
                if (!g)
                        continue;
@@ -157,9 +193,8 @@
        char c;
        GlyphBLF *g, *g_prev;
        FT_Vector delta;
-       FT_UInt glyph_index;
        int pen_x, pen_y;
-       int i, has_kerning, st;
+       int has_kerning, st;
 
        if (!font->glyph_cache)
                return;
@@ -169,18 +204,8 @@
        has_kerning= FT_HAS_KERNING(font->face);
        g_prev= NULL;
 
-       /* build ascii on demand */
-       if(font->glyph_ascii_table['0']==NULL) {
-               for(i=0; i<256; i++) {
-                       g= blf_glyph_search(font->glyph_cache, i);
-                       if (!g) {
-                               glyph_index= FT_Get_Char_Index(font->face, i);
-                               g= blf_glyph_add(font, glyph_index, i);
-                       }
-                       font->glyph_ascii_table[i]= g;
-               }
-       }
-       
+       blf_font_ensure_ascii_table(font);
+
        while ((c= *(str++)) && len--) {
                g= font->glyph_ascii_table[c];
 
@@ -216,10 +241,10 @@
        unsigned char b_col_char[4];
        GlyphBLF *g, *g_prev;
        FT_Vector delta;
-       FT_UInt glyph_index;
        float a, *fbuf;
        int pen_x, y, x;
-       int i, has_kerning, st, chx, chy;
+       int has_kerning, st, chx, chy;
+       unsigned int i;
 
        if (!font->glyph_cache || (!font->b_fbuf && !font->b_cbuf))
                return;
@@ -234,18 +259,16 @@
        b_col_char[2]= font->b_col[2] * 255;
        b_col_char[3]= font->b_col[3] * 255;
 
+       blf_font_ensure_ascii_table(font);
+
        while (str[i]) {
                int pen_y;
-               c= blf_utf8_next((unsigned char *)str, &i);
+
+               BLF_UTF8_NEXT_FAST(font, g, str, i, c);
+
                if (c == 0)
                        break;
 
-               g= blf_glyph_search(font->glyph_cache, c);
-               if (!g) {
-                       glyph_index= FT_Get_Char_Index(font->face, c);
-                       g= blf_glyph_add(font, glyph_index, c);
-               }
-
                /* if we don't found a glyph, skip it. */
                if (!g)
                        continue;
@@ -363,10 +386,10 @@
        unsigned int c;
        GlyphBLF *g, *g_prev;
        FT_Vector delta;
-       FT_UInt glyph_index;
        rctf gbox;
        int pen_x, pen_y;
-       int i, has_kerning, st;
+       int has_kerning, st;
+       unsigned int i;
 
        if (!font->glyph_cache)
                return;
@@ -382,17 +405,15 @@
        has_kerning= FT_HAS_KERNING(font->face);
        g_prev= NULL;
 
+       blf_font_ensure_ascii_table(font);
+
        while (str[i]) {
-               c= blf_utf8_next((unsigned char *)str, &i);
+
+               BLF_UTF8_NEXT_FAST(font, g, str, i, c);
+
                if (c == 0)
                        break;
 
-               g= blf_glyph_search(font->glyph_cache, c);
-               if (!g) {
-                       glyph_index= FT_Get_Char_Index(font->face, c);
-                       g= blf_glyph_add(font, glyph_index, c);
-               }
-
                /* if we don't found a glyph, skip it. */
                if (!g)
                        continue;
@@ -534,7 +555,7 @@
 
 static void blf_font_fill(FontBLF *font)
 {
-       int i;
+       unsigned int i;
 
        font->aspect[0]= 1.0f;
        font->aspect[1]= 1.0f;

Modified: branches/bmesh/blender/source/blender/blenfont/intern/blf_internal.h
===================================================================
--- branches/bmesh/blender/source/blender/blenfont/intern/blf_internal.h        
2011-09-11 08:21:26 UTC (rev 40117)
+++ branches/bmesh/blender/source/blender/blenfont/intern/blf_internal.h        
2011-09-11 08:28:16 UTC (rev 40118)
@@ -40,7 +40,7 @@
 
 unsigned int blf_next_p2(unsigned int x);
 unsigned int blf_hash(unsigned int val);
-int blf_utf8_next(unsigned char *buf, int *iindex);
+int blf_utf8_next(unsigned char *buf, unsigned int *iindex);
 
 char *blf_dir_search(const char *file);
 char *blf_dir_metrics_search(const char *filename);

Modified: branches/bmesh/blender/source/blender/blenfont/intern/blf_util.c
===================================================================
--- branches/bmesh/blender/source/blender/blenfont/intern/blf_util.c    
2011-09-11 08:21:26 UTC (rev 40117)
+++ branches/bmesh/blender/source/blender/blenfont/intern/blf_util.c    
2011-09-11 08:28:16 UTC (rev 40118)
@@ -72,7 +72,7 @@
  * The original name: imlib_font_utf8_get_next
  * more info here: http://docs.enlightenment.org/api/imlib2/html/
  */
-int blf_utf8_next(unsigned char *buf, int *iindex)
+int blf_utf8_next(unsigned char *buf, unsigned int *iindex)
 {
        /* Reads UTF8 bytes from 'buf', starting at 'index' and
         * returns the code point of the next valid code point.

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_colortools.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_colortools.h   
2011-09-11 08:21:26 UTC (rev 40117)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_colortools.h   
2011-09-11 08:28:16 UTC (rev 40118)
@@ -55,7 +55,7 @@
 struct CurveMapping    *curvemapping_add(int tot, float minx, float miny, 
float maxx, float maxy);
 void                           curvemapping_free(struct CurveMapping *cumap);
 struct CurveMapping    *curvemapping_copy(struct CurveMapping *cumap);
-void                           curvemapping_set_black_white(struct 
CurveMapping *cumap, float *black, float *white);
+void                           curvemapping_set_black_white(struct 
CurveMapping *cumap, const float black[3], const float white[3]);
 
 #define CURVEMAP_SLOPE_NEGATIVE        0
 #define CURVEMAP_SLOPE_POSITIVE        1
@@ -70,9 +70,9 @@
 float                          curvemap_evaluateF(struct CurveMap *cuma, float 
value);
                                        /* single curve, with table check */
 float                          curvemapping_evaluateF(struct CurveMapping 
*cumap, int cur, float value);
-void                           curvemapping_evaluate3F(struct CurveMapping 
*cumap, float *vecout, const float *vecin);
-void                           curvemapping_evaluateRGBF(struct CurveMapping 
*cumap, float *vecout, const float *vecin);
-void                           curvemapping_evaluate_premulRGBF(struct 
CurveMapping *cumap, float *vecout, const float *vecin);
+void                           curvemapping_evaluate3F(struct CurveMapping 
*cumap, float vecout[3], const float vecin[3]);
+void                           curvemapping_evaluateRGBF(struct CurveMapping 
*cumap, float vecout[3], const float vecin[3]);
+void                           curvemapping_evaluate_premulRGBF(struct 
CurveMapping *cumap, float vecout[3], const float vecin[3]);
 void                           curvemapping_do_ibuf(struct CurveMapping 
*cumap, struct ImBuf *ibuf);
 void                           curvemapping_premultiply(struct CurveMapping 
*cumap, int restore);
 int                                    curvemapping_RGBA_does_something(struct 
CurveMapping *cumap);


@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to