Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiika Hamalainen <blender@miikah.org>2011-07-02 22:15:55 +0400
committerMiika Hamalainen <blender@miikah.org>2011-07-02 22:15:55 +0400
commitfdc59b8a40014c28e033f39cbf144565568d7058 (patch)
treef0acaba90be9c2b0fac9b70e2010479fd8f02c51 /source/blender
parent9ae663154fd9f100c299afaab05a560b1a2a55a4 (diff)
parent3ee2cb9cdb647729a1d62d2b2dab45813d938cc8 (diff)
Merge with trunk r38042
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/BKE_blender.h2
-rw-r--r--source/blender/blenkernel/intern/key.c23
-rw-r--r--source/blender/collada/EffectExporter.cpp2
-rw-r--r--source/blender/editors/armature/armature_intern.h4
-rw-r--r--source/blender/editors/armature/armature_ops.c24
-rw-r--r--source/blender/editors/armature/editarmature.c123
-rw-r--r--source/blender/editors/interface/interface_draw.c10
-rw-r--r--source/blender/editors/interface/interface_widgets.c2
-rw-r--r--source/blender/editors/object/object_edit.c4
-rw-r--r--source/blender/editors/object/object_hook.c30
-rw-r--r--source/blender/editors/object/object_relations.c1
-rw-r--r--source/blender/editors/render/render_internal.c23
-rw-r--r--source/blender/editors/screen/area.c218
-rw-r--r--source/blender/editors/screen/screen_edit.c2
-rw-r--r--source/blender/editors/space_image/image_buttons.c4
-rw-r--r--source/blender/editors/space_node/node_edit.c57
-rw-r--r--source/blender/editors/uvedit/uvedit_draw.c2
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c6
-rw-r--r--source/blender/makesdna/DNA_space_types.h2
-rw-r--r--source/blender/makesrna/intern/rna_access.c2
-rw-r--r--source/blender/makesrna/intern/rna_render.c7
-rw-r--r--source/blender/makesrna/intern/rna_space.c7
-rw-r--r--source/blender/modifiers/intern/MOD_displace.c14
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h11
-rw-r--r--source/blender/render/intern/include/render_types.h6
-rw-r--r--source/blender/render/intern/source/convertblender.c20
-rw-r--r--source/blender/render/intern/source/imagetexture.c28
-rw-r--r--source/blender/render/intern/source/pipeline.c63
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c10
29 files changed, 411 insertions, 296 deletions
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 7c11f9e964e..25fb6f9f9ff 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -51,7 +51,7 @@ extern "C" {
/* used by packaging tools */
/* can be left blank, otherwise a,b,c... etc with no quotes */
-#define BLENDER_VERSION_CHAR
+#define BLENDER_VERSION_CHAR a
/* alpha/beta/rc/release, docs use this */
#define BLENDER_VERSION_CYCLE release
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index 4b532362cd8..8b0cfb1d156 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -63,6 +63,7 @@
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_object.h"
+#include "BKE_deform.h"
#include "RNA_access.h"
@@ -1005,7 +1006,7 @@ static float *get_weights_array(Object *ob, char *vgroup)
MDeformVert *dvert= NULL;
EditMesh *em= NULL;
EditVert *eve;
- int totvert= 0, index= 0;
+ int totvert= 0, defgrp_index= 0;
/* no vgroup string set? */
if(vgroup[0]==0) return NULL;
@@ -1028,10 +1029,10 @@ static float *get_weights_array(Object *ob, char *vgroup)
if(dvert==NULL) return NULL;
/* find the group (weak loop-in-loop) */
- index= defgroup_name_index(ob, vgroup);
- if(index >= 0) {
+ defgrp_index= defgroup_name_index(ob, vgroup);
+ if(defgrp_index >= 0) {
float *weights;
- int i, j;
+ int i;
weights= MEM_callocN(totvert*sizeof(float), "weights");
@@ -1040,23 +1041,13 @@ static float *get_weights_array(Object *ob, char *vgroup)
dvert= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
if(dvert) {
- for(j=0; j<dvert->totweight; j++) {
- if(dvert->dw[j].def_nr == index) {
- weights[i]= dvert->dw[j].weight;
- break;
- }
- }
+ weights[i]= defvert_find_weight(dvert, defgrp_index);
}
}
}
else {
for(i=0; i < totvert; i++, dvert++) {
- for(j=0; j<dvert->totweight; j++) {
- if(dvert->dw[j].def_nr == index) {
- weights[i]= dvert->dw[j].weight;
- break;
- }
- }
+ weights[i]= defvert_find_weight(dvert, defgrp_index);
}
}
diff --git a/source/blender/collada/EffectExporter.cpp b/source/blender/collada/EffectExporter.cpp
index 0bbf714137e..74756859d3b 100644
--- a/source/blender/collada/EffectExporter.cpp
+++ b/source/blender/collada/EffectExporter.cpp
@@ -273,7 +273,7 @@ void EffectsExporter::operator()(Material *ma, Object *ob)
std::string uvname = strlen(t->uvname) ? t->uvname : active_uv;
// color
- if (t->mapto & MAP_COL | MAP_COLSPEC) {
+ if (t->mapto & (MAP_COL | MAP_COLSPEC)) {
ep.setDiffuse(createTexture(ima, uvname, sampler));
}
// ambient
diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h
index 82decf8d1cf..85da7a212c9 100644
--- a/source/blender/editors/armature/armature_intern.h
+++ b/source/blender/editors/armature/armature_intern.h
@@ -79,8 +79,6 @@ void ARMATURE_OT_separate(struct wmOperatorType *ot);
void ARMATURE_OT_autoside_names(struct wmOperatorType *ot);
void ARMATURE_OT_flip_names(struct wmOperatorType *ot);
-void ARMATURE_OT_flags_set(struct wmOperatorType *ot);
-
void ARMATURE_OT_layers_show_all(struct wmOperatorType *ot);
void ARMATURE_OT_armature_layers(struct wmOperatorType *ot);
void ARMATURE_OT_bone_layers(struct wmOperatorType *ot);
@@ -125,8 +123,6 @@ void POSE_OT_flip_names(struct wmOperatorType *ot);
void POSE_OT_quaternions_flip(struct wmOperatorType *ot);
-void POSE_OT_flags_set(struct wmOperatorType *ot);
-
void POSE_OT_armature_layers(struct wmOperatorType *ot);
void POSE_OT_bone_layers(struct wmOperatorType *ot);
diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c
index 545cff82483..16b748737ca 100644
--- a/source/blender/editors/armature/armature_ops.c
+++ b/source/blender/editors/armature/armature_ops.c
@@ -85,8 +85,6 @@ void ED_operatortypes_armature(void)
WM_operatortype_append(ARMATURE_OT_autoside_names);
WM_operatortype_append(ARMATURE_OT_flip_names);
- WM_operatortype_append(ARMATURE_OT_flags_set);
-
WM_operatortype_append(ARMATURE_OT_layers_show_all);
WM_operatortype_append(ARMATURE_OT_armature_layers);
WM_operatortype_append(ARMATURE_OT_bone_layers);
@@ -141,8 +139,6 @@ void ED_operatortypes_armature(void)
WM_operatortype_append(POSE_OT_quaternions_flip);
- WM_operatortype_append(POSE_OT_flags_set);
-
WM_operatortype_append(POSE_OT_armature_layers);
WM_operatortype_append(POSE_OT_bone_layers);
@@ -268,12 +264,9 @@ void ED_keymap_armature(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "ARMATURE_OT_separate", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
/* set flags */
- kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_enum_set(kmi->ptr, "mode", 2); // toggle
- kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
- RNA_enum_set(kmi->ptr, "mode", 1); // enable
- kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_flags_set", WKEY, KM_PRESS, KM_ALT, 0);
- RNA_enum_set(kmi->ptr, "mode", 0); // clear
+ WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_toggle", WKEY, KM_PRESS, KM_SHIFT, 0);
+ WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_enable", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
+ WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_disable", WKEY, KM_PRESS, KM_ALT, 0);
/* armature/bone layers */
WM_keymap_add_item(keymap, "ARMATURE_OT_layers_show_all", ACCENTGRAVEKEY, KM_PRESS, KM_CTRL, 0);
@@ -349,13 +342,10 @@ void ED_keymap_armature(wmKeyConfig *keyconf)
WM_keymap_add_menu(keymap, "VIEW3D_MT_pose_group", GKEY, KM_PRESS, KM_CTRL, 0);
/* set flags */
- kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_enum_set(kmi->ptr, "mode", 2); // toggle
- kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
- RNA_enum_set(kmi->ptr, "mode", 1); // enable
- kmi= WM_keymap_add_item(keymap, "POSE_OT_flags_set", WKEY, KM_PRESS, KM_ALT, 0);
- RNA_enum_set(kmi->ptr, "mode", 0); // clear
-
+ WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_toggle", WKEY, KM_PRESS, KM_SHIFT, 0);
+ WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_enable", WKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
+ WM_keymap_add_menu(keymap, "VIEW3D_MT_bone_options_disable", WKEY, KM_PRESS, KM_ALT, 0);
+
/* armature/bone layers */
WM_keymap_add_item(keymap, "ARMATURE_OT_layers_show_all", ACCENTGRAVEKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "POSE_OT_armature_layers", MKEY, KM_PRESS, KM_SHIFT, 0);
diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c
index abf08393544..20352206121 100644
--- a/source/blender/editors/armature/editarmature.c
+++ b/source/blender/editors/armature/editarmature.c
@@ -1352,30 +1352,6 @@ static void *get_nearest_bone (bContext *C, short findunsel, int x, int y)
return NULL;
}
-/* helper for setflag_sel_bone() */
-static void bone_setflag (int *bone, int flag, short mode)
-{
- if (bone && flag) {
- /* exception for inverse flags */
- if (flag == BONE_NO_DEFORM) {
- if (mode == 2)
- *bone |= flag;
- else if (mode == 1)
- *bone &= ~flag;
- else
- *bone ^= flag;
- }
- else {
- if (mode == 2)
- *bone &= ~flag;
- else if (mode == 1)
- *bone |= flag;
- else
- *bone ^= flag;
- }
- }
-}
-
/* Get the first available child of an editbone */
static EditBone *editbone_get_child(bArmature *arm, EditBone *pabone, short use_visibility)
{
@@ -1396,105 +1372,6 @@ static EditBone *editbone_get_child(bArmature *arm, EditBone *pabone, short use_
return chbone;
}
-/* callback for posemode setflag */
-static int pose_setflag_exec (bContext *C, wmOperator *op)
-{
- int flag= RNA_enum_get(op->ptr, "type");
- int mode= RNA_enum_get(op->ptr, "mode");
-
- /* loop over all selected pchans */
- CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones)
- {
- bone_setflag(&pchan->bone->flag, flag, mode);
- }
- CTX_DATA_END;
-
- /* note, notifier might evolve */
- WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ED_object_pose_armature(CTX_data_active_object(C)));
-
- return OPERATOR_FINISHED;
-}
-
-/* callback for editbones setflag */
-static int armature_bones_setflag_exec (bContext *C, wmOperator *op)
-{
- int flag= RNA_enum_get(op->ptr, "type");
- int mode= RNA_enum_get(op->ptr, "mode");
-
- /* loop over all selected pchans */
- CTX_DATA_BEGIN(C, EditBone *, ebone, selected_bones)
- {
- bone_setflag(&ebone->flag, flag, mode);
- }
- CTX_DATA_END;
-
- /* note, notifier might evolve */
- WM_event_add_notifier(C, NC_OBJECT|ND_POSE, CTX_data_edit_object(C));
-
- return OPERATOR_FINISHED;
-}
-
-/* settings that can be changed */
-static EnumPropertyItem prop_bone_setting_types[] = {
- {BONE_DRAWWIRE, "DRAWWIRE", 0, "Draw Wire", ""},
- {BONE_NO_DEFORM, "DEFORM", 0, "Deform", ""},
- {BONE_MULT_VG_ENV, "MULT_VG", 0, "Multiply Vertex Groups", ""},
- {BONE_HINGE, "HINGE", 0, "Hinge", ""},
- {BONE_NO_SCALE, "NO_SCALE", 0, "No Scale", ""},
- {BONE_EDITMODE_LOCKED, "LOCKED", 0, "Locked", "(For EditMode only)"},
- {0, NULL, 0, NULL, NULL}
-};
-
-/* ways that settings can be changed */
-static EnumPropertyItem prop_bone_setting_modes[] = {
- {0, "CLEAR", 0, "Clear", ""},
- {1, "ENABLE", 0, "Enable", ""},
- {2, "TOGGLE", 0, "Toggle", ""},
- {0, NULL, 0, NULL, NULL}
-};
-
-
-void ARMATURE_OT_flags_set (wmOperatorType *ot)
-{
- /* identifiers */
- ot->name= "Set Bone Flags";
- ot->idname= "ARMATURE_OT_flags_set";
- ot->description= "Set flags for armature bones";
-
- /* callbacks */
- ot->invoke= WM_menu_invoke;
- ot->exec= armature_bones_setflag_exec;
- ot->poll= ED_operator_editarmature;
-
- /* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-
- /* properties */
- ot->prop= RNA_def_enum(ot->srna, "type", prop_bone_setting_types, 0, "Type", "");
- RNA_def_enum(ot->srna, "mode", prop_bone_setting_modes, 0, "Mode", "");
-}
-
-void POSE_OT_flags_set (wmOperatorType *ot)
-{
- /* identifiers */
- ot->name= "Set Bone Flags";
- ot->idname= "POSE_OT_flags_set";
- ot->description= "Set flags for armature bones";
-
- /* callbacks */
- ot->invoke= WM_menu_invoke;
- ot->exec= pose_setflag_exec;
- ot->poll= ED_operator_posemode;
-
- /* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-
- /* properties */
- ot->prop= RNA_def_enum(ot->srna, "type", prop_bone_setting_types, 0, "Type", "");
- RNA_def_enum(ot->srna, "mode", prop_bone_setting_modes, 0, "Mode", "");
-}
-
-
/* **************** END PoseMode & EditMode *************************** */
/* **************** Posemode stuff ********************** */
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index c7f11116834..97299a6a766 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -142,13 +142,13 @@ void uiDrawBox(int mode, float minx, float miny, float maxx, float maxy, float r
static void round_box_shade_col(float *col1, float *col2, float fac)
{
- float col[3];
+ float col[4];
col[0]= (fac*col1[0] + (1.0f-fac)*col2[0]);
col[1]= (fac*col1[1] + (1.0f-fac)*col2[1]);
col[2]= (fac*col1[2] + (1.0f-fac)*col2[2]);
-
- glColor3fv(col);
+ col[3]= (fac*col1[3] + (1.0f-fac)*col2[3]);
+ glColor4fv(col);
}
@@ -159,7 +159,7 @@ void uiDrawBoxShade(int mode, float minx, float miny, float maxx, float maxy, fl
float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
{0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}};
float div= maxy-miny;
- float coltop[3], coldown[3], color[4];
+ float coltop[4], coldown[4], color[4];
int a;
/* mult */
@@ -173,9 +173,11 @@ void uiDrawBoxShade(int mode, float minx, float miny, float maxx, float maxy, fl
coltop[0]= color[0]+shadetop; if(coltop[0]>1.0f) coltop[0]= 1.0f;
coltop[1]= color[1]+shadetop; if(coltop[1]>1.0f) coltop[1]= 1.0f;
coltop[2]= color[2]+shadetop; if(coltop[2]>1.0f) coltop[2]= 1.0f;
+ coltop[3]= color[3];
coldown[0]= color[0]+shadedown; if(coldown[0]<0.0f) coldown[0]= 0.0f;
coldown[1]= color[1]+shadedown; if(coldown[1]<0.0f) coldown[1]= 0.0f;
coldown[2]= color[2]+shadedown; if(coldown[2]<0.0f) coldown[2]= 0.0f;
+ coldown[3]= color[3];
glShadeModel(GL_SMOOTH);
glBegin(mode);
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index b6e255b6758..25a64994f5c 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -180,7 +180,7 @@ void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y
glEnable(GL_BLEND);
glGetFloatv(GL_CURRENT_COLOR, color);
- color[3]= 0.125;
+ color[3]*= 0.125;
glColor4fv(color);
/* for each AA step */
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 527b97a6082..29a740affc5 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -1689,7 +1689,7 @@ void OBJECT_OT_shade_flat(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Shade Flat";
- ot->description= "Display faces 'smooth' (using vertext normals)";
+ ot->description= "Display faces 'flat'";
ot->idname= "OBJECT_OT_shade_flat";
/* api callbacks */
@@ -1704,7 +1704,7 @@ void OBJECT_OT_shade_smooth(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Shade Smooth";
- ot->description= "Display faces 'flat'";
+ ot->description= "Display faces 'smooth' (using vertex normals)";
ot->idname= "OBJECT_OT_shade_smooth";
/* api callbacks */
diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c
index 2d547da41f6..bb32869469a 100644
--- a/source/blender/editors/object/object_hook.c
+++ b/source/blender/editors/object/object_hook.c
@@ -56,6 +56,7 @@
#include "BKE_object.h"
#include "BKE_report.h"
#include "BKE_scene.h"
+#include "BKE_deform.h"
#include "RNA_define.h"
#include "RNA_access.h"
@@ -85,7 +86,7 @@ static int return_editmesh_indexar(EditMesh *em, int *tot, int **indexar, float
*indexar= index= MEM_mallocN(4*totvert, "hook indexar");
*tot= totvert;
nr= 0;
- cent[0]= cent[1]= cent[2]= 0.0;
+ zero_v3(cent);
for(eve= em->verts.first; eve; eve= eve->next) {
if(eve->f & SELECT) {
@@ -102,30 +103,29 @@ static int return_editmesh_indexar(EditMesh *em, int *tot, int **indexar, float
static int return_editmesh_vgroup(Object *obedit, EditMesh *em, char *name, float *cent)
{
- MDeformVert *dvert;
- EditVert *eve;
- int i, totvert=0;
-
- cent[0]= cent[1]= cent[2]= 0.0;
-
+ zero_v3(cent);
+
if(obedit->actdef) {
-
+ const int defgrp_index= obedit->actdef-1;
+ int totvert=0;
+
+ MDeformVert *dvert;
+ EditVert *eve;
+
/* find the vertices */
for(eve= em->verts.first; eve; eve= eve->next) {
dvert= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
if(dvert) {
- for(i=0; i<dvert->totweight; i++){
- if(dvert->dw[i].def_nr == (obedit->actdef-1)) {
- totvert++;
- add_v3_v3(cent, eve->co);
- }
+ if(defvert_find_weight(dvert, defgrp_index) > 0.0f) {
+ add_v3_v3(cent, eve->co);
+ totvert++;
}
}
}
if(totvert) {
- bDeformGroup *defGroup = BLI_findlink(&obedit->defbase, obedit->actdef-1);
- strcpy(name, defGroup->name);
+ bDeformGroup *dg = BLI_findlink(&obedit->defbase, defgrp_index);
+ BLI_strncpy(name, dg->name, sizeof(dg->name));
mul_v3_fl(cent, 1.0f/(float)totvert);
return 1;
}
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index aa2e6d2c145..f3b67867d7f 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -446,6 +446,7 @@ static int parent_clear_exec(bContext *C, wmOperator *op)
DAG_scene_sort(bmain, scene);
DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARENT, NULL);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index d4de1386871..42a163d3da5 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -189,11 +189,6 @@ void image_buffer_rect_update(Scene *scene, RenderResult *rr, ImBuf *ibuf, volat
/* set callbacks, exported to sequence render too.
Only call in foreground (UI) renders. */
-static void render_error_reports(void *reports, const char *str)
-{
- BKE_report(reports, RPT_ERROR, str);
-}
-
/* executes blocking render */
static int screen_render_exec(bContext *C, wmOperator *op)
{
@@ -214,7 +209,6 @@ static int screen_render_exec(bContext *C, wmOperator *op)
G.afbreek= 0;
RE_test_break_cb(re, NULL, (int (*)(void *)) blender_test_break);
- RE_error_cb(re, op->reports, render_error_reports);
ima= BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result");
BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE);
@@ -226,11 +220,15 @@ static int screen_render_exec(bContext *C, wmOperator *op)
since sequence rendering can call that recursively... (peter) */
seq_stripelem_cache_cleanup();
+ RE_SetReports(re, op->reports);
+
if(is_animation)
- RE_BlenderAnim(re, mainp, scene, camera_override, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
+ RE_BlenderAnim(re, mainp, scene, camera_override, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step);
else
RE_BlenderFrame(re, mainp, scene, NULL, camera_override, lay, scene->r.cfra, is_write_still);
+ RE_SetReports(re, NULL);
+
// no redraw needed, we leave state as we entered it
ED_update_for_newframe(mainp, scene, CTX_wm_screen(C), 1);
@@ -374,10 +372,14 @@ static void render_startjob(void *rjv, short *stop, short *do_update, float *pro
rj->do_update= do_update;
rj->progress= progress;
+ RE_SetReports(rj->re, rj->reports);
+
if(rj->anim)
- RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->camera_override, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
+ RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->camera_override, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step);
else
RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->camera_override, rj->lay, rj->scene->r.cfra, rj->write_still);
+
+ RE_SetReports(rj->re, NULL);
}
static void render_endjob(void *rjv)
@@ -470,7 +472,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
if(WM_jobs_test(CTX_wm_manager(C), scene))
return OPERATOR_CANCELLED;
- if(!RE_is_rendering_allowed(scene, camera_override, op->reports, render_error_reports)) {
+ if(!RE_is_rendering_allowed(scene, camera_override, op->reports)) {
return OPERATOR_CANCELLED;
}
@@ -578,8 +580,6 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
rj->re= re;
G.afbreek= 0;
- RE_error_cb(re, op->reports, render_error_reports);
-
WM_jobs_start(CTX_wm_manager(C), steve);
WM_cursor_wait(0);
@@ -596,7 +596,6 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_RUNNING_MODAL;
}
-
/* contextual render, using current scene, view3d? */
void RENDER_OT_render(wmOperatorType *ot)
{
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 4d531e78ec0..82986dfbcc4 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -188,17 +188,12 @@ static void area_draw_azone(short x1, short y1, short x2, short y2)
}
-static void region_draw_azone(AZone *az)
+static void region_draw_azone_icon(AZone *az)
{
GLUquadricObj *qobj = NULL;
short midx = az->x1 + (az->x2 - az->x1)/2;
short midy = az->y1 + (az->y2 - az->y1)/2;
-
- if(az->ar==NULL) return;
-
- /* only display action zone icons when the region is hidden */
- if (!(az->ar->flag & RGN_FLAG_HIDDEN)) return;
-
+
qobj = gluNewQuadric();
glPushMatrix();
@@ -227,6 +222,79 @@ static void region_draw_azone(AZone *az)
sdrawline(midx-2, midy, midx+3, midy);
}
+static void region_draw_azone_tab(AZone *az)
+{
+ float col[3];
+
+ glEnable(GL_BLEND);
+ UI_GetThemeColor3fv(TH_HEADER, col);
+ glColor4f(col[0], col[1], col[2], 0.5f);
+
+ /* add code to draw region hidden as 'too small' */
+ switch(az->edge) {
+ case AE_TOP_TO_BOTTOMRIGHT:
+ uiSetRoundBox(3 + 16);
+
+ uiDrawBoxShade(GL_POLYGON, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f);
+ glColor4ub(0, 0, 0, 255);
+ uiRoundRect((float)az->x1, 0.3f+(float)az->y1, (float)az->x2, 0.3f+(float)az->y2, 4.0f);
+ break;
+ case AE_BOTTOM_TO_TOPLEFT:
+ uiSetRoundBox(12 + 16);
+
+ uiDrawBoxShade(GL_POLYGON, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f);
+ glColor4ub(0, 0, 0, 255);
+ uiRoundRect((float)az->x1, 0.3f+(float)az->y1, (float)az->x2, 0.3f+(float)az->y2, 4.0f);
+ break;
+ case AE_LEFT_TO_TOPRIGHT:
+ uiSetRoundBox(9 + 16);
+
+ uiDrawBoxShade(GL_POLYGON, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f);
+ glColor4ub(0, 0, 0, 255);
+ uiRoundRect((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f);
+ break;
+ case AE_RIGHT_TO_TOPLEFT:
+ uiSetRoundBox(6 + 16);
+
+ uiDrawBoxShade(GL_POLYGON, (float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f, -0.3f, 0.05f);
+ glColor4ub(0, 0, 0, 255);
+ uiRoundRect((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y2, 4.0f);
+ break;
+ }
+
+ glDisable(GL_BLEND);
+}
+
+static void region_draw_azone_tria(AZone *az)
+{
+ extern void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3); /* xxx temp */
+
+ glEnable(GL_BLEND);
+ //UI_GetThemeColor3fv(TH_HEADER, col);
+ glColor4f(0.0f, 0.0f, 0.0f, 0.35f);
+
+ /* add code to draw region hidden as 'too small' */
+ switch(az->edge) {
+ case AE_TOP_TO_BOTTOMRIGHT:
+ ui_draw_anti_tria((float)az->x1, (float)az->y1, (float)az->x2, (float)az->y1, (float)(az->x1+az->x2)/2, (float)az->y2);
+ break;
+
+ case AE_BOTTOM_TO_TOPLEFT:
+ ui_draw_anti_tria((float)az->x1, (float)az->y2, (float)az->x2, (float)az->y2, (float)(az->x1+az->x2)/2, (float)az->y1);
+ break;
+
+ case AE_LEFT_TO_TOPRIGHT:
+ ui_draw_anti_tria((float)az->x2, (float)az->y1, (float)az->x2, (float)az->y2, (float)az->x1, (float)(az->y1+az->y2)/2);
+ break;
+
+ case AE_RIGHT_TO_TOPLEFT:
+ ui_draw_anti_tria((float)az->x1, (float)az->y1, (float)az->x1, (float)az->y2, (float)az->x2, (float)(az->y1+az->y2)/2);
+ break;
+
+ }
+
+ glDisable(GL_BLEND);
+}
/* only exported for WM */
void ED_area_overdraw(bContext *C)
@@ -248,7 +316,19 @@ void ED_area_overdraw(bContext *C)
if(az->type==AZONE_AREA) {
area_draw_azone(az->x1, az->y1, az->x2, az->y2);
} else if(az->type==AZONE_REGION) {
- region_draw_azone(az);
+
+ if(az->ar) {
+ /* only display tab or icons when the region is hidden */
+ if (az->ar->flag & (RGN_FLAG_HIDDEN|RGN_FLAG_TOO_SMALL)) {
+
+ if(G.rt==2)
+ region_draw_azone_tria(az);
+ else if(G.rt==1)
+ region_draw_azone_tab(az);
+ else
+ region_draw_azone_icon(az);
+ }
+ }
}
az->do_draw= 0;
@@ -579,6 +659,96 @@ static void region_azone_icon(ScrArea *sa, AZone *az, ARegion *ar)
}
}
+#define AZONEPAD_TABW 18
+#define AZONEPAD_TABH 7
+
+/* region already made zero sized, in shape of edge */
+static void region_azone_tab(ScrArea *sa, AZone *az, ARegion *ar)
+{
+ AZone *azt;
+ int tot= 0, add;
+
+ for(azt= sa->actionzones.first; azt; azt= azt->next) {
+ if(azt->edge == az->edge) tot++;
+ }
+
+ switch(az->edge) {
+ case AE_TOP_TO_BOTTOMRIGHT:
+ if(ar->winrct.ymax == sa->totrct.ymin) add= 1; else add= 0;
+ az->x1= ar->winrct.xmax - 2*AZONEPAD_TABW;
+ az->y1= ar->winrct.ymax - add;
+ az->x2= ar->winrct.xmax - AZONEPAD_TABW;
+ az->y2= ar->winrct.ymax - add + AZONEPAD_TABH;
+ break;
+ case AE_BOTTOM_TO_TOPLEFT:
+ az->x1= ar->winrct.xmin + AZONEPAD_TABW;
+ az->y1= ar->winrct.ymin - AZONEPAD_TABH;
+ az->x2= ar->winrct.xmin + 2*AZONEPAD_TABW;
+ az->y2= ar->winrct.ymin;
+ break;
+ case AE_LEFT_TO_TOPRIGHT:
+ az->x1= ar->winrct.xmin + 1 - AZONEPAD_TABH;
+ az->y1= ar->winrct.ymax - 2*AZONEPAD_TABW;
+ az->x2= ar->winrct.xmin + 1;
+ az->y2= ar->winrct.ymax - AZONEPAD_TABW;
+ break;
+ case AE_RIGHT_TO_TOPLEFT:
+ az->x1= ar->winrct.xmax - 1;
+ az->y1= ar->winrct.ymax - 2*AZONEPAD_TABW;
+ az->x2= ar->winrct.xmax - 1 + AZONEPAD_TABH;
+ az->y2= ar->winrct.ymax - AZONEPAD_TABW;
+ break;
+ }
+ /* rect needed for mouse pointer test */
+ BLI_init_rcti(&az->rect, az->x1, az->x2, az->y1, az->y2);
+}
+
+#define AZONEPAD_TRIAW 16
+#define AZONEPAD_TRIAH 9
+
+
+/* region already made zero sized, in shape of edge */
+static void region_azone_tria(ScrArea *sa, AZone *az, ARegion *ar)
+{
+ AZone *azt;
+ int tot= 0, add;
+
+ for(azt= sa->actionzones.first; azt; azt= azt->next) {
+ if(azt->edge == az->edge) tot++;
+ }
+
+ switch(az->edge) {
+ case AE_TOP_TO_BOTTOMRIGHT:
+ if(ar->winrct.ymax == sa->totrct.ymin) add= 1; else add= 0;
+ az->x1= ar->winrct.xmax - 2*AZONEPAD_TRIAW;
+ az->y1= ar->winrct.ymax - add;
+ az->x2= ar->winrct.xmax - AZONEPAD_TRIAW;
+ az->y2= ar->winrct.ymax - add + AZONEPAD_TRIAH;
+ break;
+ case AE_BOTTOM_TO_TOPLEFT:
+ az->x1= ar->winrct.xmin + AZONEPAD_TRIAW;
+ az->y1= ar->winrct.ymin - AZONEPAD_TRIAH;
+ az->x2= ar->winrct.xmin + 2*AZONEPAD_TRIAW;
+ az->y2= ar->winrct.ymin;
+ break;
+ case AE_LEFT_TO_TOPRIGHT:
+ az->x1= ar->winrct.xmin + 1 - AZONEPAD_TRIAH;
+ az->y1= ar->winrct.ymax - 2*AZONEPAD_TRIAW;
+ az->x2= ar->winrct.xmin + 1;
+ az->y2= ar->winrct.ymax - AZONEPAD_TRIAW;
+ break;
+ case AE_RIGHT_TO_TOPLEFT:
+ az->x1= ar->winrct.xmax - 1;
+ az->y1= ar->winrct.ymax - 2*AZONEPAD_TRIAW;
+ az->x2= ar->winrct.xmax - 1 + AZONEPAD_TRIAH;
+ az->y2= ar->winrct.ymax - AZONEPAD_TRIAW;
+ break;
+ }
+ /* rect needed for mouse pointer test */
+ BLI_init_rcti(&az->rect, az->x1, az->x2, az->y1, az->y2);
+}
+
+
static void region_azone_initialize(ScrArea *sa, ARegion *ar, AZEdge edge)
{
AZone *az;
@@ -589,8 +759,13 @@ static void region_azone_initialize(ScrArea *sa, ARegion *ar, AZEdge edge)
az->ar= ar;
az->edge= edge;
- if (ar->flag & RGN_FLAG_HIDDEN) {
- region_azone_icon(sa, az, ar);
+ if (ar->flag & (RGN_FLAG_HIDDEN|RGN_FLAG_TOO_SMALL)) {
+ if(G.rt==2)
+ region_azone_tria(sa, az, ar);
+ else if(G.rt==1)
+ region_azone_tab(sa, az, ar);
+ else
+ region_azone_icon(sa, az, ar);
} else {
region_azone_edge(az, ar);
}
@@ -790,15 +965,6 @@ static void region_rect_recursive(ScrArea *sa, ARegion *ar, rcti *remainder, int
ar->winx= ar->winrct.xmax - ar->winrct.xmin + 1;
ar->winy= ar->winrct.ymax - ar->winrct.ymin + 1;
- /* restore test exception */
- if(ar->alignment & RGN_SPLIT_PREV) {
- if(ar->prev) {
- remainder= remainder_prev;
- ar->prev->winx= ar->prev->winrct.xmax - ar->prev->winrct.xmin + 1;
- ar->prev->winy= ar->prev->winrct.ymax - ar->prev->winrct.ymin + 1;
- }
- }
-
/* set winrect for azones */
if(ar->flag & (RGN_FLAG_HIDDEN|RGN_FLAG_TOO_SMALL)) {
ar->winrct= *remainder;
@@ -814,12 +980,22 @@ static void region_rect_recursive(ScrArea *sa, ARegion *ar, rcti *remainder, int
else /* prevent winrct to be valid */
ar->winrct.xmax= ar->winrct.xmin;
}
+
+ /* restore prev-split exception */
+ if(ar->alignment & RGN_SPLIT_PREV) {
+ if(ar->prev) {
+ remainder= remainder_prev;
+ ar->prev->winx= ar->prev->winrct.xmax - ar->prev->winrct.xmin + 1;
+ ar->prev->winy= ar->prev->winrct.ymax - ar->prev->winrct.ymin + 1;
+ }
+ }
+
/* in end, add azones, where appropriate */
if(ar->regiontype == RGN_TYPE_HEADER && ar->winy + 6 > sa->winy) {
/* The logic for this is: when the header takes up the full area,
* disallow hiding it to view the main window.
*
- * Without this, uou can drag down the file selectors header and hide it
+ * Without this, you can drag down the file selectors header and hide it
* by accident very easily (highly annoying!), the value 6 is arbitrary
* but accounts for small common rounding problems when scaling the UI,
* must be minimum '4' */
@@ -833,7 +1009,7 @@ static void region_rect_recursive(ScrArea *sa, ARegion *ar, rcti *remainder, int
static void area_calc_totrct(ScrArea *sa, int sizex, int sizey)
{
- short rt= CLAMPIS(G.rt, 0, 16);
+ short rt= 0; // CLAMPIS(G.rt, 0, 16);
if(sa->v1->vec.x>0) sa->totrct.xmin= sa->v1->vec.x+1+rt;
else sa->totrct.xmin= sa->v1->vec.x;
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 721ce823351..80a65d3224e 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -910,7 +910,7 @@ static void drawscredge_area(ScrArea *sa, int sizex, int sizey, int center)
short y2= sa->v3->vec.y;
short a, rt;
- rt= CLAMPIS(G.rt, 0, 16);
+ rt= 0; // CLAMPIS(G.rt, 0, 16);
if(center==0) {
cpack(0x505050);
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index 0210b0dd78d..e9ebe78da29 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -792,7 +792,9 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, const char
uiItemR(col, userptr, "frame_offset", 0, NULL, ICON_NONE);
col= uiLayoutColumn(split, 0);
- uiItemR(col, userptr, "fields_per_frame", 0, "Fields", ICON_NONE);
+ row= uiLayoutRow(col, 0);
+ uiLayoutSetActive(row, RNA_boolean_get(&imaptr, "use_fields"));
+ uiItemR(row, userptr, "fields_per_frame", 0, "Fields", ICON_NONE);
uiItemR(col, userptr, "use_auto_refresh", 0, NULL, ICON_NONE);
uiItemR(col, userptr, "use_cyclic", 0, NULL, ICON_NONE);
}
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index 71dd7b02e1c..a6a60035aa7 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -2004,19 +2004,16 @@ static int node_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceNode *snode= CTX_wm_space_node(C);
bNodeTree *ntree= snode->edittree;
- bNode *node, *newnode, *last;
+ bNode *node, *newnode, *lastnode;
+ bNodeLink *link, *newlink, *lastlink;
ED_preview_kill_jobs(C);
- last = ntree->nodes.last;
+ lastnode = ntree->nodes.last;
for(node= ntree->nodes.first; node; node= node->next) {
if(node->flag & SELECT) {
newnode = nodeCopyNode(ntree, node);
- /* deselect old node, select the copy instead */
- node->flag &= ~(NODE_SELECT|NODE_ACTIVE);
- newnode->flag |= NODE_SELECT;
-
if(newnode->id) {
/* simple id user adjustment, node internal functions dont touch this
* but operators and readfile.c do. */
@@ -2027,7 +2024,53 @@ static int node_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
}
/* make sure we don't copy new nodes again! */
- if (node==last)
+ if (node==lastnode)
+ break;
+ }
+
+ /* copy links between selected nodes
+ * NB: this depends on correct node->new_node and sock->new_sock pointers from above copy!
+ */
+ lastlink = ntree->links.last;
+ for (link=ntree->links.first; link; link=link->next) {
+ /* this creates new links between copied nodes,
+ * as well as input links from unselected (when fromnode==NULL) !
+ */
+ if (link->tonode && (link->tonode->flag & NODE_SELECT)) {
+ newlink = MEM_callocN(sizeof(bNodeLink), "bNodeLink");
+ newlink->flag = link->flag;
+ newlink->tonode = link->tonode->new_node;
+ newlink->tosock = link->tosock->new_sock;
+ if (link->fromnode && (link->fromnode->flag & NODE_SELECT)) {
+ newlink->fromnode = link->fromnode->new_node;
+ newlink->fromsock = link->fromsock->new_sock;
+ }
+ else {
+ /* input node not copied, this keeps the original input linked */
+ newlink->fromnode = link->fromnode;
+ newlink->fromsock = link->fromsock;
+ }
+
+ BLI_addtail(&ntree->links, newlink);
+ }
+
+ /* make sure we don't copy new links again! */
+ if (link==lastlink)
+ break;
+ }
+
+ /* deselect old nodes, select the copies instead */
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->flag & SELECT) {
+ /* has been set during copy above */
+ newnode = node->new_node;
+
+ node->flag &= ~(NODE_SELECT|NODE_ACTIVE);
+ newnode->flag |= NODE_SELECT;
+ }
+
+ /* make sure we don't copy new nodes again! */
+ if (node==lastnode)
break;
}
diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c
index 8d73da0063c..453bea0969b 100644
--- a/source/blender/editors/uvedit/uvedit_draw.c
+++ b/source/blender/editors/uvedit/uvedit_draw.c
@@ -474,7 +474,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
if(sima->flag & SI_DRAW_STRETCH) {
draw_uvs_stretch(sima, scene, em, activetf);
}
- else if(me->drawflag & ME_DRAWFACES) {
+ else if(!(sima->flag & SI_NO_DRAWFACES)) {
/* draw transparent faces */
UI_GetThemeColor4ubv(TH_FACE, col1);
UI_GetThemeColor4ubv(TH_FACE_SELECT, col2);
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 0d843dedbaa..3715dbe192c 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -80,7 +80,7 @@ GPUBufferPool *GPU_buffer_pool_new(void)
DEBUG_VBO("GPU_buffer_pool_new\n");
if( useVBOs < 0 ) {
- if( GL_ARB_vertex_buffer_object ) {
+ if( GLEW_ARB_vertex_buffer_object ) {
DEBUG_VBO( "Vertex Buffer Objects supported.\n" );
useVBOs = 1;
}
@@ -484,7 +484,7 @@ void *GPU_build_mesh_buffers(GHash *map, MVert *mvert, MFace *mface,
for(i = 0, tottri = 0; i < totface; ++i)
tottri += mface[face_indices[i]].v4 ? 2 : 1;
- if(GL_ARB_vertex_buffer_object && !(U.gameflags & USER_DISABLE_VBO))
+ if(GLEW_ARB_vertex_buffer_object && !(U.gameflags & USER_DISABLE_VBO))
glGenBuffersARB(1, &buffers->index_buf);
if(buffers->index_buf) {
@@ -615,7 +615,7 @@ void *GPU_build_grid_buffers(DMGridData **UNUSED(grids), int *UNUSED(grid_indice
totquad= (gridsize-1)*(gridsize-1)*totgrid;
/* Generate index buffer object */
- if(GL_ARB_vertex_buffer_object && !(U.gameflags & USER_DISABLE_VBO))
+ if(GLEW_ARB_vertex_buffer_object && !(U.gameflags & USER_DISABLE_VBO))
glGenBuffersARB(1, &buffers->index_buf);
if(buffers->index_buf) {
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 4ac712cf3c8..588ecfe3e37 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -754,7 +754,7 @@ enum FileSortTypeE {
#define SI_EDITTILE (1<<1)
#define SI_CLIP_UV (1<<2)
#define SI_DRAWTOOL (1<<3)
-#define SI_DEPRECATED1 (1<<4) /* stick UVs to others in the same location */
+#define SI_NO_DRAWFACES (1<<4)
#define SI_DRAWSHADOW (1<<5)
#define SI_SELACTFACE (1<<6) /* deprecated */
#define SI_DEPRECATED2 (1<<7)
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index e83161b8c62..d9fbdd7caf2 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -2839,7 +2839,7 @@ static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *pro
}
/* editable check */
- if(RNA_property_editable(&itemptr, iprop)) {
+ if(!set || RNA_property_editable(&itemptr, iprop)) {
if(a+itemlen > in.len) {
BKE_reportf(reports, RPT_ERROR, "Array length mismatch (got %d, expected more).", in.len);
err= 1;
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index 6638a9d76d3..3a6cebef178 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -32,6 +32,7 @@
#include "DNA_scene_types.h"
#include "RNA_define.h"
+#include "RNA_enum_types.h"
#include "rna_internal.h"
@@ -271,6 +272,12 @@ static void rna_def_render_engine(BlenderRNA *brna)
prop= RNA_def_string(func, "info", "", 0, "Info", "");
RNA_def_property_flag(prop, PROP_REQUIRED);
+ func= RNA_def_function(srna, "report", "RE_engine_report");
+ prop= RNA_def_enum_flag(func, "type", wm_report_items, 0, "Type", "");
+ RNA_def_property_flag(prop, PROP_REQUIRED);
+ prop= RNA_def_string(func, "message", "", 0, "Report Message", "");
+ RNA_def_property_flag(prop, PROP_REQUIRED);
+
/* registration */
RNA_define_verify_sdna(0);
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index cc6874a14aa..3e71a0e4811 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -990,7 +990,12 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_COORDFLOATS);
RNA_def_property_ui_text(prop, "Normalized Coordinates", "Display UV coordinates from 0.0 to 1.0 rather than in pixels");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
-
+
+ prop= RNA_def_property(srna, "show_faces", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SI_NO_DRAWFACES);
+ RNA_def_property_ui_text(prop, "Draw Faces", "Draw faces over the image");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
+
prop= RNA_def_property(srna, "cursor_location", PROP_FLOAT, PROP_XYZ);
RNA_def_property_array(prop, 2);
RNA_def_property_float_funcs(prop, "rna_SpaceImageEditor_cursor_location_get", "rna_SpaceImageEditor_cursor_location_set", NULL);
diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c
index 02845ecaab7..01f1b6fb2a7 100644
--- a/source/blender/modifiers/intern/MOD_displace.c
+++ b/source/blender/modifiers/intern/MOD_displace.c
@@ -172,6 +172,7 @@ static void displaceModifier_do(
MDeformVert *dvert = NULL;
int defgrp_index;
float (*tex_co)[3];
+ float weight= 1.0f; /* init value unused but some compilers may complain */
if(!dmd->texture) return;
if(dmd->strength == 0.0f) return;
@@ -189,17 +190,10 @@ static void displaceModifier_do(
for(i = 0; i < numVerts; ++i) {
TexResult texres;
float delta = 0, strength = dmd->strength;
- MDeformWeight *def_weight = NULL;
if(dvert) {
- int j;
- for(j = 0; j < dvert[i].totweight; ++j) {
- if(dvert[i].dw[j].def_nr == defgrp_index) {
- def_weight = &dvert[i].dw[j];
- break;
- }
- }
- if(!def_weight || def_weight->weight==0.0f) continue;
+ weight= defvert_find_weight(dvert + i, defgrp_index);
+ if(weight == 0.0f) continue;
}
texres.nor = NULL;
@@ -207,7 +201,7 @@ static void displaceModifier_do(
delta = texres.tin - dmd->midlevel;
- if(def_weight) strength *= def_weight->weight;
+ if(dvert) strength *= weight;
delta *= strength;
CLAMP(delta, -10000, 10000);
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 23f301249ba..d9ed83a00b2 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -218,7 +218,10 @@ void RE_TileProcessor(struct Render *re);
/* only RE_NewRender() needed, main Blender render calls */
void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, struct Object *camera_override, unsigned int lay, int frame, const short write_still);
-void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, struct Object *camera_override, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
+void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, struct Object *camera_override, unsigned int lay, int sfra, int efra, int tfra);
+
+/* error reporting */
+void RE_SetReports(struct Render *re, struct ReportList *reports);
/* main preview render call */
void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
@@ -242,7 +245,6 @@ void RE_stats_draw_cb (struct Render *re, void *handle, void (*f)(void *handle,
void RE_progress_cb (struct Render *re, void *handle, void (*f)(void *handle, float));
void RE_draw_lock_cb (struct Render *re, void *handle, void (*f)(void *handle, int));
void RE_test_break_cb (struct Render *re, void *handle, int (*f)(void *handle));
-void RE_error_cb (struct Render *re, void *handle, void (*f)(void *handle, const char *str));
/* should move to kernel once... still unsure on how/where */
float RE_filter_value(int type, float x);
@@ -264,7 +266,7 @@ void RE_zbuf_accumulate_vecblur(struct NodeBlurData *nbd, int xsize, int ysize,
#define RE_BAKE_ALPHA 11
#define RE_BAKE_EMIT 12
-void RE_Database_Baking(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, int type, struct Object *actob);
+void RE_Database_Baking(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, const int type, struct Object *actob);
void RE_DataBase_GetView(struct Render *re, float mat[][4]);
void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[][4]);
@@ -308,11 +310,12 @@ void RE_engine_end_result(RenderEngine *engine, struct RenderResult *result);
int RE_engine_test_break(RenderEngine *engine);
void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char *info);
+void RE_engine_report(RenderEngine *engine, int type, const char *msg);
void RE_engines_init(void);
void RE_engines_exit(void);
-int RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, void *erh, void (*error)(void *handle, const char *str));
+int RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, struct ReportList *reports);
#endif /* RE_PIPELINE_H */
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index b2535ebc9ea..13ca40bfd20 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -60,6 +60,7 @@ struct RenderBuckets;
struct ObjectInstanceRen;
struct RayObject;
struct RayFace;
+struct ReportList;
struct Main;
#define TABLEINITSIZE 1024
@@ -252,10 +253,9 @@ struct Render
int (*test_break)(void *handle);
void *tbh;
- void (*error)(void *handle, const char *str);
- void *erh;
-
RenderStats i;
+
+ struct ReportList *reports;
};
/* ------------------------------------------------------------------------- */
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index a4ac92d394c..2c9aa4dece5 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -5680,13 +5680,14 @@ void RE_Database_FromScene_Vectors(Render *re, Main *bmain, Scene *sce, unsigned
RE_BAKE_DISPLACEMENT:for baking, no lamps, only selected objects
RE_BAKE_SHADOW: for baking, only shadows, but all objects
*/
-void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay, int type, Object *actob)
+void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay, const int type, Object *actob)
{
Object *camera;
float mat[4][4];
float amb[3];
- int onlyselected, nolamps;
-
+ const short onlyselected= !ELEM3(type, RE_BAKE_LIGHT, RE_BAKE_ALL, RE_BAKE_SHADOW);
+ const short nolamps= ELEM3(type, RE_BAKE_NORMALS, RE_BAKE_TEXTURE, RE_BAKE_DISPLACEMENT);
+
re->main= bmain;
re->scene= scene;
re->lay= lay;
@@ -5736,7 +5737,15 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay,
unit_m4(mat);
RE_SetView(re, mat);
}
-
+ copy_m3_m4(re->imat, re->viewinv);
+
+ /* TODO: deep shadow maps + baking + strands */
+ /* strands use the window matrix and view size, there is to correct
+ * window matrix but at least avoids malloc and crash loop [#27807] */
+ unit_m4(re->winmat);
+ re->winx= re->winy= 256;
+ /* done setting dummy values */
+
init_render_world(re); /* do first, because of ambient. also requires re->osa set correct */
if(re->r.mode & R_RAYTRACE) {
init_render_qmcsampler(re);
@@ -5755,9 +5764,6 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay,
set_node_shader_lamp_loop(shade_material_loop);
/* MAKE RENDER DATA */
- nolamps= !ELEM3(type, RE_BAKE_LIGHT, RE_BAKE_ALL, RE_BAKE_SHADOW);
- onlyselected= ELEM3(type, RE_BAKE_NORMALS, RE_BAKE_TEXTURE, RE_BAKE_DISPLACEMENT);
-
database_init_objects(re, lay, nolamps, onlyselected, actob, 0);
set_material_lightgroups(re);
diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c
index cb08ae96bf7..6d264951204 100644
--- a/source/blender/render/intern/source/imagetexture.c
+++ b/source/blender/render/intern/source/imagetexture.c
@@ -76,7 +76,7 @@
extern struct Render R;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float maxy, TexResult *texres, int imaprepeat, int imapextend);
+static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float maxy, TexResult *texres, const short imaprepeat, const short imapextend);
/* *********** IMAGEWRAPPING ****************** */
@@ -115,6 +115,7 @@ int imagewrap(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, TexResult *texre
{
float fx, fy, val1, val2, val3;
int x, y, retval;
+ int xi, yi; /* original values */
texres->tin= texres->ta= texres->tr= texres->tg= texres->tb= 0.0f;
@@ -166,8 +167,8 @@ int imagewrap(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, TexResult *texre
}
}
- x = (int)floorf(fx*ibuf->x);
- y = (int)floorf(fy*ibuf->y);
+ x= xi= (int)floorf(fx*ibuf->x);
+ y= yi= (int)floorf(fy*ibuf->y);
if(tex->extend == TEX_CLIPCUBE) {
if(x<0 || y<0 || x>=ibuf->x || y>=ibuf->y || texvec[2]<-1.0f || texvec[2]>1.0f) {
@@ -209,10 +210,17 @@ int imagewrap(Tex *tex, Image *ima, ImBuf *ibuf, float *texvec, TexResult *texre
filterx = (0.5f * tex->filtersize) / ibuf->x;
filtery = (0.5f * tex->filtersize) / ibuf->y;
+ /* important that this value is wrapped [#27782]
+ * this applies the modifications made by the checks above,
+ * back to the floating point values */
+ fx -= (float)(xi - x) / (float)ibuf->x;
+ fy -= (float)(yi - y) / (float)ibuf->y;
+
boxsample(ibuf, fx-filterx, fy-filtery, fx+filterx, fy+filtery, texres, (tex->extend==TEX_REPEAT), (tex->extend==TEX_EXTEND));
}
- else /* no filtering */
+ else { /* no filtering */
ibuf_get_color(&texres->tr, ibuf, x, y);
+ }
if( (R.flag & R_SEC_FIELD) && (ibuf->flags & IB_fields) ) {
ibuf->rect-= (ibuf->x*ibuf->y);
@@ -524,15 +532,17 @@ static void boxsampleclip(struct ImBuf *ibuf, rctf *rf, TexResult *texres)
}
}
-static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float maxy, TexResult *texres, int imaprepeat, int imapextend)
+static void boxsample(ImBuf *ibuf, float minx, float miny, float maxx, float maxy, TexResult *texres, const short imaprepeat, const short imapextend)
{
/* Sample box, performs clip. minx etc are in range 0.0 - 1.0 .
- * Enlarge with antialiased edges of pixels.
- * If variable 'imaprepeat' has been set, the
- * clipped-away parts are sampled as well.
- */
+ * Enlarge with antialiased edges of pixels.
+ * If variable 'imaprepeat' has been set, the
+ * clipped-away parts are sampled as well.
+ */
/* note: actually minx etc isnt in the proper range... this due to filter size and offset vectors for bump */
/* note: talpha must be initialized */
+ /* note: even when 'imaprepeat' is set, this can only repeate once in any direction.
+ * the point which min/max is derived from is assumed to be wrapped */
TexResult texr;
rctf *rf, stack[8];
float opp, tot, alphaclip= 1.0;
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index b1c9820337c..1d4014aac3e 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -128,7 +128,7 @@ Render R;
/* ********* alloc and free ******** */
-static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, ReportList *reports, const char *name_override);
+static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, const char *name_override);
static volatile int g_break= 0;
static int thread_break(void *UNUSED(arg))
@@ -141,7 +141,6 @@ static void result_nothing(void *UNUSED(arg), RenderResult *UNUSED(rr)) {}
static void result_rcti_nothing(void *UNUSED(arg), RenderResult *UNUSED(rr), volatile struct rcti *UNUSED(rect)) {}
static void stats_nothing(void *UNUSED(arg), RenderStats *UNUSED(rs)) {}
static void float_nothing(void *UNUSED(arg), float UNUSED(val)) {}
-static void print_error(void *UNUSED(arg), const char *str) {printf("ERROR: %s\n", str);}
static int default_break(void *UNUSED(arg)) {return G.afbreek == 1;}
static void stats_background(void *UNUSED(arg), RenderStats *rs)
@@ -1190,13 +1189,12 @@ void RE_InitRenderCB(Render *re)
re->display_draw= result_rcti_nothing;
re->progress= float_nothing;
re->test_break= default_break;
- re->error= print_error;
if(G.background)
re->stats_draw= stats_background;
else
re->stats_draw= stats_nothing;
/* clear callback handles */
- re->dih= re->dch= re->ddh= re->sdh= re->prh= re->tbh= re->erh= NULL;
+ re->dih= re->dch= re->ddh= re->sdh= re->prh= re->tbh= NULL;
}
/* only call this while you know it will remove the link too */
@@ -1251,7 +1249,7 @@ void RE_InitState(Render *re, Render *source, RenderData *rd, SceneRenderLayer *
if(re->rectx < 2 || re->recty < 2 || (BKE_imtype_is_movie(rd->imtype) &&
(re->rectx < 16 || re->recty < 16) )) {
- re->error(re->erh, "Image too small");
+ BKE_report(re->reports, RPT_ERROR, "Image too small");
re->ok= 0;
return;
}
@@ -1417,11 +1415,6 @@ void RE_test_break_cb(Render *re, void *handle, int (*f)(void *handle))
re->test_break= f;
re->tbh= handle;
}
-void RE_error_cb(Render *re, void *handle, void (*f)(void *handle, const char *str))
-{
- re->error= f;
- re->erh= handle;
-}
/* ********* add object data (later) ******** */
@@ -2710,14 +2703,14 @@ static int check_valid_camera(Scene *scene, Object *camera_override)
return 1;
}
-int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, void (*error)(void *handle, const char *str))
+int RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports)
{
SceneRenderLayer *srl;
if(scene->r.mode & R_BORDER) {
if(scene->r.border.xmax <= scene->r.border.xmin ||
scene->r.border.ymax <= scene->r.border.ymin) {
- error(erh, "No border area selected.");
+ BKE_report(reports, RPT_ERROR, "No border area selected.");
return 0;
}
}
@@ -2728,13 +2721,13 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
scene_unique_exr_name(scene, str, 0);
if (BLI_is_writable(str)==0) {
- error(erh, "Can not save render buffers, check the temp default path");
+ BKE_report(reports, RPT_ERROR, "Can not save render buffers, check the temp default path");
return 0;
}
/* no fullsample and edge */
if((scene->r.scemode & R_FULL_SAMPLE) && (scene->r.mode & R_EDGE)) {
- error(erh, "Full Sample doesn't support Edge Enhance");
+ BKE_report(reports, RPT_ERROR, "Full Sample doesn't support Edge Enhance");
return 0;
}
@@ -2748,7 +2741,7 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
bNode *node;
if(ntree==NULL) {
- error(erh, "No Nodetree in Scene");
+ BKE_report(reports, RPT_ERROR, "No Nodetree in Scene");
return 0;
}
@@ -2757,13 +2750,13 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
break;
if(node==NULL) {
- error(erh, "No Render Output Node in Scene");
+ BKE_report(reports, RPT_ERROR, "No Render Output Node in Scene");
return 0;
}
if(scene->r.scemode & R_FULL_SAMPLE) {
if(composite_needs_render(scene, 0)==0) {
- error(erh, "Full Sample AA not supported without 3d rendering");
+ BKE_report(reports, RPT_ERROR, "Full Sample AA not supported without 3d rendering");
return 0;
}
}
@@ -2772,7 +2765,7 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
/* check valid camera, without camera render is OK (compo, seq) */
if(!check_valid_camera(scene, camera_override)) {
- error(erh, "No camera");
+ BKE_report(reports, RPT_ERROR, "No camera");
return 0;
}
@@ -2782,7 +2775,7 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
/* forbidden combinations */
if(scene->r.mode & R_PANORAMA) {
if(scene->r.mode & R_ORTHO) {
- error(erh, "No Ortho render possible for Panorama");
+ BKE_report(reports, RPT_ERROR, "No Ortho render possible for Panorama");
return 0;
}
}
@@ -2798,13 +2791,13 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, vo
if(!(srl->layflag & SCE_LAY_DISABLE))
break;
if(srl==NULL) {
- error(erh, "All RenderLayers are disabled");
+ BKE_report(reports, RPT_ERROR, "All RenderLayers are disabled");
return 0;
}
/* renderer */
if(!ELEM(scene->r.renderer, R_INTERN, R_YAFRAY)) {
- error(erh, "Unknown render engine set");
+ BKE_report(reports, RPT_ERROR, "Unknown render engine set");
return 0;
}
@@ -2906,6 +2899,11 @@ static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, Sc
return 1;
}
+void RE_SetReports(Render *re, ReportList *reports)
+{
+ re->reports= reports;
+}
+
/* general Blender frame render call */
void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, Object *camera_override, unsigned int lay, int frame, const short write_still)
{
@@ -2931,7 +2929,7 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *sr
BKE_makepicstring(name, scene->r.pic, scene->r.cfra, scene->r.imtype, scene->r.scemode & R_EXTENSION, FALSE);
/* reports only used for Movie */
- do_write_image_or_movie(re, scene, NULL, NULL, name);
+ do_write_image_or_movie(re, scene, NULL, name);
}
}
@@ -2942,7 +2940,7 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *sr
G.rendering= 0;
}
-static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, ReportList *reports, const char *name_override)
+static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, const char *name_override)
{
char name[FILE_MAX];
RenderResult rres;
@@ -2960,7 +2958,7 @@ static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, R
dofree = 1;
}
RE_ResultGet32(re, (unsigned int *)rres.rect32);
- ok= mh->append_movie(&re->r, scene->r.cfra, rres.rect32, rres.rectx, rres.recty, reports);
+ ok= mh->append_movie(&re->r, scene->r.cfra, rres.rect32, rres.rectx, rres.recty, re->reports);
if(dofree) {
MEM_freeN(rres.rect32);
}
@@ -3042,7 +3040,7 @@ static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, R
}
/* saves images to disk */
-void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_override, unsigned int lay, int sfra, int efra, int tfra, ReportList *reports)
+void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_override, unsigned int lay, int sfra, int efra, int tfra)
{
bMovieHandle *mh= BKE_get_movie_handle(scene->r.imtype);
int cfrao= scene->r.cfra;
@@ -3055,14 +3053,14 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
/* ugly global still... is to prevent renderwin events and signal subsurfs etc to make full resol */
/* is also set by caller renderwin.c */
G.rendering= 1;
-
+
if(BKE_imtype_is_movie(scene->r.imtype))
- if(!mh->start_movie(scene, &re->r, re->rectx, re->recty, reports))
+ if(!mh->start_movie(scene, &re->r, re->rectx, re->recty, re->reports))
G.afbreek= 1;
if (mh->get_next_frame) {
while (!(G.afbreek == 1)) {
- int nf = mh->get_next_frame(&re->r, reports);
+ int nf = mh->get_next_frame(&re->r, re->reports);
if (nf >= 0 && nf >= scene->r.sfra && nf <= scene->r.efra) {
scene->r.cfra = re->r.cfra = nf;
@@ -3071,7 +3069,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
do_render_all_options(re);
if(re->test_break(re->tbh) == 0) {
- if(!do_write_image_or_movie(re, scene, mh, reports, NULL))
+ if(!do_write_image_or_movie(re, scene, mh, NULL))
G.afbreek= 1;
}
@@ -3135,7 +3133,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
if(re->test_break(re->tbh) == 0) {
if(!G.afbreek)
- if(!do_write_image_or_movie(re, scene, mh, reports, NULL))
+ if(!do_write_image_or_movie(re, scene, mh, NULL))
G.afbreek= 1;
}
else
@@ -3343,6 +3341,11 @@ void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char
re->i.statstr= NULL;
}
+void RE_engine_report(RenderEngine *engine, int type, const char *msg)
+{
+ BKE_report(engine->re->reports, type, msg);
+}
+
/* loads in image into a result, size must match
* x/y offsets are only used on a partial copy when dimensions dont match */
void RE_layer_load_from_file(RenderLayer *layer, ReportList *reports, const char *filename, int x, int y)
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 83ef46d109c..ce3830b059c 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2449,6 +2449,16 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int U
else
event.type= MIDDLEMOUSE;
+ if(win->active==0) {
+ int cx, cy;
+
+ /* entering window, update mouse pos. (ghost sends win-activate *after* the mouseclick in window!) */
+ wm_get_cursor_position(win, &cx, &cy);
+
+ event.x= evt->x= cx;
+ event.y= evt->y= cy;
+ }
+
/* add to other window if event is there (not to both!) */
owin= wm_event_cursor_other_windows(wm, win, &event);
if(owin) {