forked from bartvdbraak/blender
ad-hoc test sys that can handle paint stuff. temporary.
This commit is contained in:
parent
ef7904f2c4
commit
1d68058f77
@ -261,6 +261,9 @@ struct bPoseChannel *CTX_data_active_pose_bone(const bContext *C);
|
|||||||
int CTX_data_selected_pose_bones(const bContext *C, ListBase *list);
|
int CTX_data_selected_pose_bones(const bContext *C, ListBase *list);
|
||||||
int CTX_data_visible_pose_bones(const bContext *C, ListBase *list);
|
int CTX_data_visible_pose_bones(const bContext *C, ListBase *list);
|
||||||
|
|
||||||
|
//stupid compiler flag isn't working
|
||||||
|
//remember to undef this later
|
||||||
|
#define EVENT_RECORDER
|
||||||
#ifdef EVENT_RECORDER
|
#ifdef EVENT_RECORDER
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
@ -268,6 +271,8 @@ int CTX_rec_events(bContext *C);
|
|||||||
FILE *CTX_rec_file(bContext *C);
|
FILE *CTX_rec_file(bContext *C);
|
||||||
int CTX_set_events_path(bContext *C, char *path);
|
int CTX_set_events_path(bContext *C, char *path);
|
||||||
int CTX_play_events(bContext *C, char **playpath);
|
int CTX_play_events(bContext *C, char **playpath);
|
||||||
|
int CTX_rec_events_set(bContext *C, int state);
|
||||||
|
double CTX_rec_lasttime(bContext *C, double newtime);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -112,6 +112,12 @@ void copy_dverts(struct MDeformVert *dst, struct MDeformVert *src, int totvert);
|
|||||||
void mesh_delete_material_index(struct Mesh *me, int index);
|
void mesh_delete_material_index(struct Mesh *me, int index);
|
||||||
void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth);
|
void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth);
|
||||||
|
|
||||||
|
/*used for unit testing; compares two meshes, checking only
|
||||||
|
differences we care about. should be usable with leaf's
|
||||||
|
testing framework I get RNA work done, will use hackish
|
||||||
|
testing code for now.*/
|
||||||
|
char *mesh_cmp(struct Mesh *me1, struct Mesh *me2, float thresh);
|
||||||
|
|
||||||
struct BoundBox *mesh_get_bb(struct Object *ob);
|
struct BoundBox *mesh_get_bb(struct Object *ob);
|
||||||
void mesh_get_texspace(struct Mesh *me, float *loc_r, float *rot_r, float *size_r);
|
void mesh_get_texspace(struct Mesh *me, float *loc_r, float *rot_r, float *size_r);
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
|
|
||||||
#include "BLI_listbase.h"
|
#include "BLI_listbase.h"
|
||||||
#include "BLI_string.h"
|
#include "BLI_string.h"
|
||||||
|
#include "PIL_time.h"
|
||||||
|
|
||||||
#include "BKE_context.h"
|
#include "BKE_context.h"
|
||||||
#include "BKE_main.h"
|
#include "BKE_main.h"
|
||||||
@ -84,6 +85,7 @@ struct bContext {
|
|||||||
#ifdef EVENT_RECORDER
|
#ifdef EVENT_RECORDER
|
||||||
int evtrec, evtplay;
|
int evtrec, evtplay;
|
||||||
char evtplaypath[300];
|
char evtplaypath[300];
|
||||||
|
double evtlasttime;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -111,6 +113,13 @@ int CTX_rec_events(bContext *C)
|
|||||||
return C->evtrec;
|
return C->evtrec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CTX_rec_events_set(bContext *C, int state)
|
||||||
|
{
|
||||||
|
C->evtrec = state;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
FILE *CTX_rec_file(bContext *C)
|
FILE *CTX_rec_file(bContext *C)
|
||||||
{
|
{
|
||||||
static FILE *f = NULL;
|
static FILE *f = NULL;
|
||||||
@ -119,15 +128,34 @@ FILE *CTX_rec_file(bContext *C)
|
|||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double CTX_rec_lasttime(bContext *C, double newtime)
|
||||||
|
{
|
||||||
|
double ret;
|
||||||
|
|
||||||
|
if (C->evtlasttime == 0.0) {
|
||||||
|
ret = newtime;
|
||||||
|
} else ret = C->evtlasttime;
|
||||||
|
|
||||||
|
C->evtlasttime = newtime;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int CTX_set_events_path(bContext *C, char *path)
|
int CTX_set_events_path(bContext *C, char *path)
|
||||||
{
|
{
|
||||||
if (!path)
|
if (!path)
|
||||||
C->evtplaypath[0] = 0;
|
C->evtplaypath[0] = 0;
|
||||||
|
else
|
||||||
|
strcpy(C->evtplaypath, path);
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern int erec_playing;
|
||||||
int CTX_play_events(bContext *C, char **playpath)
|
int CTX_play_events(bContext *C, char **playpath)
|
||||||
{
|
{
|
||||||
*playpath = C->evtplaypath[0] ? C->evtplaypath : NULL;
|
if (playpath)
|
||||||
|
*playpath = C->evtplaypath[0] ? C->evtplaypath : NULL;
|
||||||
|
|
||||||
return C->evtplaypath[0];
|
return C->evtplaypath[0];
|
||||||
}
|
}
|
||||||
|
@ -42,9 +42,11 @@
|
|||||||
#include "DNA_key_types.h"
|
#include "DNA_key_types.h"
|
||||||
#include "DNA_meshdata_types.h"
|
#include "DNA_meshdata_types.h"
|
||||||
#include "DNA_ipo_types.h"
|
#include "DNA_ipo_types.h"
|
||||||
|
#include "DNA_customdata_types.h"
|
||||||
|
|
||||||
#include "BKE_animsys.h"
|
#include "BKE_animsys.h"
|
||||||
#include "BKE_main.h"
|
#include "BKE_main.h"
|
||||||
|
#include "BKE_customdata.h"
|
||||||
#include "BKE_DerivedMesh.h"
|
#include "BKE_DerivedMesh.h"
|
||||||
#include "BKE_global.h"
|
#include "BKE_global.h"
|
||||||
#include "BKE_mesh.h"
|
#include "BKE_mesh.h"
|
||||||
@ -58,6 +60,7 @@
|
|||||||
#include "BKE_object.h"
|
#include "BKE_object.h"
|
||||||
#include "BKE_utildefines.h"
|
#include "BKE_utildefines.h"
|
||||||
#include "BKE_tessmesh.h"
|
#include "BKE_tessmesh.h"
|
||||||
|
#include "BLI_edgehash.h"
|
||||||
|
|
||||||
#include "BLI_blenlib.h"
|
#include "BLI_blenlib.h"
|
||||||
#include "BLI_editVert.h"
|
#include "BLI_editVert.h"
|
||||||
@ -68,6 +71,230 @@
|
|||||||
|
|
||||||
#include "bmesh.h"
|
#include "bmesh.h"
|
||||||
|
|
||||||
|
enum {
|
||||||
|
MESHCMP_DVERT_WEIGHTMISMATCH = 1,
|
||||||
|
MESHCMP_DVERT_GROUPMISMATCH,
|
||||||
|
MESHCMP_DVERT_TOTGROUPMISMATCH,
|
||||||
|
MESHCMP_LOOPCOLMISMATCH,
|
||||||
|
MESHCMP_LOOPUVMISMATCH,
|
||||||
|
MESHCMP_LOOPMISMATCH,
|
||||||
|
MESHCMP_POLYVERTMISMATCH,
|
||||||
|
MESHCMP_POLYMISMATCH,
|
||||||
|
MESHCMP_EDGEUNKNOWN,
|
||||||
|
MESHCMP_VERTCOMISMATCH,
|
||||||
|
MESHCMP_CDLAYERS_MISMATCH,
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *cmpcode_to_str(int code)
|
||||||
|
{
|
||||||
|
switch (code) {
|
||||||
|
case MESHCMP_DVERT_WEIGHTMISMATCH:
|
||||||
|
return "Vertex Weight Mismatch";
|
||||||
|
case MESHCMP_DVERT_GROUPMISMATCH:
|
||||||
|
return "Vertex Group Mismatch";
|
||||||
|
case MESHCMP_DVERT_TOTGROUPMISMATCH:
|
||||||
|
return "Vertex Doesn't Belong To Same Number Of Groups";
|
||||||
|
case MESHCMP_LOOPCOLMISMATCH:
|
||||||
|
return "Vertex Color Mismatch";
|
||||||
|
case MESHCMP_LOOPUVMISMATCH:
|
||||||
|
return "UV Mismatch";
|
||||||
|
case MESHCMP_LOOPMISMATCH:
|
||||||
|
return "Loop Mismatch";
|
||||||
|
case MESHCMP_POLYVERTMISMATCH:
|
||||||
|
return "Loop Vert Mismatch In Poly Test";
|
||||||
|
case MESHCMP_POLYMISMATCH:
|
||||||
|
return "Loop Vert Mismatch";
|
||||||
|
case MESHCMP_EDGEUNKNOWN:
|
||||||
|
return "Edge Mismatch";
|
||||||
|
case MESHCMP_VERTCOMISMATCH:
|
||||||
|
return "Vertex Coordinate Mismatch";
|
||||||
|
case MESHCMP_CDLAYERS_MISMATCH:
|
||||||
|
"CustomData Layer Count Mismatch";
|
||||||
|
default:
|
||||||
|
return "Mesh Comparison Code Unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*thresh is threshold for comparing vertices, uvs, vertex colors,
|
||||||
|
weights, etc.*/
|
||||||
|
int customdata_compare(CustomData *c1, CustomData *c2, Mesh *m1, Mesh *m2, float thresh)
|
||||||
|
{
|
||||||
|
CustomDataLayer *l1, *l2;
|
||||||
|
int i, i1=0, i2=0, tot, j;
|
||||||
|
|
||||||
|
for (i=0; i<c1->totlayer; i++) {
|
||||||
|
if (ELEM7(c1->layers[i].type, CD_MVERT, CD_MEDGE, CD_MPOLY,
|
||||||
|
CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT))
|
||||||
|
i1++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0; i<c2->totlayer; i++) {
|
||||||
|
if (ELEM7(c2->layers[i].type, CD_MVERT, CD_MEDGE, CD_MPOLY,
|
||||||
|
CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT))
|
||||||
|
i2++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i1 != i2)
|
||||||
|
return MESHCMP_CDLAYERS_MISMATCH;
|
||||||
|
|
||||||
|
l1 = c1->layers; l2 = c2->layers;
|
||||||
|
tot = i1;
|
||||||
|
i1 = 0; i2 = 0;
|
||||||
|
for (i=0; i < tot; i++) {
|
||||||
|
while (i1 < c1->totlayer && !ELEM7(l1->type, CD_MVERT, CD_MEDGE, CD_MPOLY,
|
||||||
|
CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT))
|
||||||
|
i1++, l1++;
|
||||||
|
|
||||||
|
while (i2 < c2->totlayer && !ELEM7(l2->type, CD_MVERT, CD_MEDGE, CD_MPOLY,
|
||||||
|
CD_MLOOPUV, CD_MLOOPCOL, CD_MTEXPOLY, CD_MDEFORMVERT))
|
||||||
|
i2++, l2++;
|
||||||
|
|
||||||
|
if (l1->type == CD_MVERT) {
|
||||||
|
MVert *v1 = l1->data;
|
||||||
|
MVert *v2 = l2->data;
|
||||||
|
int vtot = m1->totvert;
|
||||||
|
|
||||||
|
for (j=0; j<vtot; j++, v1++, v2++) {
|
||||||
|
if (len_v3v3(v1->co, v2->co) > thresh)
|
||||||
|
return MESHCMP_VERTCOMISMATCH;
|
||||||
|
/*I don't care about normals, let's just do coodinates*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*we're order-agnostic for edges here*/
|
||||||
|
if (l1->type == CD_MEDGE) {
|
||||||
|
MEdge *e1 = l1->data;
|
||||||
|
MEdge *e2 = l2->data;
|
||||||
|
EdgeHash *eh = BLI_edgehash_new();
|
||||||
|
int etot = m1->totedge;
|
||||||
|
|
||||||
|
for (j=0; j<etot; j++, e1++) {
|
||||||
|
BLI_edgehash_insert(eh, e1->v1, e1->v2, e1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j=0; j<etot; j++, e2++) {
|
||||||
|
if (!BLI_edgehash_lookup(eh, e2->v1, e2->v2))
|
||||||
|
return MESHCMP_EDGEUNKNOWN;
|
||||||
|
}
|
||||||
|
BLI_edgehash_free(eh, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (l1->type == CD_MPOLY) {
|
||||||
|
MPoly *p1 = l1->data;
|
||||||
|
MPoly *p2 = l2->data;
|
||||||
|
int ptot = m1->totpoly;
|
||||||
|
|
||||||
|
for (j=0; j<ptot; j++, p1++, p2++) {
|
||||||
|
MLoop *lp1, *lp2;
|
||||||
|
int k;
|
||||||
|
|
||||||
|
if (p1->totloop != p2->totloop)
|
||||||
|
return MESHCMP_POLYMISMATCH;
|
||||||
|
|
||||||
|
lp1 = m1->mloop + p1->loopstart;
|
||||||
|
lp2 = m2->mloop + p2->loopstart;
|
||||||
|
|
||||||
|
for (k=0; k<p1->totloop; k++, lp1++, lp2++) {
|
||||||
|
if (lp1->v != lp2->v)
|
||||||
|
return MESHCMP_POLYVERTMISMATCH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (l1->type == CD_MLOOP) {
|
||||||
|
MLoop *lp1 = l1->data;
|
||||||
|
MLoop *lp2 = l2->data;
|
||||||
|
int ltot = m1->totloop;
|
||||||
|
|
||||||
|
for (j=0; j<ltot; j++, lp1++, lp2++) {
|
||||||
|
if (lp1->v != lp2->v)
|
||||||
|
return MESHCMP_LOOPMISMATCH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (l1->type == CD_MLOOPUV) {
|
||||||
|
MLoopUV *lp1 = l1->data;
|
||||||
|
MLoopUV *lp2 = l2->data;
|
||||||
|
int ltot = m1->totloop;
|
||||||
|
|
||||||
|
for (j=0; j<ltot; j++, lp1++, lp2++) {
|
||||||
|
if (len_v2v2(lp1->uv, lp2->uv) > thresh)
|
||||||
|
return MESHCMP_LOOPUVMISMATCH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (l1->type == CD_MLOOPCOL) {
|
||||||
|
MLoopCol *lp1 = l1->data;
|
||||||
|
MLoopCol *lp2 = l2->data;
|
||||||
|
int ltot = m1->totloop;
|
||||||
|
|
||||||
|
for (j=0; j<ltot; j++, lp1++, lp2++) {
|
||||||
|
if (ABS(lp1->r - lp2->r) > thresh ||
|
||||||
|
ABS(lp1->g - lp2->g) > thresh ||
|
||||||
|
ABS(lp1->b - lp2->b) > thresh ||
|
||||||
|
ABS(lp1->a - lp2->a) > thresh)
|
||||||
|
{
|
||||||
|
return MESHCMP_LOOPCOLMISMATCH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (l1->type == CD_MDEFORMVERT) {
|
||||||
|
MDeformVert *dv1 = l1->data;
|
||||||
|
MDeformVert *dv2 = l2->data;
|
||||||
|
int dvtot = m1->totvert;
|
||||||
|
|
||||||
|
for (j=0; j<dvtot; j++, dv1++, dv2++) {
|
||||||
|
int k;
|
||||||
|
MDeformWeight *dw1 = dv1->dw, *dw2=dv2->dw;
|
||||||
|
|
||||||
|
if (dv1->totweight != dv2->totweight)
|
||||||
|
return MESHCMP_DVERT_TOTGROUPMISMATCH;
|
||||||
|
|
||||||
|
for (k=0; k<dv1->totweight; k++, dw1++, dw2++) {
|
||||||
|
if (dw1->def_nr != dw2->def_nr)
|
||||||
|
return MESHCMP_DVERT_GROUPMISMATCH;
|
||||||
|
if (ABS(dw1->weight - dw2->weight) > thresh)
|
||||||
|
return MESHCMP_DVERT_WEIGHTMISMATCH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*used for testing. returns an error string the two meshes don't match*/
|
||||||
|
char *mesh_cmp(Mesh *me1, Mesh *me2, float thresh)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
|
||||||
|
if (!me1 || !me2)
|
||||||
|
return "Requires two input meshes";
|
||||||
|
|
||||||
|
if (me1->totvert != me2->totvert)
|
||||||
|
return "Number of verts don't match";
|
||||||
|
|
||||||
|
if (me1->totedge != me2->totedge)
|
||||||
|
return "Number of edges don't match";
|
||||||
|
|
||||||
|
if (me1->totpoly != me2->totpoly)
|
||||||
|
return "Number of faces don't match";
|
||||||
|
|
||||||
|
if (me1->totloop !=me2->totloop)
|
||||||
|
return "Number of loops don't match";
|
||||||
|
|
||||||
|
if ((c = customdata_compare(&me1->vdata, &me2->vdata, me1, me2, thresh)))
|
||||||
|
return cmpcode_to_str(c);
|
||||||
|
|
||||||
|
if ((c = customdata_compare(&me1->edata, &me2->edata, me1, me2, thresh)))
|
||||||
|
return cmpcode_to_str(c);
|
||||||
|
|
||||||
|
if ((c = customdata_compare(&me1->ldata, &me2->ldata, me1, me2, thresh)))
|
||||||
|
return cmpcode_to_str(c);
|
||||||
|
|
||||||
|
if ((c = customdata_compare(&me1->pdata, &me2->pdata, me1, me2, thresh)))
|
||||||
|
return cmpcode_to_str(c);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void mesh_ensure_tesselation_customdata(Mesh *me)
|
static void mesh_ensure_tesselation_customdata(Mesh *me)
|
||||||
{
|
{
|
||||||
int tottex, totcol;
|
int tottex, totcol;
|
||||||
|
@ -182,6 +182,9 @@ void VIEW3D_OT_snap_cursor_to_grid(struct wmOperatorType *ot);
|
|||||||
void VIEW3D_OT_snap_cursor_to_center(struct wmOperatorType *ot);
|
void VIEW3D_OT_snap_cursor_to_center(struct wmOperatorType *ot);
|
||||||
void VIEW3D_OT_snap_cursor_to_selected(struct wmOperatorType *ot);
|
void VIEW3D_OT_snap_cursor_to_selected(struct wmOperatorType *ot);
|
||||||
void VIEW3D_OT_snap_cursor_to_active(struct wmOperatorType *ot);
|
void VIEW3D_OT_snap_cursor_to_active(struct wmOperatorType *ot);
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
void VIEW3D_OT_evtrec(struct wmOperatorType *ot);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* space_view3d.c */
|
/* space_view3d.c */
|
||||||
ARegion *view3d_has_buttons_region(ScrArea *sa);
|
ARegion *view3d_has_buttons_region(ScrArea *sa);
|
||||||
|
@ -54,6 +54,9 @@
|
|||||||
|
|
||||||
void view3d_operatortypes(void)
|
void view3d_operatortypes(void)
|
||||||
{
|
{
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
WM_operatortype_append(VIEW3D_OT_evtrec);
|
||||||
|
#endif
|
||||||
WM_operatortype_append(VIEW3D_OT_rotate);
|
WM_operatortype_append(VIEW3D_OT_rotate);
|
||||||
WM_operatortype_append(VIEW3D_OT_move);
|
WM_operatortype_append(VIEW3D_OT_move);
|
||||||
WM_operatortype_append(VIEW3D_OT_zoom);
|
WM_operatortype_append(VIEW3D_OT_zoom);
|
||||||
|
@ -303,3 +303,27 @@ void VIEW3D_OT_toolshelf(wmOperatorType *ot)
|
|||||||
/* flags */
|
/* flags */
|
||||||
ot->flag= 0;
|
ot->flag= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
static int view3d_evtrec(bContext *C, wmOperator *op)
|
||||||
|
{
|
||||||
|
|
||||||
|
CTX_rec_events_set(C, !CTX_rec_events(C));
|
||||||
|
|
||||||
|
return OPERATOR_FINISHED;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VIEW3D_OT_evtrec(wmOperatorType *ot)
|
||||||
|
{
|
||||||
|
ot->name= "Toggle Event Recorder";
|
||||||
|
ot->description= "Toggles event recorder";
|
||||||
|
ot->idname= "VIEW3D_OT_evtrec";
|
||||||
|
|
||||||
|
ot->exec= view3d_evtrec;
|
||||||
|
ot->poll= ED_operator_view3d_active;
|
||||||
|
|
||||||
|
/* flags */
|
||||||
|
ot->flag= 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -182,6 +182,7 @@ typedef struct wmWindow {
|
|||||||
|
|
||||||
ListBase subwindows; /* opengl stuff for sub windows, see notes in wm_subwindow.c */
|
ListBase subwindows; /* opengl stuff for sub windows, see notes in wm_subwindow.c */
|
||||||
ListBase gesture; /* gesture stuff */
|
ListBase gesture; /* gesture stuff */
|
||||||
|
double lasttime;
|
||||||
} wmWindow;
|
} wmWindow;
|
||||||
|
|
||||||
/* should be somthing like DNA_EXCLUDE
|
/* should be somthing like DNA_EXCLUDE
|
||||||
|
@ -413,7 +413,7 @@ static void rna_Mesh_uv_texture_clone_set(PointerRNA *ptr, PointerRNA value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return NULL;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rna_Mesh_uv_texture_stencil_set(PointerRNA *ptr, PointerRNA value)
|
static void rna_Mesh_uv_texture_stencil_set(PointerRNA *ptr, PointerRNA value)
|
||||||
@ -431,7 +431,7 @@ static void rna_Mesh_uv_texture_stencil_set(PointerRNA *ptr, PointerRNA value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return NULL;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rna_Mesh_active_uv_texture_index_get(PointerRNA *ptr)
|
static int rna_Mesh_active_uv_texture_index_get(PointerRNA *ptr)
|
||||||
|
@ -36,8 +36,15 @@
|
|||||||
#include "ED_mesh.h"
|
#include "ED_mesh.h"
|
||||||
|
|
||||||
#ifdef RNA_RUNTIME
|
#ifdef RNA_RUNTIME
|
||||||
|
char *rna_Mesh_unit_test_compare(struct Mesh *mesh, bContext *C, struct Mesh *mesh2)
|
||||||
|
{
|
||||||
|
char *ret = mesh_cmp(mesh, mesh2, FLT_EPSILON*60);
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
ret = "Same";
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
void RNA_api_mesh(StructRNA *srna)
|
void RNA_api_mesh(StructRNA *srna)
|
||||||
@ -56,6 +63,14 @@ void RNA_api_mesh(StructRNA *srna)
|
|||||||
func= RNA_def_function(srna, "update", "ED_mesh_update");
|
func= RNA_def_function(srna, "update", "ED_mesh_update");
|
||||||
RNA_def_boolean(func, "calc_edges", 0, "Calculate Edges", "Force recalculation of edges.");
|
RNA_def_boolean(func, "calc_edges", 0, "Calculate Edges", "Force recalculation of edges.");
|
||||||
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
|
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
|
||||||
|
|
||||||
|
func= RNA_def_function(srna, "unit_test_compare", "rna_Mesh_unit_test_compare");
|
||||||
|
parm= RNA_def_pointer(func, "mesh", "Mesh", "", "Mesh to compare to");
|
||||||
|
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
|
||||||
|
/* return value */
|
||||||
|
parm= RNA_def_string(func, "result", "nothing", 64, "Return value", "String description of result of comparison");
|
||||||
|
RNA_def_function_return(func, parm);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -343,7 +343,7 @@ typedef struct wmEvent {
|
|||||||
short customdatafree;
|
short customdatafree;
|
||||||
int pad2;
|
int pad2;
|
||||||
void *customdata; /* ascii, unicode, mouse coords, angles, vectors, dragdrop info */
|
void *customdata; /* ascii, unicode, mouse coords, angles, vectors, dragdrop info */
|
||||||
|
double delay;
|
||||||
} wmEvent;
|
} wmEvent;
|
||||||
|
|
||||||
/* ************** custom wmEvent data ************** */
|
/* ************** custom wmEvent data ************** */
|
||||||
|
@ -72,6 +72,10 @@
|
|||||||
#include "wm_event_types.h"
|
#include "wm_event_types.h"
|
||||||
#include "wm_draw.h"
|
#include "wm_draw.h"
|
||||||
|
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
int erec_playing = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ************ event management ************** */
|
/* ************ event management ************** */
|
||||||
|
|
||||||
void wm_event_add(wmWindow *win, wmEvent *event_to_add)
|
void wm_event_add(wmWindow *win, wmEvent *event_to_add)
|
||||||
@ -1586,7 +1590,7 @@ void wm_event_do_handlers(bContext *C)
|
|||||||
wmWindow *win;
|
wmWindow *win;
|
||||||
|
|
||||||
#ifdef EVENT_RECORDER
|
#ifdef EVENT_RECORDER
|
||||||
FILE *file = NULL;
|
static FILE *file = NULL;
|
||||||
char *fpath = NULL;
|
char *fpath = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -1626,43 +1630,82 @@ void wm_event_do_handlers(bContext *C)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef EVENT_RECORDER
|
#ifdef EVENT_RECORDER
|
||||||
if (CTX_play_events(C, &fpath) && fpath) {
|
if (CTX_play_events(C, &fpath) && fpath)
|
||||||
wmEvent evt;
|
{
|
||||||
|
wmEvent evt;
|
||||||
|
double nextdelay = 0.0;
|
||||||
|
|
||||||
file = fopen(fpath, "rb");
|
erec_playing = 1;
|
||||||
while (!feof(file)) {
|
|
||||||
char buf1[6];
|
if (!file)
|
||||||
fread(buf1, sizeof(*buf1), 1, file);
|
file= fopen(fpath, "rb");
|
||||||
buf1[5] = 0;
|
|
||||||
if (!strcasecmp(buf1, "event")) {
|
while (file && !feof(file)) {
|
||||||
fprintf(stderr, "EEK! bad event playback file!!");
|
char buf1[6];
|
||||||
|
fread(buf1, 5, 1, file);
|
||||||
|
buf1[5] = 0;
|
||||||
|
|
||||||
|
if (strcasecmp(buf1, "event")) {
|
||||||
|
if (!strcasecmp(buf1, "break"))
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
fread(&evt, sizeof(*event), 1, file);
|
fprintf(stderr, "EEK! bad event playback file!!");
|
||||||
|
break;
|
||||||
wm_event_add(win, &evt);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fread(&evt, sizeof(*event), 1, file);
|
||||||
|
|
||||||
|
/*add in artifical delay after button open events*/
|
||||||
|
if (!evt.customdata) {
|
||||||
|
evt.delay += nextdelay;
|
||||||
|
nextdelay = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (evt.type == EVT_BUT_OPEN)
|
||||||
|
nextdelay = 1.0;
|
||||||
|
|
||||||
|
/*don't do anything if theres customdata in the
|
||||||
|
event*/
|
||||||
|
if (evt.customdata)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
wm_event_add(win, &evt);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file && feof(file)) {
|
||||||
|
erec_playing = 0;
|
||||||
fclose(file);
|
fclose(file);
|
||||||
CTX_set_events_path(C, NULL);
|
CTX_set_events_path(C, NULL);
|
||||||
}
|
}
|
||||||
#endif
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (win->lasttime == 0.0)
|
||||||
|
win->lasttime = PIL_check_seconds_timer();
|
||||||
|
|
||||||
while( (event= win->queue.first) ) {
|
while( (event= win->queue.first) ) {
|
||||||
int action = WM_HANDLER_CONTINUE;
|
int action = WM_HANDLER_CONTINUE;
|
||||||
|
#if 1
|
||||||
|
/*used for hackish recorder playback*/
|
||||||
|
while (event->delay>0.0 && PIL_check_seconds_timer()
|
||||||
|
- win->lasttime < event->delay) ;
|
||||||
|
|
||||||
#ifdef EVENT_RECORDER
|
#endif
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
if (CTX_rec_events(C) && !CTX_play_events(C, NULL)) {
|
if (CTX_rec_events(C) && !CTX_play_events(C, NULL)) {
|
||||||
FILE *file = CTX_rec_file(C);
|
FILE *file = CTX_rec_file(C);
|
||||||
|
char tag[6] = "event";
|
||||||
|
double delay = PIL_check_seconds_timer();
|
||||||
|
|
||||||
|
delay -= CTX_rec_lasttime(C, delay);
|
||||||
|
event->delay = delay;
|
||||||
|
|
||||||
|
fwrite(tag, sizeof(tag)-1, 1, file);
|
||||||
fwrite(event, sizeof(*event), 1, file);
|
fwrite(event, sizeof(*event), 1, file);
|
||||||
fprintf(file, "event");
|
fflush(file);
|
||||||
fflush(event);
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
if((G.f & G_DEBUG) && event && !ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE))
|
if((G.f & G_DEBUG) && event && !ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE))
|
||||||
printf("pass on evt %d val %d\n", event->type, event->val);
|
printf("pass on evt %d val %d\n", event->type, event->val);
|
||||||
@ -1796,10 +1839,25 @@ void wm_event_do_handlers(bContext *C)
|
|||||||
BLI_remlink(&win->queue, event);
|
BLI_remlink(&win->queue, event);
|
||||||
wm_event_free(event);
|
wm_event_free(event);
|
||||||
|
|
||||||
|
win->lasttime = PIL_check_seconds_timer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
if (CTX_rec_events(C) && !CTX_play_events(C, NULL)) {
|
||||||
|
FILE *file = CTX_rec_file(C);
|
||||||
|
char tag[6] = "break";
|
||||||
|
|
||||||
|
fwrite(tag, 5, 1, file);
|
||||||
|
fflush(file);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* only add mousemove when queue was read entirely */
|
/* only add mousemove when queue was read entirely */
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
if(win->addmousemove && win->eventstate && !erec_playing) {
|
||||||
|
#else
|
||||||
if(win->addmousemove && win->eventstate) {
|
if(win->addmousemove && win->eventstate) {
|
||||||
|
#endif
|
||||||
wmEvent event= *(win->eventstate);
|
wmEvent event= *(win->eventstate);
|
||||||
event.type= MOUSEMOVE;
|
event.type= MOUSEMOVE;
|
||||||
event.prevx= event.x;
|
event.prevx= event.x;
|
||||||
@ -2198,7 +2256,11 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int t
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
/* mouse move */
|
/* mouse move */
|
||||||
case GHOST_kEventCursorMove: {
|
case GHOST_kEventCursorMove: {
|
||||||
if(win->active) {
|
#ifdef EVENT_RECORDER
|
||||||
|
if(win->active && !erec_playing) {
|
||||||
|
#else
|
||||||
|
if(win->active) {
|
||||||
|
#endif
|
||||||
GHOST_TEventCursorData *cd= customdata;
|
GHOST_TEventCursorData *cd= customdata;
|
||||||
wmEvent *lastevent= win->queue.last;
|
wmEvent *lastevent= win->queue.last;
|
||||||
|
|
||||||
@ -2246,6 +2308,10 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int t
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GHOST_kEventTrackpad: {
|
case GHOST_kEventTrackpad: {
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
if(wm->winactive && !erec_playing) {
|
||||||
|
#endif
|
||||||
|
|
||||||
GHOST_TEventTrackpadData * pd = customdata;
|
GHOST_TEventTrackpadData * pd = customdata;
|
||||||
switch (pd->subtype) {
|
switch (pd->subtype) {
|
||||||
case GHOST_kTrackpadEventMagnify:
|
case GHOST_kTrackpadEventMagnify:
|
||||||
@ -2259,6 +2325,7 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int t
|
|||||||
event.type= MOUSEPAN;
|
event.type= MOUSEPAN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__APPLE__) && defined(GHOST_COCOA)
|
#if defined(__APPLE__) && defined(GHOST_COCOA)
|
||||||
//Cocoa already uses coordinates with y=0 at bottom, and returns inwindow coordinates on mouse moved event
|
//Cocoa already uses coordinates with y=0 at bottom, and returns inwindow coordinates on mouse moved event
|
||||||
event.x= evt->x = pd->x;
|
event.x= evt->x = pd->x;
|
||||||
@ -2278,6 +2345,9 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int t
|
|||||||
update_tablet_data(win, &event);
|
update_tablet_data(win, &event);
|
||||||
wm_event_add(win, &event);
|
wm_event_add(win, &event);
|
||||||
break;
|
break;
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
/* mouse button */
|
/* mouse button */
|
||||||
case GHOST_kEventButtonDown:
|
case GHOST_kEventButtonDown:
|
||||||
@ -2285,6 +2355,11 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int t
|
|||||||
GHOST_TEventButtonData *bd= customdata;
|
GHOST_TEventButtonData *bd= customdata;
|
||||||
event.val= (type==GHOST_kEventButtonDown) ? KM_PRESS:KM_RELEASE; /* Note!, this starts as 0/1 but later is converted to KM_PRESS/KM_RELEASE by tweak */
|
event.val= (type==GHOST_kEventButtonDown) ? KM_PRESS:KM_RELEASE; /* Note!, this starts as 0/1 but later is converted to KM_PRESS/KM_RELEASE by tweak */
|
||||||
|
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
if (erec_playing)
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (bd->button == GHOST_kButtonMaskLeft)
|
if (bd->button == GHOST_kButtonMaskLeft)
|
||||||
event.type= LEFTMOUSE;
|
event.type= LEFTMOUSE;
|
||||||
else if (bd->button == GHOST_kButtonMaskRight)
|
else if (bd->button == GHOST_kButtonMaskRight)
|
||||||
@ -2324,6 +2399,11 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int t
|
|||||||
event.ascii= kd->ascii;
|
event.ascii= kd->ascii;
|
||||||
event.val= (type==GHOST_kEventKeyDown)?KM_PRESS:KM_RELEASE;
|
event.val= (type==GHOST_kEventKeyDown)?KM_PRESS:KM_RELEASE;
|
||||||
|
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
if (erec_playing)
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* exclude arrow keys, esc, etc from text input */
|
/* exclude arrow keys, esc, etc from text input */
|
||||||
if(type==GHOST_kEventKeyUp || (event.ascii<32 && event.ascii>0))
|
if(type==GHOST_kEventKeyUp || (event.ascii<32 && event.ascii>0))
|
||||||
event.ascii= '\0';
|
event.ascii= '\0';
|
||||||
@ -2375,6 +2455,10 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int t
|
|||||||
case GHOST_kEventWheel: {
|
case GHOST_kEventWheel: {
|
||||||
GHOST_TEventWheelData* wheelData = customdata;
|
GHOST_TEventWheelData* wheelData = customdata;
|
||||||
|
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
if (erec_playing)
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
if (wheelData->z > 0)
|
if (wheelData->z > 0)
|
||||||
event.type= WHEELUPMOUSE;
|
event.type= WHEELUPMOUSE;
|
||||||
else
|
else
|
||||||
|
@ -367,7 +367,7 @@ void wm_window_add_ghostwindows(wmWindowManager *wm)
|
|||||||
|
|
||||||
for(win= wm->windows.first; win; win= win->next) {
|
for(win= wm->windows.first; win; win= win->next) {
|
||||||
if(win->ghostwin==NULL) {
|
if(win->ghostwin==NULL) {
|
||||||
if(win->sizex==0) {
|
if(win->sizex==0 || prefsizx || prefsizy) {
|
||||||
win->posx= prefstax;
|
win->posx= prefstax;
|
||||||
win->posy= prefstay;
|
win->posy= prefstay;
|
||||||
win->sizex= prefsizx;
|
win->sizex= prefsizx;
|
||||||
@ -858,7 +858,9 @@ static int wm_window_timer(const bContext *C)
|
|||||||
|
|
||||||
void wm_window_process_events(const bContext *C)
|
void wm_window_process_events(const bContext *C)
|
||||||
{
|
{
|
||||||
int hasevent= GHOST_ProcessEvents(g_system, 0); /* 0 is no wait */
|
int hasevent= 0;
|
||||||
|
|
||||||
|
hasevent = GHOST_ProcessEvents(g_system, 0); /* 0 is no wait */
|
||||||
|
|
||||||
if(hasevent)
|
if(hasevent)
|
||||||
GHOST_DispatchEvents(g_system);
|
GHOST_DispatchEvents(g_system);
|
||||||
|
@ -236,7 +236,7 @@ static int print_help(int argc, char **argv, void *data)
|
|||||||
BLI_argsPrintArgDoc(ba, "--debug");
|
BLI_argsPrintArgDoc(ba, "--debug");
|
||||||
BLI_argsPrintArgDoc(ba, "--debug-fpe");
|
BLI_argsPrintArgDoc(ba, "--debug-fpe");
|
||||||
#ifdef EVENT_RECORDER
|
#ifdef EVENT_RECORDER
|
||||||
BLI_argsPrintArgDoc(ba, "--runmacro");
|
BLI_argsPrintArgDoc(ba, "--eventmacro");
|
||||||
#endif
|
#endif
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
@ -346,7 +346,7 @@ static int nocrashhandler(int argc, char **argv, void *data)
|
|||||||
{
|
{
|
||||||
no_handler = 1;
|
no_handler = 1;
|
||||||
|
|
||||||
return -1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -809,6 +809,8 @@ static int set_macro_playback(int argc, char **argv, void *data)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
CTX_set_events_path(C, argv[1]);
|
CTX_set_events_path(C, argv[1]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -996,11 +998,6 @@ void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
|
|||||||
|
|
||||||
/* end argument processing after -- */
|
/* end argument processing after -- */
|
||||||
BLI_argsAdd(ba, -1, "--", NULL, "\n\tEnds option processing, following arguments passed unchanged. Access via python's sys.argv", end_arguments, NULL);
|
BLI_argsAdd(ba, -1, "--", NULL, "\n\tEnds option processing, following arguments passed unchanged. Access via python's sys.argv", end_arguments, NULL);
|
||||||
BLI_argsAdd(ba, 1, "--no_crash_handler", NULL, "disable crash handler", nocrashhandler, NULL);
|
|
||||||
|
|
||||||
#ifdef EVENT_RECORDER
|
|
||||||
BLI_argsAdd(ba, 1, "--eventmacro", NULL, "<file>\n\tevent macro", set_macro_playback, NULL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* first pass: background mode, disable python and commands that exit after usage */
|
/* first pass: background mode, disable python and commands that exit after usage */
|
||||||
BLI_argsAdd(ba, 1, "-h", "--help", "\n\tPrint this help text and exit", print_help, ba);
|
BLI_argsAdd(ba, 1, "-h", "--help", "\n\tPrint this help text and exit", print_help, ba);
|
||||||
@ -1024,6 +1021,7 @@ void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
|
|||||||
BLI_argsAdd(ba, 2, "-w", "--window-border", "\n\tForce opening with borders (default)", with_borders, NULL);
|
BLI_argsAdd(ba, 2, "-w", "--window-border", "\n\tForce opening with borders (default)", with_borders, NULL);
|
||||||
BLI_argsAdd(ba, 2, "-W", "--window-borderless", "\n\tForce opening with without borders", without_borders, NULL);
|
BLI_argsAdd(ba, 2, "-W", "--window-borderless", "\n\tForce opening with without borders", without_borders, NULL);
|
||||||
BLI_argsAdd(ba, 2, "-R", NULL, "\n\tRegister .blend extension (windows only)", register_extension, ba);
|
BLI_argsAdd(ba, 2, "-R", NULL, "\n\tRegister .blend extension (windows only)", register_extension, ba);
|
||||||
|
BLI_argsAdd(ba, 2, "--no_crash_handler", NULL, "disable crash handler", nocrashhandler, NULL);
|
||||||
|
|
||||||
/* third pass: disabling things and forcing settings */
|
/* third pass: disabling things and forcing settings */
|
||||||
BLI_argsAddCase(ba, 3, "-nojoystick", 1, NULL, 0, "\n\tDisable joystick support", no_joystick, syshandle);
|
BLI_argsAddCase(ba, 3, "-nojoystick", 1, NULL, 0, "\n\tDisable joystick support", no_joystick, syshandle);
|
||||||
@ -1031,6 +1029,7 @@ void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
|
|||||||
BLI_argsAddCase(ba, 3, "-noaudio", 1, NULL, 0, "\n\tForce sound system to None", no_audio, NULL);
|
BLI_argsAddCase(ba, 3, "-noaudio", 1, NULL, 0, "\n\tForce sound system to None", no_audio, NULL);
|
||||||
BLI_argsAddCase(ba, 3, "-setaudio", 1, NULL, 0, "\n\tForce sound system to a specific device\n\tNULL SDL OPENAL JACK", set_audio, NULL);
|
BLI_argsAddCase(ba, 3, "-setaudio", 1, NULL, 0, "\n\tForce sound system to a specific device\n\tNULL SDL OPENAL JACK", set_audio, NULL);
|
||||||
|
|
||||||
|
|
||||||
/* fourth pass: processing arguments */
|
/* fourth pass: processing arguments */
|
||||||
BLI_argsAdd(ba, 4, "-g", NULL, game_doc, set_ge_parameters, syshandle);
|
BLI_argsAdd(ba, 4, "-g", NULL, game_doc, set_ge_parameters, syshandle);
|
||||||
BLI_argsAdd(ba, 4, "-f", "--render-frame", "<frame>\n\tRender frame <frame> and save it.\n\t+<frame> start frame relative, -<frame> end frame relative.", render_frame, C);
|
BLI_argsAdd(ba, 4, "-f", "--render-frame", "<frame>\n\tRender frame <frame> and save it.\n\t+<frame> start frame relative, -<frame> end frame relative.", render_frame, C);
|
||||||
@ -1049,6 +1048,10 @@ void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
|
|||||||
BLI_argsAdd(ba, 4, "-t", "--threads", "<threads>\n\tUse amount of <threads> for rendering in background\n\t[1-" QUOTE(BLENDER_MAX_THREADS) "], 0 for systems processor count.", set_threads, NULL);
|
BLI_argsAdd(ba, 4, "-t", "--threads", "<threads>\n\tUse amount of <threads> for rendering in background\n\t[1-" QUOTE(BLENDER_MAX_THREADS) "], 0 for systems processor count.", set_threads, NULL);
|
||||||
BLI_argsAdd(ba, 4, "-x", "--use-extension", "<bool>\n\tSet option to add the file extension to the end of the file", set_extension, C);
|
BLI_argsAdd(ba, 4, "-x", "--use-extension", "<bool>\n\tSet option to add the file extension to the end of the file", set_extension, C);
|
||||||
|
|
||||||
|
#ifdef EVENT_RECORDER
|
||||||
|
BLI_argsAdd(ba, 4, "--eventmacro", NULL, "<file>\n\tevent macro", set_macro_playback, C);
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
@ -1201,7 +1204,11 @@ int main(int argc, char **argv)
|
|||||||
if(WM_init_game(C))
|
if(WM_init_game(C))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if(!G.file_loaded)
|
#ifdef EVENT_RECORDER
|
||||||
|
else if(!G.file_loaded && !CTX_play_events(C, NULL))
|
||||||
|
#else
|
||||||
|
else if(!G.file_loaded)
|
||||||
|
#endif
|
||||||
WM_init_splash(C);
|
WM_init_splash(C);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user