From 9e7643aa7c25ce551bfe59905fbf56156e264824 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Sun, 4 Jan 2009 18:16:34 +0000 Subject: 2.5 / Cleanup - remove Verse support. This will be brought back in The Future (probably jiri + me) This means 5k lines less in blenkernel. - fix two small errors for global cleanup, now compiles properly with FFMPEG enabled too. --- source/Makefile | 12 - source/blender/blenkernel/BKE_DerivedMesh.h | 2 +- source/blender/blenkernel/BKE_global.h | 5 +- source/blender/blenkernel/BKE_image.h | 1 - source/blender/blenkernel/BKE_verse.h | 583 ------ source/blender/blenkernel/CMakeLists.txt | 9 - source/blender/blenkernel/SConscript | 7 - source/blender/blenkernel/intern/DerivedMesh.c | 606 ------ source/blender/blenkernel/intern/Makefile | 5 - source/blender/blenkernel/intern/image.c | 17 +- source/blender/blenkernel/intern/mesh.c | 52 +- source/blender/blenkernel/intern/object.c | 4 - .../blender/blenkernel/intern/verse_bitmap_node.c | 448 ----- .../blenkernel/intern/verse_geometry_node.c | 2098 -------------------- source/blender/blenkernel/intern/verse_method.c | 519 ----- source/blender/blenkernel/intern/verse_node.c | 747 ------- .../blender/blenkernel/intern/verse_object_node.c | 617 ------ source/blender/blenkernel/intern/verse_session.c | 478 ----- source/blender/blenkernel/intern/writeavi.c | 2 +- source/blender/blenkernel/intern/writeffmpeg.c | 2 +- source/blender/blenlib/BLI_editVert.h | 9 - source/blender/blenlib/BLI_storage_types.h | 3 - source/blender/blenlib/CMakeLists.txt | 5 - source/blender/blenlib/SConscript | 4 - source/blender/blenloader/CMakeLists.txt | 6 - source/blender/blenloader/SConscript | 7 +- source/blender/blenloader/intern/Makefile | 5 - source/blender/blenloader/intern/writefile.c | 25 - source/blender/editors/CMakeLists.txt | 9 - source/blender/editors/screen/CMakeLists.txt | 9 - source/blender/editors/space_outliner/outliner.c | 6 +- source/blender/editors/transform/transform.h | 7 - .../editors/transform/transform_conversions.c | 23 +- .../blender/editors/transform/transform_generics.c | 59 - source/blender/imbuf/CMakeLists.txt | 5 - source/blender/imbuf/SConscript | 4 - source/blender/makesdna/DNA_ID.h | 9 - source/blender/makesdna/DNA_image_types.h | 4 - source/blender/makesdna/DNA_mesh_types.h | 4 - source/blender/makesdna/DNA_object_types.h | 4 - source/blender/makesrna/intern/rna_image.c | 1 - source/blender/nodes/CMakeLists.txt | 9 - source/blender/nodes/SConscript | 7 - source/blender/python/CMakeLists.txt | 9 - source/blender/python/intern/Makefile | 10 - source/blender/windowmanager/CMakeLists.txt | 9 - source/blender/windowmanager/intern/Makefile | 9 - source/blender/windowmanager/intern/wm_init_exit.c | 3 - source/creator/CMakeLists.txt | 1 - source/nan_definitions.mk | 4 - source/nan_link.mk | 3 - 51 files changed, 28 insertions(+), 6458 deletions(-) delete mode 100644 source/blender/blenkernel/BKE_verse.h delete mode 100644 source/blender/blenkernel/intern/verse_bitmap_node.c delete mode 100644 source/blender/blenkernel/intern/verse_geometry_node.c delete mode 100644 source/blender/blenkernel/intern/verse_method.c delete mode 100644 source/blender/blenkernel/intern/verse_node.c delete mode 100644 source/blender/blenkernel/intern/verse_object_node.c delete mode 100644 source/blender/blenkernel/intern/verse_session.c (limited to 'source') diff --git a/source/Makefile b/source/Makefile index 85fbc364ce1..7f02ab5cb44 100644 --- a/source/Makefile +++ b/source/Makefile @@ -200,18 +200,6 @@ ifeq ($(WITH_FREETYPE2), true) endif endif -ifeq ($(WITH_VERSE), true) - ifeq ($(OS), windows) - ifeq ($(FREE_WINDOWS), true) - COMLIB += $(NAN_VERSE)/lib/libverse.a - else - COMLIB += $(NAN_VERSE)/lib/verse.lib - endif - else - COMLIB += $(NAN_VERSE)/lib/libverse.a - endif -endif - ifeq ($(OS), irix) COMLIB += $(NAN_SDL)/lib/libSDL.a endif diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index 60d7c09c7a3..3e03ac3fb9f 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -83,7 +83,7 @@ struct DerivedMesh { /* copy a single vert/edge/face from the derived mesh into * *{vert/edge/face}_r. note that the current implementation * of this function can be quite slow, iterating over all - * elements (editmesh, verse mesh) + * elements (editmesh) */ void (*getVert)(DerivedMesh *dm, int index, struct MVert *vert_r); void (*getEdge)(DerivedMesh *dm, int index, struct MEdge *edge_r); diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h index 99ce091621e..1803e9ff7db 100644 --- a/source/blender/blenkernel/BKE_global.h +++ b/source/blender/blenkernel/BKE_global.h @@ -152,10 +152,7 @@ typedef struct Global { #define G_DRAW_EDGEANG (1 << 24) /* #define G_RECORDKEYS (1 << 25) also removed */ -/*#ifdef WITH_VERSE*/ -#define G_VERSE_CONNECTED (1 << 26) -#define G_DRAW_VERSE_DEBUG (1 << 27) -/*#endif*/ + #define G_DRAWSHARP (1 << 28) /* draw edges with the sharp flag */ #define G_SCULPTMODE (1 << 29) #define G_PARTICLEEDIT (1 << 30) diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h index b0cf58d8216..d1bcd63c936 100644 --- a/source/blender/blenkernel/BKE_image.h +++ b/source/blender/blenkernel/BKE_image.h @@ -82,7 +82,6 @@ struct RenderResult; #define IMA_TYPE_MULTILAYER 1 /* generated */ #define IMA_TYPE_UV_TEST 2 -#define IMA_TYPE_VERSE 3 /* viewers */ #define IMA_TYPE_R_RESULT 4 #define IMA_TYPE_COMPOSITE 5 diff --git a/source/blender/blenkernel/BKE_verse.h b/source/blender/blenkernel/BKE_verse.h deleted file mode 100644 index e67696dc62a..00000000000 --- a/source/blender/blenkernel/BKE_verse.h +++ /dev/null @@ -1,583 +0,0 @@ -/** - * $Id$ - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Contributor(s): Jiri Hnidek. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/* #define WITH_VERSE */ - -#ifndef BKE_VERSE_H -#define BKE_VERSE_H - -#include "DNA_listBase.h" -#include "BLI_dynamiclist.h" - -#include "verse.h" -#include "verse_ms.h" - -struct VNode; -struct VerseEdge; - -/* - * Verse Edge Hash (similar to edit edge hash) - */ -#define VEDHASHSIZE (512*512) -#define VEDHASH(a, b) ((a1 is 3D bitmap */ - /* blender internals */ - uint16 t_width; /* = (width/VN_B_TILE_SIZE + 1)*VN_B_TILE_SIZE */ - uint16 t_height; /* = (height/VN_B_TILE_SIZE + 1)*VN_B_TILE_SIZE */ - void *image; /* pointer at image */ - /* client dependent methods */ - void (*post_bitmap_dimension_set)(struct VNode *vnode); - void (*post_bitmap_layer_create)(struct VBitmapLayer *vblayer); - void (*post_bitmap_layer_destroy)(struct VBitmapLayer *vblayer); - void (*post_bitmap_tile_set)(struct VBitmapLayer *vblayer, unsigned int xs, unsigned int ys); -}VBitmapData; - -/* - * data of geometry node - */ -typedef struct VGeomData { - struct DynamicList layers; /* dynamic list with access array of Layers */ - struct VLink *vlink; /* pointer at VerseLink connecting object node and geom node */ - struct ListBase queue; /* queue of our layers waiting for receiving from verse server */ - void *mesh; /* pointer at Mesh (object node) */ - void *editmesh; /* pointer at EditMesh (edit mode) */ - struct HashVerseEdge *hash; /* verse edge hash */ - struct ListBase edges; /* list of fake verse edges */ - /* client dependent methods */ - void (*post_vertex_create)(struct VerseVert *vvert); - void (*post_vertex_set_xyz)(struct VerseVert *vvert); - void (*post_vertex_delete)(struct VerseVert *vvert); - void (*post_vertex_free_constraint)(struct VerseVert *vvert); - void (*post_polygon_create)(struct VerseFace *vface); - void (*post_polygon_set_corner)(struct VerseFace *vface); - void (*post_polygon_delete)(struct VerseFace *vface); - void (*post_polygon_free_constraint)(struct VerseFace *vface); - void (*post_geometry_free_constraint)(struct VNode *vnode); - void (*post_polygon_set_uint8)(struct VerseFace *vface); -} VGeomData; - -/* - * data of object node - */ -typedef struct VObjectData { - struct DynamicList links; /* dynamic list with access array of links between other nodes */ - struct ListBase queue; /* queue of links waiting for sending and receiving from verse server */ - float pos[3]; /* position of object VerseNode */ - float quat[4]; /* rotation of object VerseNode stored in quat */ - float scale[3]; /* scale of object VerseNode */ - void *object; /* pointer at object */ - short flag; /* flag: POS_RECEIVE_READY, ROT_RECEIVE_READY. SCALE_RECEIVE_READY */ - /* client dependent methods */ -/* void (*post_transform)(struct VNode *vnode);*/ - void (*post_transform_pos)(struct VNode *vnode); - void (*post_transform_rot)(struct VNode *vnode); - void (*post_transform_scale)(struct VNode *vnode); - void (*post_object_free_constraint)(struct VNode *vnode); -} VObjectData; - -/* - * Verse Tag - */ -typedef struct VTag { - struct VTag *next, *prev; - /* verse data*/ - struct VTagGroup *vtaggroup; /* pointer at Verse Tag Group */ - uint16 id; /* id of this tag */ - char *name; /* name of this tag*/ - VNTagType type; /* type: VN_TAG_BOOLEAN, VN_TAG_UINT32, VN_TAG_REAL64, VN_TAG_REAL64_VEC3, - VN_TAG_LINK, VN_TAG_ANIMATION, VN_TAG_BLOB */ - VNTag *tag; /* pointer at value (enum: vboolean, vuint32, vreal64, vstring, - vreal64_vec3, vlink, vanimation, vblob)*/ - /* blender internals */ - void *value; /* pointer at blender value */ -} VTag; - -/* - * Verse Tag Group (verse tags are grouped in tag groups) - */ -typedef struct VTagGroup { - struct VTagGroup *next, *prev; - /* verse data*/ - struct VNode *vnode; /* pointer at Verse Node */ - uint16 id; /* id of this tag group */ - char *name; /* name of this tag group */ - /* blender internals */ - struct DynamicList tags; /* dynamic list with access array containing tags */ - struct ListBase queue; /* list of tags waiting for receiving from verse server */ - /* client dependent methods */ - void (*post_tag_change)(struct VTag *vatg); - void (*post_taggroup_create)(struct VTagGroup *vtaggroup); -} VTagGroup; - - /* - * Verse Method Group - */ -typedef struct VMethodGroup -{ - struct VMethodGroup *next, *prev; - uint16 group_id; - char name[16]; - struct ListBase methods; -} VMethodGroup; - -/* - * Verse Method - */ -typedef struct VMethod -{ - struct VMethod *next, *prev; - uint16 id; - char name[500]; - uint8 param_count; - VNOParamType *param_type; - char **param_name; -} VMethod; - -/* - * Verse Node - */ -typedef struct VNode { - struct VNode *next, *prev; - /* verse data*/ - struct VerseSession *session; /* session pointer */ - VNodeID id; /* node id */ - VNodeID owner_id; /* owner's id of this node */ - char *name; /* name of this node */ - uint32 type; /* type of node (V_NT_OBJECT, V_NT_GEOMETRY, V_NT_BITMAP) */ - /* blender internals */ - char flag; /* flags: NODE_SENT, NODE_RECEIVED, NODE_DELTED, NODE_OBSOLETE */ - struct DynamicList taggroups; /* dynamic list with access array of taggroups */ - struct ListBase methodgroups; /* method groups */ - struct ListBase queue; /* list of taggroups waiting for receiving from verse server */ - void *data; /* generic pointer at some data (VObjectData, VGeomData, ...) */ - int counter; /* counter of verse link pointing at this vnode (vlink->target) */ - /* client dependent methods */ - void (*post_node_create)(struct VNode *vnode); - void (*post_node_destroy)(struct VNode *vnode); - void (*post_node_name_set)(struct VNode *vnode); -#ifdef VERSECHAT - /* verse chat */ - int chat_flag; /* CHAT_LOGGED, CHAT_NOTLOGGED */ -#endif -} VNode; - - -/* - * Verse Session: verse client can be connected to several verse servers - * it is neccessary to store some information about each session - */ -typedef struct VerseSession { - struct VerseSession *next, *prev; - /* verse data */ - VSession *vsession; /* pointer at VSeesion (verse.h) */ - uint32 avatar; /* id of avatar */ - char *address; /* string containg IP/domain name of verse server and number of port */ - void *connection; /* no clue */ - uint8 *host_id; /* no clue */ - /* blender internals */ - short flag; /* flag: VERSE_CONNECTING, VERSE_CONNECTED */ - DynamicList nodes; /* list of verse nodes */ - ListBase queue; /* list of nodes waiting for sending to verse server */ - unsigned int counter; /* count of events, when connection wasn't accepted */ - /* client dependent methods */ - void (*post_connect_accept)(struct VerseSession *session); - void (*post_connect_terminated)(struct VerseSession *session); - void (*post_connect_update)(struct VerseSession *session); -} VerseSession; - -typedef struct VerseServer { - struct VerseServer *next, *prev; - char *name; /* human-readable server name */ - char *ip; /* string containing IP/domain name of verse server and number of port */ - short flag; /* flag: VERSE_CONNECTING, VERSE_CONNECTED */ - struct VerseSession *session; /* pointer to related session */ -} VerseServer; -/* - * list of post callback functions - */ -typedef struct PostCallbackFunction { - void (*function)(void *arg); - void *param; -} PostCallbackFunction; - -/* VerseSession->flag */ -#define VERSE_CONNECTING 1 -#define VERSE_CONNECTED 2 -#define VERSE_AUTOSUBSCRIBE 4 - -/* max VerseSession->counter value */ -#define MAX_UNCONNECTED_EVENTS 100 - -/* VNode flags */ -#define NODE_SENT 1 -#define NODE_RECEIVED 2 -#define NODE_DELTED 4 -#define NODE_OBSOLETE 8 - -#ifdef VERSECHAT -#define CHAT_NOTLOGGED 0 -#define CHAT_LOGGED 1 -#endif - -/* VLayer flags */ -#define LAYER_SENT 1 -#define LAYER_RECEIVED 2 -#define LAYER_DELETED 4 -#define LAYER_OBSOLETE 8 - -/* VLink->flag */ -#define LINK_SEND_READY 1 - -/* VObjectData->flag */ -#define POS_RECEIVE_READY 1 -#define ROT_RECEIVE_READY 2 -#define SCALE_RECEIVE_READY 4 -#define POS_SEND_READY 8 -#define ROT_SEND_READY 16 -#define SCALE_SEND_READY 32 - -/* VLayer->content */ -#define VERTEX_LAYER 0 -#define POLYGON_LAYER 1 - -/* VerseVert->flag */ -#define VERT_DELETED 1 /* vertex delete command was received from verse server */ -#define VERT_RECEIVED 2 /* VerseVert was received from verse server (is not in sending queue) */ -#define VERT_LOCKED 4 /* VerseVert is ready to send local position to verse server */ -#define VERT_POS_OBSOLETE 8 /* position of vertex was changed during sending to verse server */ -#define VERT_OBSOLETE 16 /* vertex delete command was sent to verse server; it means, that - * no information related to this vertex shoudln't be sent to verse - * until verse vertex is completely deleted ... then this vertex id - * can be reused again for new vertex */ - -/* VerseFace->flag */ -#define FACE_SEND_READY 1 /* VerseFace is ready for sending to verse server */ -#define FACE_RECEIVED 2 /* VerseFace was received from verse server */ -#define FACE_SENT 4 /* VerseFace was sent to verse server and we expect receiving from verse server */ -#define FACE_DELETED 8 /* delete command was sent to verse server */ -#define FACE_CHANGED 16 /* VerseFace was only changed not created */ -#define FACE_OBSOLETE 32 /* VerseFace was changed during sending to verse server */ - -/* Queue type */ -#define VERSE_NODE 1 -#define VERSE_LINK 2 -#define VERSE_LAYER 3 -#define VERSE_VERT 4 -#define VERSE_FACE 5 - -#define VERSE_TAG 6 -#define VERSE_TAG_GROUP 7 - -#define VERSE_VERT_UINT32 8 -#define VERSE_VERT_REAL32 9 -#define VERSE_VERT_VEC_REAL32 10 - -#define VERSE_FACE_UINT8 11 -#define VERSE_FACE_UINT32 12 -#define VERSE_FACE_REAL32 13 -#define VERSE_FACE_QUAT_UINT32 14 -#define VERSE_FACE_QUAT_REAL32 15 - -/* Verse Bitmap Layer flags */ -#define VBLAYER_SUBSCRIBED 1 - -/* function prototypes */ - -/* functions from verse_session.c */ -void set_verse_session_callbacks(void); -struct VerseSession *versesession_from_vsession(VSession *vsession); -struct VerseSession *current_verse_session(void); -struct VerseSession *create_verse_session(const char *name, const char *pass, const char *address, uint8 *expected_key); -void free_verse_session(struct VerseSession *session); -void b_verse_update(void); -void b_verse_ms_get(void); -void b_verse_connect(char *address); -void end_verse_session(struct VerseSession *session); -void end_all_verse_sessions(void); - -/* functions from verse_node.c */ -void send_verse_tag(struct VTag *vtag); -void send_verse_taggroup(struct VTagGroup *vtaggroup); -void send_verse_node(struct VNode *vnode); -void free_verse_node_data(struct VNode *vnode); -void free_verse_node(struct VNode *vnode); -struct VNode* lookup_vnode(VerseSession *session, VNodeID node_id); -struct VNode* create_verse_node(VerseSession *session, VNodeID node_id, uint8 type, VNodeID owner_id); -void set_node_callbacks(void); - -/* functions from verse_object_node.c */ -struct VLink *find_unsent_parent_vlink(struct VerseSession *session, struct VNode *vnode); -struct VLink *find_unsent_child_vlink(struct VerseSession *session, struct VNode *vnode); -struct VLink *create_verse_link(VerseSession *session, struct VNode *source, struct VNode *target, uint16 link_id, uint32 target_id, const char *label); -void send_verse_object_position(struct VNode *vnode); -void send_verse_object_rotation(struct VNode *vnode); -void send_verse_object_scale(struct VNode *vnode); -void send_verse_link(struct VLink *vlink); - -void free_object_data(struct VNode *vnode); -void set_object_callbacks(void); -struct VObjectData *create_object_data(void); - - -/* functions from verse_method.c */ -void free_verse_methodgroup(VMethodGroup *vmg); -#ifdef VERSECHAT -void send_say(const char *chan, const char *utter); -void send_login(struct VNode *vnode); -void send_logout(struct VNode *vnode); -void send_join(struct VNode *vnode, const char *chan); -void send_leave(struct VNode *vnode, const char *chan); -#endif -void set_method_callbacks(void); - -/* functions from verse_geometry_node.c */ -struct VerseFace* create_verse_face(struct VLayer *vlayer, uint32 polygon_id, uint32 v0, uint32 v1, uint32 v2, uint32 v3); -struct VerseVert* create_verse_vertex(struct VLayer *vlayer, uint32 vertex_id, real32 x, real32 y, real32 z); -struct VLayer *create_verse_layer(struct VNode *vnode, VLayerID layer_id, const char *name, VNGLayerType type, uint32 def_integer, real64 def_real); -struct VGeomData *create_geometry_data(void); - -void send_verse_layer(struct VLayer *vlayer); - -void send_verse_face_corner_quat_real32(struct quat_real32_item *item, short type); -void send_verse_face_corner_quat_uint32(struct quat_uint32_item *item, short type); -void send_verse_face_real32(struct real32_item *item, short type); -void send_verse_face_uint32(struct uint32_item *item, short type); -void send_verse_face_uint8(struct uint8_item *item, short type); - -void send_verse_vert_vec_real32(struct vec_real32_item *item, short type); -void send_verse_vert_real32(struct real32_item *item, short type); -void send_verse_vert_uint32(struct uint32_item *item, short type); - -void send_verse_vertex_delete(struct VerseVert *vvert); -void send_verse_vertex(struct VerseVert *vvert); -void send_verse_face_delete(struct VerseFace *vface); - -void destroy_geometry(struct VNode *vnode); - -struct VLayer* find_verse_layer_type(struct VGeomData *geom, short content); -void add_item_to_send_queue(struct ListBase *lb, void *item, short type); -void free_geom_data(struct VNode *vnode); -void set_geometry_callbacks(void); - -/* functions prototypes from verse_bitmap.c */ -void set_bitmap_callbacks(void); -void free_bitmap_layer_data(struct VBitmapLayer *vblayer); -struct VBitmapLayer *create_bitmap_layer(struct VNode *vnode, VLayerID layer_id, const char *name, VNBLayerType type); -void free_bitmap_node_data(struct VNode *vnode); -struct VBitmapData *create_bitmap_data(void); - -#endif diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index 0680827c548..8f11928e63f 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -37,11 +37,6 @@ SET(INC ${ZLIB_INC} ) -IF(WITH_VERSE) - ADD_DEFINITIONS(-DWITH_VERSE) - SET(INC ${INC} ${VERSE_INC}) -ENDIF(WITH_VERSE) - IF(WITH_OPENEXR) ADD_DEFINITIONS(-DWITH_OPENEXR) ENDIF(WITH_OPENEXR) @@ -72,10 +67,6 @@ ENDIF(WITH_PYTHON) BLENDERLIB(bf_blenkernel "${SRC}" "${INC}") -IF(WITH_VERSE) - ADD_DEPENDENCIES(bf_blenkernel mkprot verse) -ENDIF(WITH_VERSE) - IF(WITH_INTERNATIONAL) ADD_DEFINITIONS(-DWITH_FREETYPE2) ENDIF(WITH_INTERNATIONAL) diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript index 5d9ce532d89..9fef30381a8 100644 --- a/source/blender/blenkernel/SConscript +++ b/source/blender/blenkernel/SConscript @@ -31,13 +31,6 @@ if env['WITH_BF_SDL']: if env['WITH_BF_INTERNATIONAL']: defs += ' WITH_FREETYPE2' - -if env['WITH_BF_VERSE']: - defs += ' WITH_VERSE' - incs += ' ' + env['BF_VERSE_INCLUDE'] - -if env['WITH_BF_VERSE']: - defs += ' WITH_VERSE' if env['WITH_BF_OPENEXR']: defs += ' WITH_OPENEXR' diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index 2aeef91538c..f056d1fa61b 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -80,10 +80,6 @@ #include "BLO_sys_types.h" // for intptr_t support -#ifdef WITH_VERSE -#include "BKE_verse.h" -#endif - #include "BIF_gl.h" #include "BIF_glutil.h" @@ -1388,573 +1384,6 @@ static DerivedMesh *getEditMeshDerivedMesh(EditMesh *em, Object *ob, return (DerivedMesh*) emdm; } -#ifdef WITH_VERSE - -/* verse derived mesh */ -typedef struct { - struct DerivedMesh dm; - struct VNode *vnode; - struct VLayer *vertex_layer; - struct VLayer *polygon_layer; - struct ListBase *edges; - float (*vertexCos)[3]; -} VDerivedMesh; - -/* this function set up border points of verse mesh bounding box */ -static void vDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3]) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseVert *vvert; - - if(!vdm->vertex_layer) return; - - vvert = (VerseVert*)vdm->vertex_layer->dl.lb.first; - - if(vdm->vertex_layer->dl.da.count > 0) { - while(vvert) { - DO_MINMAX(vdm->vertexCos ? vvert->cos : vvert->co, min_r, max_r); - vvert = vvert->next; - } - } - else { - min_r[0] = min_r[1] = min_r[2] = max_r[0] = max_r[1] = max_r[2] = 0.0; - } -} - -/* this function return number of vertexes in vertex layer */ -static int vDM_getNumVerts(DerivedMesh *dm) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - - if(!vdm->vertex_layer) return 0; - else return vdm->vertex_layer->dl.da.count; -} - -/* this function return number of 'fake' edges */ -static int vDM_getNumEdges(DerivedMesh *dm) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - - return BLI_countlist(vdm->edges); -} - -/* this function returns number of polygons in polygon layer */ -static int vDM_getNumFaces(DerivedMesh *dm) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - - if(!vdm->polygon_layer) return 0; - else return vdm->polygon_layer->dl.da.count; -} - -/* this function doesn't return vertex with index of access array, - * but it return 'indexth' vertex of dynamic list */ -void vDM_getVert(DerivedMesh *dm, int index, MVert *vert_r) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseVert *vvert; - int i; - - if(!vdm->vertex_layer) return; - - for(vvert = vdm->vertex_layer->dl.lb.first, i=0 ; inext; - - if(vvert) { - VECCOPY(vert_r->co, vvert->co); - - vert_r->no[0] = vvert->no[0] * 32767.0; - vert_r->no[1] = vvert->no[1] * 32767.0; - vert_r->no[2] = vvert->no[2] * 32767.0; - - /* TODO what to do with vert_r->flag and vert_r->mat_nr? */ - vert_r->mat_nr = 0; - vert_r->flag = 0; - } -} - -/* this function returns fake verse edge */ -void vDM_getEdge(DerivedMesh *dm, int index, MEdge *edge_r) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseEdge *vedge; - struct VLayer *vert_vlayer = vdm->vertex_layer; - struct VerseVert *vvert; - int j; - - if(!vdm->vertex_layer || !vdm->edges) return; - - if(vdm->edges->first) { - struct VerseVert *vvert1, *vvert2; - - /* store vert indices in tmp union */ - for(vvert = vdm->vertex_layer->dl.lb.first, j = 0; vvert; vvert = vvert->next, j++) - vvert->tmp.index = j; - - for(vedge = vdm->edges->first; vedge; vedge = vedge->next) { - if(vedge->tmp.index==index) { - vvert1 = BLI_dlist_find_link(&(vert_vlayer->dl), (unsigned int)vedge->v0); - vvert2 = BLI_dlist_find_link(&(vert_vlayer->dl), (unsigned int)vedge->v1); - - if(vvert1 && vvert2) { - edge_r->v1 = vvert1->tmp.index; - edge_r->v2 = vvert2->tmp.index; - } - else { - edge_r->v1 = 0; - edge_r->v2 = 0; - } - /* not supported yet */ - edge_r->flag = 0; - edge_r->crease = 0; - edge_r->bweight = 0; - break; - } - } - } -} - -/* this function doesn't return face with index of access array, - * but it returns 'indexth' vertex of dynamic list */ -void vDM_getFace(DerivedMesh *dm, int index, MFace *face_r) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseFace *vface; - struct VerseVert *vvert; - struct VerseVert *vvert0, *vvert1, *vvert2, *vvert3; - int i; - - if(!vdm->vertex_layer || !vdm->polygon_layer) return; - - for(vface = vdm->polygon_layer->dl.lb.first, i = 0; i < index; ++i) vface = vface->next; - - face_r->mat_nr = 0; - face_r->flag = 0; - - /* goddamn, we have to search all verts to find indices */ - vvert0 = vface->vvert0; - vvert1 = vface->vvert1; - vvert2 = vface->vvert2; - vvert3 = vface->vvert3; - if(!vvert3) face_r->v4 = 0; - - for(vvert = vdm->vertex_layer->dl.lb.first, i = 0; vvert0 || vvert1 || vvert2 || vvert3; i++, vvert = vvert->next) { - if(vvert == vvert0) { - face_r->v1 = i; - vvert0 = NULL; - } - if(vvert == vvert1) { - face_r->v2 = i; - vvert1 = NULL; - } - if(vvert == vvert2) { - face_r->v3 = i; - vvert2 = NULL; - } - if(vvert == vvert3) { - face_r->v4 = i; - vvert3 = NULL; - } - } - - test_index_face(face_r, NULL, 0, vface->vvert3?4:3); -} - -/* fill array of mvert */ -void vDM_copyVertArray(DerivedMesh *dm, MVert *vert_r) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseVert *vvert; - - if(!vdm->vertex_layer) return; - - for(vvert = vdm->vertex_layer->dl.lb.first ; vvert; vvert = vvert->next, ++vert_r) { - VECCOPY(vert_r->co, vvert->co); - - vert_r->no[0] = vvert->no[0] * 32767.0; - vert_r->no[1] = vvert->no[1] * 32767.0; - vert_r->no[2] = vvert->no[2] * 32767.0; - - vert_r->mat_nr = 0; - vert_r->flag = 0; - } -} - -/* dummy function, edges arent supported in verse mesh */ -void vDM_copyEdgeArray(DerivedMesh *dm, MEdge *edge_r) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - - if(!vdm->vertex_layer || !vdm->edges) return; - - if(vdm->edges->first) { - struct VerseEdge *vedge; - struct VLayer *vert_vlayer = vdm->vertex_layer; - struct VerseVert *vvert, *vvert1, *vvert2; - int j; - - /* store vert indices in tmp union */ - for(vvert = vdm->vertex_layer->dl.lb.first, j = 0; vvert; vvert = vvert->next, ++j) - vvert->tmp.index = j; - - for(vedge = vdm->edges->first, j=0 ; vedge; vedge = vedge->next, ++edge_r, j++) { - /* create temporary edge index */ - vedge->tmp.index = j; - vvert1 = BLI_dlist_find_link(&(vert_vlayer->dl), (unsigned int)vedge->v0); - vvert2 = BLI_dlist_find_link(&(vert_vlayer->dl), (unsigned int)vedge->v1); - if(vvert1 && vvert2) { - edge_r->v1 = vvert1->tmp.index; - edge_r->v2 = vvert2->tmp.index; - } - else { - printf("error: vDM_copyEdgeArray: %d, %d\n", vedge->v0, vedge->v1); - edge_r->v1 = 0; - edge_r->v2 = 0; - } - /* not supported yet */ - edge_r->flag = 0; - edge_r->crease = 0; - edge_r->bweight = 0; - } - } -} - -/* fill array of mfaces */ -void vDM_copyFaceArray(DerivedMesh *dm, MFace *face_r) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseFace *vface; - struct VerseVert *vvert; - int i; - - if(!vdm->vertex_layer || !vdm->polygon_layer) return; - - /* store vertexes indices in tmp union */ - for(vvert = vdm->vertex_layer->dl.lb.first, i = 0; vvert; vvert = vvert->next, ++i) - vvert->tmp.index = i; - - for(vface = vdm->polygon_layer->dl.lb.first; vface; vface = vface->next, ++face_r) { - face_r->mat_nr = 0; - face_r->flag = 0; - - face_r->v1 = vface->vvert0->tmp.index; - face_r->v2 = vface->vvert1->tmp.index; - face_r->v3 = vface->vvert2->tmp.index; - if(vface->vvert3) face_r->v4 = vface->vvert3->tmp.index; - else face_r->v4 = 0; - - test_index_face(face_r, NULL, 0, vface->vvert3?4:3); - } -} - -/* return coordination of vertex with index */ -static void vDM_getVertCo(DerivedMesh *dm, int index, float co_r[3]) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseVert *vvert = NULL; - - if(!vdm->vertex_layer) return; - - vvert = BLI_dlist_find_link(&(vdm->vertex_layer->dl), index); - - if(vvert) { - VECCOPY(co_r, vdm->vertexCos ? vvert->cos : vvert->co); - } - else { - co_r[0] = co_r[1] = co_r[2] = 0.0; - } -} - -/* return array of vertex coordiantions */ -static void vDM_getVertCos(DerivedMesh *dm, float (*cos_r)[3]) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseVert *vvert; - int i = 0; - - if(!vdm->vertex_layer) return; - - vvert = vdm->vertex_layer->dl.lb.first; - while(vvert) { - VECCOPY(cos_r[i], vdm->vertexCos ? vvert->cos : vvert->co); - i++; - vvert = vvert->next; - } -} - -/* return normal of vertex with index */ -static void vDM_getVertNo(DerivedMesh *dm, int index, float no_r[3]) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseVert *vvert = NULL; - - if(!vdm->vertex_layer) return; - - vvert = BLI_dlist_find_link(&(vdm->vertex_layer->dl), index); - if(vvert) { - VECCOPY(no_r, vvert->no); - } - else { - no_r[0] = no_r[1] = no_r[2] = 0.0; - } -} - -/* draw all VerseVertexes */ -static void vDM_drawVerts(DerivedMesh *dm) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseVert *vvert; - - if(!vdm->vertex_layer) return; - - vvert = vdm->vertex_layer->dl.lb.first; - - //XXX bglBegin(GL_POINTS); - while(vvert) { - //XXX bglVertex3fv(vdm->vertexCos ? vvert->cos : vvert->co); - vvert = vvert->next; - } - //XXX bglEnd(); -} - -/* draw all edges of VerseFaces ... it isn't optimal, because verse - * specification doesn't support edges :-( ... bother eskil ;-) - * ... some edges (most of edges) are drawn twice */ -static void vDM_drawEdges(DerivedMesh *dm, int drawLooseEdges) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseEdge *vedge; - struct VLayer *vert_vlayer = vdm->vertex_layer; - - if(vert_vlayer && vdm->edges && (BLI_countlist(vdm->edges) > 0)) { - struct VerseVert *vvert1, *vvert2; - - glBegin(GL_LINES); - for(vedge = vdm->edges->first; vedge; vedge = vedge->next) { - vvert1 = BLI_dlist_find_link(&(vert_vlayer->dl), (unsigned int)vedge->v0); - vvert2 = BLI_dlist_find_link(&(vert_vlayer->dl), (unsigned int)vedge->v1); - if(vvert1 && vvert2) { - glVertex3fv(vdm->vertexCos ? vvert1->cos : vvert1->co); - glVertex3fv(vdm->vertexCos ? vvert2->cos : vvert2->co); - } - } - glEnd(); - } -} - -/* verse spec doesn't support edges ... loose edges can't exist */ -void vDM_drawLooseEdges(DerivedMesh *dm) -{ -} - -/* draw uv edges, not supported yet */ -static void vDM_drawUVEdges(DerivedMesh *dm) -{ -} - -/* draw all VerseFaces */ -static void vDM_drawFacesSolid(DerivedMesh *dm, int (*setMaterial)(int, void *attribs)) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseFace *vface; - - if(!vdm->polygon_layer) return; - - vface = vdm->polygon_layer->dl.lb.first; - - glShadeModel(GL_FLAT); - while(vface) { - glBegin(vface->vvert3?GL_QUADS:GL_TRIANGLES); - glNormal3fv(vface->no); - glVertex3fv(vdm->vertexCos ? vface->vvert0->cos : vface->vvert0->co); - glVertex3fv(vdm->vertexCos ? vface->vvert1->cos : vface->vvert1->co); - glVertex3fv(vdm->vertexCos ? vface->vvert2->cos : vface->vvert2->co); - if(vface->vvert3) - glVertex3fv(vdm->vertexCos ? vface->vvert3->cos : vface->vvert3->co); - glEnd(); - vface = vface->next; - } -} - -/* this function should draw mesh with mapped texture, but it isn't supported yet */ -static void vDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, MCol *mcol, int matnr)) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseFace *vface; - - if(!vdm->polygon_layer) return; - - vface = vdm->polygon_layer->dl.lb.first; - - while(vface) { - glBegin(vface->vvert3?GL_QUADS:GL_TRIANGLES); - glVertex3fv(vdm->vertexCos ? vface->vvert0->cos : vface->vvert0->co); - glVertex3fv(vdm->vertexCos ? vface->vvert1->cos : vface->vvert1->co); - glVertex3fv(vdm->vertexCos ? vface->vvert2->cos : vface->vvert2->co); - if(vface->vvert3) - glVertex3fv(vdm->vertexCos ? vface->vvert3->cos : vface->vvert3->co); - glEnd(); - - vface = vface->next; - } -} - -/* this function should draw mesh with colored faces (weight paint, vertex - * colors, etc.), but it isn't supported yet */ -static void vDM_drawFacesColored(DerivedMesh *dm, int useTwoSided, unsigned char *col1, unsigned char *col2) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - struct VerseFace *vface; - - if(!vdm->polygon_layer) return; - - vface = vdm->polygon_layer->dl.lb.first; - - while(vface) { - glBegin(vface->vvert3?GL_QUADS:GL_TRIANGLES); - glVertex3fv(vdm->vertexCos ? vface->vvert0->cos : vface->vvert0->co); - glVertex3fv(vdm->vertexCos ? vface->vvert1->cos : vface->vvert1->co); - glVertex3fv(vdm->vertexCos ? vface->vvert2->cos : vface->vvert2->co); - if(vface->vvert3) - glVertex3fv(vdm->vertexCos ? vface->vvert3->cos : vface->vvert3->co); - glEnd(); - - vface = vface->next; - } -} - -/**/ -static void vDM_foreachMappedVert( - DerivedMesh *dm, - void (*func)(void *userData, int index, float *co, float *no_f, short *no_s), - void *userData) -{ -} - -/**/ -static void vDM_foreachMappedEdge( - DerivedMesh *dm, - void (*func)(void *userData, int index, float *v0co, float *v1co), - void *userData) -{ -} - -/**/ -static void vDM_foreachMappedFaceCenter( - DerivedMesh *dm, - void (*func)(void *userData, int index, float *cent, float *no), - void *userData) -{ -} - -/**/ -static void vDM_drawMappedFacesTex( - DerivedMesh *dm, - int (*setDrawParams)(void *userData, int index), - void *userData) -{ - /* not supported yet */ - vDM_drawFacesTex(dm, NULL); -} - -/**/ -static void vDM_drawMappedFaces( - DerivedMesh *dm, - int (*setDrawOptions)(void *userData, int index, int *drawSmooth_r), - void *userData, - int useColors) -{ -} - -/**/ -static void vDM_drawMappedEdges( - DerivedMesh *dm, - int (*setDrawOptions)(void *userData, int index), - void *userData) -{ -} - -/**/ -static void vDM_drawMappedEdgesInterp( - DerivedMesh *dm, - int (*setDrawOptions)(void *userData, int index), - void (*setDrawInterpOptions)(void *userData, int index, float t), - void *userData) -{ -} - -/* free all DerivedMesh data */ -static void vDM_release(DerivedMesh *dm) -{ - VDerivedMesh *vdm = (VDerivedMesh*)dm; - - if (DM_release(dm)) { - if(vdm->vertexCos) MEM_freeN(vdm->vertexCos); - MEM_freeN(vdm); - } -} - -/* create derived mesh from verse mesh ... it is used in object mode, when some other client can - * change shared data and want to see this changes in real time too */ -DerivedMesh *derivedmesh_from_versemesh(VNode *vnode, float (*vertexCos)[3]) -{ - VDerivedMesh *vdm = MEM_callocN(sizeof(*vdm), "vdm"); - - vdm->vnode = vnode; - vdm->vertex_layer = find_verse_layer_type((VGeomData*)vnode->data, VERTEX_LAYER); - vdm->polygon_layer = find_verse_layer_type((VGeomData*)vnode->data, POLYGON_LAYER); - vdm->edges = &((VGeomData*)vnode->data)->edges; - - /* vertex and polygon layer has to exist */ - if(vdm->vertex_layer && vdm->polygon_layer) - DM_init(&vdm->dm, vdm->vertex_layer->dl.da.count, BLI_countlist(vdm->edges), vdm->polygon_layer->dl.da.count); - else - DM_init(&vdm->dm, 0, 0, 0); - - vdm->dm.getMinMax = vDM_getMinMax; - - vdm->dm.getNumVerts = vDM_getNumVerts; - vdm->dm.getNumEdges = vDM_getNumEdges; - vdm->dm.getNumFaces = vDM_getNumFaces; - - vdm->dm.getVert = vDM_getVert; - vdm->dm.getEdge = vDM_getEdge; - vdm->dm.getFace = vDM_getFace; - vdm->dm.copyVertArray = vDM_copyVertArray; - vdm->dm.copyEdgeArray = vDM_copyEdgeArray; - vdm->dm.copyFaceArray = vDM_copyFaceArray; - - vdm->dm.foreachMappedVert = vDM_foreachMappedVert; - vdm->dm.foreachMappedEdge = vDM_foreachMappedEdge; - vdm->dm.foreachMappedFaceCenter = vDM_foreachMappedFaceCenter; - - vdm->dm.getVertCos = vDM_getVertCos; - vdm->dm.getVertCo = vDM_getVertCo; - vdm->dm.getVertNo = vDM_getVertNo; - - vdm->dm.drawVerts = vDM_drawVerts; - - vdm->dm.drawEdges = vDM_drawEdges; - vdm->dm.drawLooseEdges = vDM_drawLooseEdges; - vdm->dm.drawUVEdges = vDM_drawUVEdges; - - vdm->dm.drawFacesSolid = vDM_drawFacesSolid; - vdm->dm.drawFacesTex = vDM_drawFacesTex; - vdm->dm.drawFacesColored = vDM_drawFacesColored; - - vdm->dm.drawMappedFacesTex = vDM_drawMappedFacesTex; - vdm->dm.drawMappedFaces = vDM_drawMappedFaces; - vdm->dm.drawMappedEdges = vDM_drawMappedEdges; - vdm->dm.drawMappedEdgesInterp = vDM_drawMappedEdgesInterp; - - vdm->dm.release = vDM_release; - - vdm->vertexCos = vertexCos; - - return (DerivedMesh*) vdm; -} - -#endif - /***/ DerivedMesh *mesh_create_derived_for_modifier(Scene *scene, Object *ob, ModifierData *md) @@ -1973,12 +1402,7 @@ DerivedMesh *mesh_create_derived_for_modifier(Scene *scene, Object *ob, Modifier float (*deformedVerts)[3] = mesh_getVertexCos(me, &numVerts); mti->deformVerts(md, ob, NULL, deformedVerts, numVerts); -#ifdef WITH_VERSE - if(me->vnode) dm = derivedmesh_from_versemesh(me->vnode, deformedVerts); - else dm = getMeshDerivedMesh(me, ob, deformedVerts); -#else dm = getMeshDerivedMesh(me, ob, deformedVerts); -#endif MEM_freeN(deformedVerts); } else { @@ -2163,22 +1587,11 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos * coordinates (vpaint, etc.) */ if (deform_r) { -#ifdef WITH_VERSE - if(me->vnode) *deform_r = derivedmesh_from_versemesh(me->vnode, deformedVerts); - else { - *deform_r = CDDM_from_mesh(me, ob); - if(deformedVerts) { - CDDM_apply_vert_coords(*deform_r, deformedVerts); - CDDM_calc_normals(*deform_r); - } - } -#else *deform_r = CDDM_from_mesh(me, ob); if(deformedVerts) { CDDM_apply_vert_coords(*deform_r, deformedVerts); CDDM_calc_normals(*deform_r); } -#endif } } else { /* default behaviour for meshes */ @@ -2195,13 +1608,6 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos dm = NULL; orcodm = NULL; -#ifdef WITH_VERSE - /* hack to make sure modifiers don't try to use mesh data from a verse - * node - */ - if(me->vnode) dm = derivedmesh_from_versemesh(me->vnode, deformedVerts); -#endif - for(;md; md = md->next, curr = curr->next) { ModifierTypeInfo *mti = modifierType_getInfo(md->type); @@ -2333,23 +1739,11 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos } else if(dm) { finaldm = dm; } else { -#ifdef WITH_VERSE - if(me->vnode) - finaldm = derivedmesh_from_versemesh(me->vnode, deformedVerts); - else { - finaldm = CDDM_from_mesh(me, ob); - if(deformedVerts) { - CDDM_apply_vert_coords(finaldm, deformedVerts); - CDDM_calc_normals(finaldm); - } - } -#else finaldm = CDDM_from_mesh(me, ob); if(deformedVerts) { CDDM_apply_vert_coords(finaldm, deformedVerts); CDDM_calc_normals(finaldm); } -#endif } /* add an orco layer if needed */ diff --git a/source/blender/blenkernel/intern/Makefile b/source/blender/blenkernel/intern/Makefile index 8919719d64d..3d8a47e3683 100644 --- a/source/blender/blenkernel/intern/Makefile +++ b/source/blender/blenkernel/intern/Makefile @@ -91,11 +91,6 @@ ifeq ($(WITH_FREETYPE2), true) CPPFLAGS += -I$(NAN_FREETYPE)/include/freetype2 endif -ifeq ($(WITH_VERSE), true) - CPPFLAGS += -DWITH_VERSE - CPPFLAGS += -I$(NAN_VERSE)/include -endif - ifeq ($(WITH_FFMPEG),true) CPPFLAGS += -DWITH_FFMPEG CPPFLAGS += $(NAN_FFMPEGCFLAGS) diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 597687101b0..7890b72f6e2 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -1939,17 +1939,12 @@ ImBuf *BKE_image_get_ibuf(Image *ima, ImageUser *iuser) } else if(ima->source == IMA_SRC_GENERATED) { /* generated is: ibuf is allocated dynamically */ - if(ima->type==IMA_TYPE_VERSE) { - /* todo */ - } - else { /* always fall back to IMA_TYPE_UV_TEST */ - /* UV testgrid or black or solid etc */ - if(ima->gen_x==0) ima->gen_x= 256; - if(ima->gen_y==0) ima->gen_y= 256; - ibuf= add_ibuf_size(ima->gen_x, ima->gen_y, ima->name, 0, ima->gen_type, color); - image_assign_ibuf(ima, ibuf, IMA_NO_INDEX, 0); - ima->ok= IMA_OK_LOADED; - } + /* UV testgrid or black or solid etc */ + if(ima->gen_x==0) ima->gen_x= 256; + if(ima->gen_y==0) ima->gen_y= 256; + ibuf= add_ibuf_size(ima->gen_x, ima->gen_y, ima->name, 0, ima->gen_type, color); + image_assign_ibuf(ima, ibuf, IMA_NO_INDEX, 0); + ima->ok= IMA_OK_LOADED; } else if(ima->source == IMA_SRC_VIEWER) { if(ima->type==IMA_TYPE_R_RESULT) { diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index b41f82bbcf8..3f35e70114a 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -68,10 +68,6 @@ #include "BKE_object.h" #include "BKE_utildefines.h" -#ifdef WITH_VERSE -#include "BKE_verse.h" -#endif - #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_arithb.h" @@ -193,10 +189,6 @@ Mesh *add_mesh(char *name) me->flag= ME_TWOSIDED; me->bb= unit_boundbox(); -#ifdef WITH_VERSE - me->vnode = NULL; -#endif - return me; } @@ -240,10 +232,6 @@ Mesh *copy_mesh(Mesh *me) men->key= copy_key(me->key); if(men->key) men->key->from= (ID *)men; -#ifdef WITH_VERSE - men->vnode = NULL; -#endif - return men; } @@ -1025,38 +1013,14 @@ void mesh_calc_normals(MVert *mverts, int numVerts, MFace *mfaces, int numFaces, float (*mesh_getVertexCos(Mesh *me, int *numVerts_r))[3] { -#ifdef WITH_VERSE - if(me->vnode) { - struct VLayer *vlayer; - struct VerseVert *vvert; - unsigned int i, numVerts; - float (*cos)[3]; - - vlayer = find_verse_layer_type((VGeomData*)((VNode*)me->vnode)->data, VERTEX_LAYER); - - vvert = vlayer->dl.lb.first; - numVerts = vlayer->dl.da.count; - cos = MEM_mallocN(sizeof(*cos)*numVerts, "verse_vertexcos"); - - for(i=0; inext, i++) { - VECCOPY(cos[i], vvert->co); - } - - return cos; - } - else { -#endif - int i, numVerts = me->totvert; - float (*cos)[3] = MEM_mallocN(sizeof(*cos)*numVerts, "vertexcos1"); - - if (numVerts_r) *numVerts_r = numVerts; - for (i=0; imvert[i].co); - - return cos; -#ifdef WITH_VERSE - } -#endif + int i, numVerts = me->totvert; + float (*cos)[3] = MEM_mallocN(sizeof(*cos)*numVerts, "vertexcos1"); + + if (numVerts_r) *numVerts_r = numVerts; + for (i=0; imvert[i].co); + + return cos; } float (*mesh_getRefKeyCos(Mesh *me, int *numVerts_r))[3] diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 7f3f21e106a..185ce73c936 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1253,10 +1253,6 @@ Object *copy_object(Object *ob) obn->derivedDeform = NULL; obn->derivedFinal = NULL; -#ifdef WITH_VERSE - obn->vnode = NULL; -#endif - obn->gpulamp.first = obn->gpulamp.last = NULL; return obn; diff --git a/source/blender/blenkernel/intern/verse_bitmap_node.c b/source/blender/blenkernel/intern/verse_bitmap_node.c deleted file mode 100644 index 92bdd28027f..00000000000 --- a/source/blender/blenkernel/intern/verse_bitmap_node.c +++ /dev/null @@ -1,448 +0,0 @@ -/** - * $Id$ - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Contributor(s): Jiri Hnidek. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef WITH_VERSE - -#include - -#include "MEM_guardedalloc.h" - -#include "DNA_listBase.h" - -#include "BLI_dynamiclist.h" -#include "BLI_blenlib.h" - -//XXX #include "BIF_verse.h" - -#include "BKE_verse.h" - -#include "verse.h" - -/* function prototypes of static functions */ -static void cb_b_dimension_set(void *user_data, VNodeID node_id, uint16 width, uint16 height, uint16 depth); -static void cb_b_layer_create(void *user_data, VNodeID node_id, VLayerID layer_id, const char *name, VNBLayerType type); -static void cb_b_layer_destroy(void *user_data, VNodeID node_id, VLayerID layer_id); -static void cb_b_tile_set(void *user_data, VNodeID node_id, VLayerID layer_id, uint16 tile_x, uint16 tile_y, uint16 z, VNBLayerType type, const VNBTile *tile); - -static void change_layer_dimension( - VBitmapLayer *vblayer, - unsigned int old_width, - unsigned int old_height, - unsigned int t_old_width, - unsigned int t_old_height); -static void *alloc_verse_bitmap_layer_data(struct VBitmapLayer *vblayer); - -/* - * resize/crop verse bitmap layer - */ -static void change_layer_dimension( - VBitmapLayer *vblayer, - unsigned int old_width, - unsigned int old_height, - unsigned int t_old_width, - unsigned int t_old_height) -{ - struct VNode *vnode = vblayer->vnode; - unsigned int t_width = ((VBitmapData*)(vnode->data))->t_width; - unsigned int width = ((VBitmapData*)(vnode->data))->width; - unsigned int height = ((VBitmapData*)(vnode->data))->height; - unsigned int x, y, i, j; - - i = j = 0; - - /* "copy" old data to new data */ - if(vblayer->type==VN_B_LAYER_UINT8) { - unsigned char *data = (unsigned char*)vblayer->data; - /* allocate new verse bitmap layer data */ - unsigned char *new_data = (unsigned char*)alloc_verse_bitmap_layer_data(vblayer); - for(y=0; ydata); - vblayer->data = new_data; - } -} - -/* - * free data stored in verse bitmap layer - */ -void free_bitmap_layer_data(VBitmapLayer *vblayer) -{ - struct VerseSession *session = vblayer->vnode->session; - - /* free name of bitmap layer */ - MEM_freeN(vblayer->name); - - /* unsubscribe from verse bitmap layer */ - if(session->flag & VERSE_CONNECTED) - verse_send_b_layer_unsubscribe(vblayer->vnode->id, vblayer->id); - - /* free image data of bitmap layer */ - if(vblayer->data) MEM_freeN(vblayer->data); -} - -/* - * allocate data of verse bitmap layer - */ -static void *alloc_verse_bitmap_layer_data(VBitmapLayer *vblayer) -{ - struct VNode *vnode = vblayer->vnode; - unsigned int t_width = ((VBitmapData*)(vnode->data))->t_width; - unsigned int t_height = ((VBitmapData*)(vnode->data))->t_height; - unsigned int size; - void *data; - - size = t_width*t_height; - - /* allocation of own data stored in verse bitmap layer */ - switch (vblayer->type) { - case VN_B_LAYER_UINT1: - data = (void*)MEM_mallocN(sizeof(unsigned char)*size, "VBLayer data uint1"); - break; - case VN_B_LAYER_UINT8: - data = (void*)MEM_mallocN(sizeof(unsigned char)*size, "VBLayer data uint8"); - break; - case VN_B_LAYER_UINT16: - data = (void*)MEM_mallocN(sizeof(unsigned int)*size, "VBLayer data uint16"); - break; - case VN_B_LAYER_REAL32: - data = (void*)MEM_mallocN(sizeof(float)*size, "VBLayer data float16"); - break; - case VN_B_LAYER_REAL64: - data = (void*)MEM_mallocN(sizeof(double)*size, "VBLayer data float32"); - break; - default: - data = NULL; - break; - } - - return data; -} - -/* - * create verse bitmap layer - */ -VBitmapLayer *create_bitmap_layer( - VNode *vnode, - VLayerID layer_id, - const char *name, - VNBLayerType type) -{ - struct VBitmapLayer *vblayer; - unsigned int width = ((VBitmapData*)(vnode->data))->width; - unsigned int height = ((VBitmapData*)(vnode->data))->height; - - /* allocate memory for own verse bitmap layer */ - vblayer = (VBitmapLayer*)MEM_mallocN(sizeof(VBitmapLayer), "Verse Bitmap Layer"); - - /* verse bitmap layer will include pointer at parent verse node and own id */ - vblayer->vnode = vnode; - vblayer->id = layer_id; - - /* name of verse layer */ - vblayer->name = (char*)MEM_mallocN(sizeof(char)*(strlen(name)+1), "Verse Bitmap Layer name"); - vblayer->name[0] = '\0'; - strcpy(vblayer->name, name); - - /* type of data stored in verse bitmap layer */ - vblayer->type = type; - - /* we can allocate memory for layer data, when we know dimmension of layers; when - * we don't know it, then we will allocate this data when we will receive dimmension */ - if(width==0 || height==0) - vblayer->data = NULL; - else - vblayer->data = alloc_verse_bitmap_layer_data(vblayer); - - vblayer->flag = 0; - - return vblayer; -} - -/* - * free data of bitmap node - */ -void free_bitmap_node_data(VNode *vnode) -{ - if(vnode->data) { - struct VBitmapLayer *vblayer = (VBitmapLayer*)((VBitmapData*)(vnode->data))->layers.lb.first; - - /* free all VerseLayer data */ - while(vblayer) { - free_bitmap_layer_data(vblayer); - vblayer = vblayer->next; - } - - /* free all VerseLayers */ - BLI_dlist_destroy(&(((VGeomData*)vnode->data)->layers)); - } -} - -/* - * create data of bitmap node - */ -VBitmapData *create_bitmap_data() -{ - struct VBitmapData *vbitmap; - - vbitmap = (VBitmapData*)MEM_mallocN(sizeof(VBitmapData), "Verse Bitmap Data"); - - BLI_dlist_init(&(vbitmap->layers)); - vbitmap->queue.first = vbitmap->queue.last = NULL; - - vbitmap->width = 0; - vbitmap->height = 0; - vbitmap->depth = 0; - - vbitmap->image = NULL; - - //XXX vbitmap->post_bitmap_dimension_set = post_bitmap_dimension_set; - //XXX vbitmap->post_bitmap_layer_create = post_bitmap_layer_create; - //XXX vbitmap->post_bitmap_layer_destroy = post_bitmap_layer_destroy; - //XXX vbitmap->post_bitmap_tile_set = post_bitmap_tile_set; - - return vbitmap; -} - -/* - * callback function, dimension of image was changed, it is neccessary to - * crop all layers - */ -static void cb_b_dimension_set( - void *user_data, - VNodeID node_id, - uint16 width, - uint16 height, - uint16 depth) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VBitmapLayer *vblayer; - unsigned int old_width, old_height, t_old_width, t_old_height; - - if(!session) return; - - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - if(!vnode) return; - -#ifdef VERSE_DEBUG_PRINT - printf("\t cb_b_dimension_set()\n"); -#endif - - /* backup old width and height */ - old_width = ((VBitmapData*)(vnode->data))->width; - old_height = ((VBitmapData*)(vnode->data))->height; - t_old_width = ((VBitmapData*)(vnode->data))->t_width; - t_old_height = ((VBitmapData*)(vnode->data))->t_height; - - /* set up new dimension of layers */ - ((VBitmapData*)(vnode->data))->width = width; - ((VBitmapData*)(vnode->data))->height = height; - ((VBitmapData*)(vnode->data))->depth = depth; - - /* we cache t_width because tiles aren't one pixel width */ - if((width % VN_B_TILE_SIZE)!=0) - ((VBitmapData*)(vnode->data))->t_width = (width/VN_B_TILE_SIZE + 1)*VN_B_TILE_SIZE; - else - ((VBitmapData*)(vnode->data))->t_width = width; - - /* we cache t_height because tiles aren't one pixel height */ - if((height % VN_B_TILE_SIZE)!=0) - ((VBitmapData*)(vnode->data))->t_height = (height/VN_B_TILE_SIZE + 1)*VN_B_TILE_SIZE; - else - ((VBitmapData*)(vnode->data))->t_height = height; - - /* crop resize all layers */ - vblayer = ((VBitmapData*)vnode->data)->layers.lb.first; - - while(vblayer) { - /* when this callback function received after cb_b_layer_create, - * then we have to allocate memory for verse bitmap layer data */ - if(!vblayer->data) vblayer->data = alloc_verse_bitmap_layer_data(vblayer); - /* crop/resize all verse bitmap layers */ - else change_layer_dimension(vblayer, old_width, old_height, t_old_width, t_old_height); - - vblayer = vblayer->next; - } - - /* post callback function */ - ((VBitmapData*)(vnode->data))->post_bitmap_dimension_set(vnode); -} - -/* - * callback function, new layer channel of image was created - */ -static void cb_b_layer_create( - void *user_data, - VNodeID node_id, - VLayerID layer_id, - const char *name, - VNBLayerType type) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VBitmapLayer *vblayer; - - if(!session) return; - - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - if(!vnode) return; - -#ifdef VERSE_DEBUG_PRINT - printf("\t cb_b_layer_create()\n"); -#endif - - /* when no layer exists, then new layer will be created */ - vblayer = create_bitmap_layer(vnode, layer_id, name, type); - - /* add verse bitmap layer to list of layers */ - BLI_dlist_add_item_index(&((VBitmapData*)vnode->data)->layers, vblayer, layer_id); - - /* post callback function */ - ((VBitmapData*)(vnode->data))->post_bitmap_layer_create(vblayer); - -} - -/* - * callback function, existing layer of image was destroyed - */ -static void cb_b_layer_destroy( - void *user_data, - VNodeID node_id, - VLayerID layer_id) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VBitmapLayer *vblayer; - - if(!session) return; - - /* find node of this layer*/ - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - if(!vnode) return; - - vblayer = (VBitmapLayer*)BLI_dlist_find_link(&(((VBitmapData*)vnode->data)->layers), layer_id); - if(!vblayer) return; - -#ifdef VERSE_DEBUG_PRINT - printf("\t cb_b_layer_destroy()\n"); -#endif - - /* remove verse bitmap layer from list of layers */ - BLI_dlist_rem_item(&(((VBitmapData*)vnode->data)->layers), layer_id); - - /* post callback function */ - ((VBitmapData*)(vnode->data))->post_bitmap_layer_destroy(vblayer); - - /* free data of verse bitmap layer */ - free_bitmap_layer_data(vblayer); - - /* free verse bitmap layer */ - MEM_freeN(vblayer); -} - -/* - * callback function, small part (8x8 pixels) was changed - */ -static void cb_b_tile_set( - void *user_data, - VNodeID node_id, - VLayerID layer_id, - uint16 tile_x, - uint16 tile_y, - uint16 z, - VNBLayerType type, - const VNBTile *tile) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VBitmapLayer *vblayer; - unsigned int x, y, xs, ys, width, height, t_height, t_width, i, j; - - if(!session) return; - - /* try to find verse node in dynamic list nodes */ - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - if(!vnode) return; - - /* try to find verse bitmap layer in list of layers */ - vblayer = (VBitmapLayer*)BLI_dlist_find_link(&(((VBitmapData*)vnode->data)->layers), layer_id); - if(!vblayer) return; - - /* we have to have allocated memory for bitmap layer */ - if(!vblayer->data) return; - - width = ((VBitmapData*)vnode->data)->width; - height = ((VBitmapData*)vnode->data)->height; - - /* width of verse image including all tiles */ - t_height = ((VBitmapData*)vnode->data)->t_height; - /* height of verse image including all tiles */ - t_width = ((VBitmapData*)vnode->data)->t_width; - -#ifdef VERSE_DEBUG_PRINT - printf("\t cb_b_tile_set()\n"); -#endif - - xs = tile_x*VN_B_TILE_SIZE; - ys = tile_y*VN_B_TILE_SIZE; - - /* initial position in one dimension vblayer->data (y_start*width + x_start) */ - i = ys*t_width + xs; - /* intial position in one dimension tile array */ - j = 0; - - if(type==VN_B_LAYER_UINT8) { - unsigned char *data = (unsigned char*)vblayer->data; - for(y=ys; yvuint8[j]; - } - - /* post callback function */ - ((VBitmapData*)(vnode->data))->post_bitmap_tile_set(vblayer, xs, ys); -} - -/* - * set up all callbacks functions for image nodes - */ -void set_bitmap_callbacks(void) -{ - /* dimension (size) of bitmap was set up or changes (image will be croped) */ - verse_callback_set(verse_send_b_dimensions_set, cb_b_dimension_set, NULL); - - /* new layer (chanell) of image was added or created */ - verse_callback_set(verse_send_b_layer_create, cb_b_layer_create, NULL); - - /* existing layer was destroyed */ - verse_callback_set(verse_send_b_layer_destroy, cb_b_layer_destroy, NULL); - - /* some tile (small part 8x8 pixels of image was changed) */ - verse_callback_set(verse_send_b_tile_set, cb_b_tile_set, NULL); -} - -#endif - diff --git a/source/blender/blenkernel/intern/verse_geometry_node.c b/source/blender/blenkernel/intern/verse_geometry_node.c deleted file mode 100644 index a0afd1ef5f0..00000000000 --- a/source/blender/blenkernel/intern/verse_geometry_node.c +++ /dev/null @@ -1,2098 +0,0 @@ -/** - * $Id$ - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Contributor(s): Jiri Hnidek. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef WITH_VERSE - -#include - -#include "MEM_guardedalloc.h" - -#include "DNA_listBase.h" - -#include "BLI_dynamiclist.h" -#include "BLI_blenlib.h" -#include "BLI_arithb.h" - -#include "BKE_verse.h" -#include "BKE_utildefines.h" - -//XXX #include "BIF_verse.h" - -#include "verse.h" - -/* function prototypes of static functions */ - -/* test functions for callback functions */ -static char test_polygon_set_corner_uint32(uint32 v0, uint32 v1, uint32 v2, uint32 v3); - -/* callback functions */ -static void cb_g_layer_create(void *user_data, VNodeID node_id, VLayerID layer_id, const char *name, VNGLayerType type, uint32 def_integer, real64 def_real); -static void cb_g_layer_destroy(void *user_data, VNodeID node_id, VLayerID layer_id); -static void cb_g_vertex_set_xyz_real32(void *user_data, VNodeID node_id, VLayerID layer_id, uint32 vertex_id, real32 x, real32 y, real32 z); -static void cb_g_polygon_set_corner_uint32(void *user_data, VNodeID node_id, VLayerID layer_id, uint32 polygon_id, uint32 v0, uint32 v1, uint32 v2, uint32 v3); -static void cb_g_vertex_delete_real32(void *user_data, VNodeID node_id, uint32 vertex_id); -static void cb_g_polygon_delete(void *user_data, VNodeID node_id, uint32 polygon_id); -static void cb_g_crease_set_edge(void *user_data, VNodeID node_id, const char *layer, uint32 def_crease); -static void cb_g_crease_set_vertex(void *user_data, VNodeID node_id, const char *layer, uint32 def_crease); - -/* other static functions */ - -static void free_unneeded_verseverts_of_verseface(struct VNode *vnode, struct VerseFace *vface); -static void free_verse_vertex(struct VLayer *vlayer, struct VerseVert *vvert); -static void free_verse_face(struct VLayer *vlayer, struct VerseFace *vface); -static void free_verse_layer_data(struct VNode *vnode, struct VLayer *vlayer); - -static void send_verse_face(struct VerseFace *vface); - -static VerseVert* find_verse_vert_in_queue(struct VLayer *vlayer, VNodeID node_id, uint32 vertex_id, real32 x, real32 y, real32 z); -static VerseFace* find_verse_face_in_queue(struct VLayer *vlayer, VNodeID node_id, uint32 polygon_id, uint32 v0, uint32 v1, uint32 v2, uint32 v3); - -static unsigned short test_incoming_verseface(struct VGeomData *geom, struct VerseFace *vface); -static void find_unsent_faces(struct VNode *vnode, struct VerseVert *vvert); -static void find_vlayer_orphans(struct VNode *vnode, struct VerseVert *vvert); -static void move_face_orphan_to_dlist(struct VNode *vnode, struct VLayer *vlayer, struct VerseFace *vface); -static void increase_verse_verts_references(struct VerseFace *vface); -static void recalculate_verseface_normals(struct VNode *vnode); - -/* verse edge functions */ -static VerseEdge* find_verse_edge(struct VNode *vnode, uint32 v0, uint32 v1); -static void insert_verse_edgehash(struct VNode *vnode, struct VerseEdge *vedge); -static void remove_verse_edgehash(struct VNode *vnode, struct VerseEdge *vedge); -static void remove_verse_edge(struct VNode *vnode, uint32 v0, uint32 v1); -static void add_verse_edge(struct VNode *vnode, uint32 v0, uint32 v1); -static void update_edgehash_of_deleted_verseface(struct VNode *vnode, struct VerseFace *vface); -static void update_edgehash_of_changed_verseface(struct VNode *vnode, struct VerseFace *vface, uint32 v0, uint32 v1, uint32 v2, uint32 v3); -static void update_edgehash_of_new_verseface(struct VNode *vnode, uint32 v0, uint32 v1, uint32 v2, uint32 v3); - -/* - * recalcute normals of all VerseFaces - */ -static void recalculate_verseface_normals(VNode *vnode) -{ - struct VLayer *vert_layer, *face_layer; - struct VerseFace *vface; - struct VerseVert *vvert; - - if(vnode->type != V_NT_GEOMETRY) return; - - vert_layer = find_verse_layer_type((VGeomData*)vnode->data, VERTEX_LAYER); - face_layer = find_verse_layer_type((VGeomData*)vnode->data, POLYGON_LAYER); - - vvert = vert_layer->dl.lb.first; - while(vvert) { - vvert->no[0] = vvert->no[1] = vvert->no[2] = 0.0; - vvert = vvert->next; - } - - vface = face_layer->dl.lb.first; - while(vface) { - /* calculate face normals */ - if(vface->vvert3) { - CalcNormFloat4(vface->vvert0->co, vface->vvert1->co, - vface->vvert2->co, vface->vvert3->co, vface->no); - VecAddf(vface->vvert3->no, vface->vvert3->no, vface->no); - } - else - CalcNormFloat(vface->vvert0->co, vface->vvert1->co, - vface->vvert2->co, vface->no); - - /* calculate vertex normals ... it is averadge of all face normals using the vertex */ - VecAddf(vface->vvert0->no, vface->vvert0->no, vface->no); - VecAddf(vface->vvert1->no, vface->vvert1->no, vface->no); - VecAddf(vface->vvert2->no, vface->vvert2->no, vface->no); - - vface = vface->next; - } - - /* we have to normalize all vertex normals */ - vvert = vert_layer->dl.lb.first; - while(vvert) { - Normalize(vvert->no); - vvert = vvert->next; - } -} - -/* - * add created item to the queue and send it if possible - */ -void add_item_to_send_queue(ListBase *lb, void *item, short type) -{ - struct VNode *vnode; - struct VLayer *vlayer; - struct VerseVert *vvert; - struct VerseFace *vface; - - /* this prevent from adding duplicated faces */ - if(type==VERSE_FACE) { - struct Link *link = (Link*)lb->first; - while(link) { - if(link==item) { - if(((VerseFace*)item)->flag & FACE_SENT) { -/* printf("\tverse face %d marked as OBSOLETE\n", ((VerseFace*)item)->id);*/ - ((VerseFace*)item)->flag |= FACE_OBSOLETE; - } - return; - } - link = link->next; - } - } - - /* add item to sending queue (two way dynamic list) */ - BLI_addtail(lb, item); - - /* send item, when it is possible */ - switch (type) { - case VERSE_NODE: /* only first node in queue can be sent */ - if(lb->first==lb->last) - send_verse_node((VNode*)item); - break; - case VERSE_LINK: /* both object between have to exist */ - if(((VLink*)item)->flag & LINK_SEND_READY) - send_verse_link((VLink*)item); - break; - case VERSE_LAYER: - if(((VLayer*)item)->vnode->flag & NODE_RECEIVED) - send_verse_layer((VLayer*)item); - break; - case VERSE_VERT: - if(((VerseVert*)item)->vlayer->flag & LAYER_RECEIVED) - send_verse_vertex((VerseVert*)item); - break; - case VERSE_FACE: /* all vertexes of face have to be received */ - if(((VerseFace*)item)->flag & FACE_SEND_READY) - send_verse_face((VerseFace*)item); - break; - case VERSE_TAG: - send_verse_tag((VTag*)item); - break; - case VERSE_TAG_GROUP: - send_verse_taggroup((VTagGroup*)item); - break; - case VERSE_VERT_UINT32: /* parent item has to exist */ - vnode = (((uint32_item*)item)->vlayer)->vnode; - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), 0 ); - vvert = (VerseVert*)BLI_dlist_find_link(&(vlayer->dl), ((uint32_item*)item)->id ); - if(vvert != NULL) - send_verse_vert_uint32((uint32_item*)item, type); - break; - case VERSE_VERT_REAL32: /* parent item has to exist */ - vnode = (((real32_item*)item)->vlayer)->vnode; - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), 0 ); - vvert = (VerseVert*)BLI_dlist_find_link(&(vlayer->dl), ((real32_item*)item)->id ); - if( vvert != NULL) - send_verse_vert_real32((real32_item*)item, type); - break; - case VERSE_VERT_VEC_REAL32: /* parent item has to exist */ - vnode = (((vec_real32_item*)item)->vlayer)->vnode; - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), 0 ); - vvert = (VerseVert*)BLI_dlist_find_link(&(vlayer->dl), ((vec_real32_item*)item)->id ); - if(vvert != NULL) - send_verse_vert_vec_real32((vec_real32_item*)item, type); - break; - case VERSE_FACE_UINT8: /* parent item has to exist */ - vnode = (((uint8_item*)item)->vlayer)->vnode; - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), 1 ); - vface = (VerseFace*)BLI_dlist_find_link(&(vlayer->dl), ((uint8_item*)item)->id ); - if(vface != NULL) - send_verse_face_uint8((uint8_item*)item, type); - break; - case VERSE_FACE_UINT32: /* parent item has to exist */ - vnode = (((uint32_item*)item)->vlayer)->vnode; - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), 1 ); - vface = (VerseFace*)BLI_dlist_find_link(&(vlayer->dl), ((uint32_item*)item)->id ); - if(vface != NULL) - send_verse_face_uint32((uint32_item*)item, type); - break; - case VERSE_FACE_REAL32: /* parent item has to exist */ - vnode = (((real32_item*)item)->vlayer)->vnode; - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), 1 ); - vface = (VerseFace*)BLI_dlist_find_link(&(vlayer->dl), ((real32_item*)item)->id ); - if(vface != NULL) - send_verse_face_real32((real32_item*)item, type); - break; - case VERSE_FACE_QUAT_UINT32: /* parent item has to exist */ - vnode = (((quat_uint32_item*)item)->vlayer)->vnode; - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), 1 ); - vface = (VerseFace*)BLI_dlist_find_link(&(vlayer->dl), ((quat_uint32_item*)item)->id ); - if(vface != NULL) - send_verse_face_corner_quat_uint32((quat_uint32_item*)item, type); - break; - case VERSE_FACE_QUAT_REAL32: /* parent item has to exist */ - vnode = (((quat_real32_item*)item)->vlayer)->vnode; - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), 1 ); - vface = (VerseFace*)BLI_dlist_find_link(&(vlayer->dl), ((quat_real32_item*)item)->id ); - if(vface != NULL) - send_verse_face_corner_quat_real32((quat_real32_item*)item, type); - break; - } -} - -/* - * return VerseLayer with certain content (vertexes, polygons, in the - * future: weight, red color, etc.) - */ -VLayer* find_verse_layer_type(VGeomData *geom, short content) -{ - struct VLayer *vlayer = NULL; - - switch(content) { - case VERTEX_LAYER: - /* VERTEX_LAYER equals 0 and vertex layer is - * always in 1st layer */ - vlayer = geom->layers.da.items[VERTEX_LAYER]; - break; - case POLYGON_LAYER: - /* POLYGON_LAYER equals 1 and vertex layer is - * always in 2nd layer */ - vlayer = geom->layers.da.items[POLYGON_LAYER]; - break; - } - - return vlayer; -} - -/* - * increase references of VerseVerts of new VerseFace - */ -static void increase_verse_verts_references(VerseFace *vface) -{ - if(vface->vvert0) vface->vvert0->counter++; - if(vface->vvert1) vface->vvert1->counter++; - if(vface->vvert2) vface->vvert2->counter++; - if(vface->vvert3) vface->vvert3->counter++; -} - -/* - * move VerseFace from list of orphans to dlist of VerseFaces (if VerseFace was only changed - * then this VerseFace is only removed from list of orphans) - */ -static void move_face_orphan_to_dlist(VNode *vnode, VLayer *vlayer, VerseFace *vface) -{ - /* remove vface from list of orphans */ - BLI_remlink(&(vlayer->orphans), vface); - /* increase references of all vertexes beying part of this face*/ - increase_verse_verts_references(vface); - - if(vface->flag & FACE_RECEIVED) { - /* set up vface flag */ - vface->flag &= ~FACE_RECEIVED; - /* move vface to dynamic list of faces */ - BLI_dlist_add_item_index(&(vlayer->dl), (void*)vface, vface->id); - /* recalculate all vertex and faces normals */ - recalculate_verseface_normals(vnode); - /* post create action (change local data) */ - ((VGeomData*)vnode->data)->post_polygon_create(vface); - } - else if(vface->flag & FACE_CHANGED) { - /* set up vface flag */ - vface->flag &= ~FACE_CHANGED; - /* move vface to dynamic list of faces */ - BLI_dlist_add_item_index(&(vlayer->dl), (void*)vface, vface->id); - /* recalculate all vertex and faces normals */ - recalculate_verseface_normals(vnode); - /* post create action (change local data) */ - ((VGeomData*)vnode->data)->post_polygon_set_corner(vface); - } -} - -/* - * find all VerseFaces waiting in queue, which needs id of new VerseVert - */ -static void find_unsent_faces(VNode *vnode, VerseVert *vvert) -{ - VLayer *vlayer; - VerseFace *vface, *next_vface; - - vlayer = find_verse_layer_type((VGeomData*)vnode->data, POLYGON_LAYER); - - if(vlayer) { - vface = vlayer->queue.first; - while(vface) { - next_vface = vface->next; - if(vface->vvert0==vvert) { - vface->v0 = vvert->id; - vface->counter--; - } - else if(vface->vvert1==vvert) { - vface->v1 = vvert->id; - vface->counter--; - } - else if(vface->vvert2==vvert) { - vface->v2 = vvert->id; - vface->counter--; - } - else if(vface->vvert3==vvert){ - vface->v3 = vvert->id; - vface->counter--; - } - - if(vface->counter<1 && !(vface->flag & FACE_SENT)) - send_verse_face(vface); - - vface = next_vface; - } - } -} - -/* - * find all VerseFace orphans, which needs incoming VerseVert - */ -static void find_vlayer_orphans(VNode *vnode, VerseVert *vvert) -{ - VLayer *vlayer; - VerseFace *vface, *next_vface; - unsigned int vertex_id = vvert->id; - - vlayer = find_verse_layer_type((VGeomData*)vnode->data, POLYGON_LAYER); - - if(vlayer) { - vface = vlayer->orphans.first; - while(vface){ - next_vface = vface->next; - if(vface->v0 == vertex_id) { - vface->vvert0 = vvert; - vface->counter--; - } - else if(vface->v1 == vertex_id) { - vface->vvert1 = vvert; - vface->counter--; - } - else if(vface->v2 == vertex_id) { - vface->vvert2 = vvert; - vface->counter--; - } - else if(vface->v3 == vertex_id) { - vface->vvert3 = vvert; - vface->counter--; - } - if(vface->counter<1) { - /* moving VerseFace orphan to dlist */ - move_face_orphan_to_dlist(vnode, vlayer, vface); - } - vface = next_vface; - } - } -} - -/* - * return number of VerseVerts missing to incoming VerseFace, set up pointers - * at VerseVerts - */ -static unsigned short test_incoming_verseface(VGeomData *geom, VerseFace *vface) -{ - struct VLayer *vert_layer; - struct VerseVert *vvert; - int counter=0; - - vert_layer = find_verse_layer_type(geom, VERTEX_LAYER); - - if(vface->v0 != -1){ - vvert = BLI_dlist_find_link(&(vert_layer->dl), vface->v0); - if(vvert==NULL) counter++; - else vface->vvert0 = vvert; - } - if(vface->v1 != -1){ - vvert = BLI_dlist_find_link(&(vert_layer->dl), vface->v1); - if(vvert==NULL) counter++; - else vface->vvert1 = vvert; - } - if(vface->v2 != -1){ - vvert = BLI_dlist_find_link(&(vert_layer->dl), vface->v2); - if(vvert==NULL) counter++; - else vface->vvert2 = vvert; - } - if(vface->v3 != -1){ - vvert = BLI_dlist_find_link(&(vert_layer->dl), vface->v3); - if(vvert==NULL) counter++; - else vface->vvert3 = vvert; - } - - return counter; -} - -/* - * try to find changed VerseFace in sending queue - */ -static VerseFace* find_changed_verse_face_in_queue(VLayer *vlayer, uint32 polygon_id) -{ - struct VerseFace *vface = vlayer->queue.first; - - while(vface){ - if(vface->id == polygon_id && vface->flag & FACE_CHANGED) { - return vface; - } - vface = vface->next; - } - return NULL; -} - -/* - * try to find VerseFace in queue - */ -static VerseFace* find_verse_face_in_queue( - VLayer *vlayer, - VNodeID node_id, - uint32 polygon_id, - uint32 v0, - uint32 v1, - uint32 v2, - uint32 v3) -{ - struct VerseFace *vface = vlayer->queue.first; - - while(vface){ - if((vface->v0==v0) && (vface->v1==v1) && (vface->v2==v2) && (vface->v3==v3)){ - vface->id = polygon_id; - vface->vlayer = vlayer; - return vface; - } - vface = vface->next; - } - return NULL; -} - -/* - * try to find VerseVert in queue - */ -static VerseVert* find_verse_vert_in_queue( - VLayer *vlayer, - VNodeID node_id, - uint32 vertex_id, - real32 x, - real32 y, - real32 z) -{ - struct VerseVert *vvert = vlayer->queue.first; - - while(vvert){ - if((vvert->vlayer->vnode->id == node_id) && (vvert->co[0] == x) && (vvert->co[1] == y) && (vvert->co[2] == z)) - { - vvert->id = vertex_id; - vvert->vlayer = vlayer; - - return vvert; - } - vvert = vvert->next; - } - - return NULL; -} - - -/* - * send quat of float values to verse server (4x32 bits) - */ -void send_verse_face_corner_quat_real32(quat_real32_item *item, short type) -{ - verse_send_g_polygon_set_corner_real32( - item->vlayer->vnode->id, - item->vlayer->id, - item->id, - item->value[0], - item->value[1], - item->value[2], - item->value[3]); -} - -/* - * send quat of unsigned int values to verse server (4x32 bits) - */ -void send_verse_face_corner_quat_uint32(quat_uint32_item *item, short type) -{ - verse_send_g_polygon_set_corner_uint32( - item->vlayer->vnode->id, - item->vlayer->id, - item->id, - item->value[0], - item->value[1], - item->value[2], - item->value[3]); -} - -/* - * send float value (32 bits) to verse server - */ -void send_verse_face_real32(real32_item *item, short type) -{ - verse_send_g_polygon_set_face_real32( - item->vlayer->vnode->id, - item->vlayer->id, - item->id, - item->value); -} - -/* - * send unsigned integer (32 bits) to verse server - */ -void send_verse_face_uint32(uint32_item *item, short type) -{ - verse_send_g_polygon_set_face_uint32( - item->vlayer->vnode->id, - item->vlayer->id, - item->id, - item->value); -} - -/* - * send unsigned char (8 bits) to verse server - */ -void send_verse_face_uint8(uint8_item *item, short type) -{ - verse_send_g_polygon_set_face_uint8( - item->vlayer->vnode->id, - item->vlayer->id, - item->id, - item->value); -} - -/* - * send vector of float values to verse server (3x32 bits) - */ -void send_verse_vert_vec_real32(vec_real32_item *item, short type) -{ - verse_send_g_vertex_set_xyz_real32( - item->vlayer->vnode->id, - item->vlayer->id, - item->id, - item->value[0], - item->value[1], - item->value[2]); -} - -/* - * send float value (32 bits) to verse server - */ -void send_verse_vert_real32(real32_item *item, short type) -{ - verse_send_g_vertex_set_real32( - item->vlayer->vnode->id, - item->vlayer->id, - item->id, - item->value); -} - -/* - * send unsigned integer (32 bits) to verse server - */ -void send_verse_vert_uint32(uint32_item *item, short type) -{ - verse_send_g_vertex_set_uint32( - item->vlayer->vnode->id, - item->vlayer->id, - item->id, - item->value); -} - -/* - * send delete command to verse server - */ -void send_verse_vertex_delete(VerseVert *vvert) -{ - verse_session_set(vvert->vlayer->vnode->session->vsession); - - vvert->flag |= VERT_OBSOLETE; - - verse_send_g_vertex_delete_real32(vvert->vlayer->vnode->id, vvert->id); -} - -/* - * send VerseLayer to verse server - */ -void send_verse_layer(VLayer *vlayer) -{ - verse_session_set(vlayer->vnode->session->vsession); - - verse_send_g_layer_create( - vlayer->vnode->id, - vlayer->id, - vlayer->name, - vlayer->type, - vlayer->def_int, - vlayer->def_real); -} - -/* - * send VerseVert to verse server - */ -void send_verse_vertex(VerseVert *vvert) -{ - /* new vertex position will not be sent, when vertex was deleted */ - if(vvert->flag & VERT_OBSOLETE) return; - - verse_session_set(vvert->vlayer->vnode->session->vsession); - - verse_send_g_vertex_set_xyz_real32( - vvert->vlayer->vnode->id, - vvert->vlayer->id, - vvert->id, - vvert->co[0], - vvert->co[2], - -vvert->co[1]); -} - -/* - * send delete command to verse server - */ -void send_verse_face_delete(VerseFace *vface) -{ - verse_session_set(vface->vlayer->vnode->session->vsession); - - vface->flag |= FACE_DELETED; - - verse_send_g_polygon_delete(vface->vlayer->vnode->id, vface->id); -} - -/* - * send VerseFace to verse server - */ -static void send_verse_face(VerseFace *vface) -{ - verse_session_set(vface->vlayer->vnode->session->vsession); - - vface->flag |= FACE_SENT; - - if(vface->v3 != -1) { - verse_send_g_polygon_set_corner_uint32( - vface->vlayer->vnode->id, - vface->vlayer->id, - vface->id, - vface->v0, - vface->v3, /* verse use clock-wise winding */ - vface->v2, - vface->v1); /* verse use clock-wise winding */ - } - else { - verse_send_g_polygon_set_corner_uint32( - vface->vlayer->vnode->id, - vface->vlayer->id, - vface->id, - vface->v0, - vface->v2, /* verse use clock-wise winding */ - vface->v1, /* verse use clock-wise winding */ - vface->v3); - } -} - -/* - * free VerseVert - */ -static void free_verse_vertex(VLayer *vlayer, VerseVert *vvert) -{ - /* free VerseVert */ - BLI_freelinkN(&(vlayer->orphans), vvert); -} - -/* - * free VerseFace (and blender face) - */ -static void free_verse_face(VLayer *vlayer, VerseFace *vface) -{ - /* free VerseFace */ - BLI_dlist_free_item(&(vlayer->dl), (unsigned int)vface->id); -} - -/* - * free VerseLayer data - */ -static void free_verse_layer_data(VNode *vnode, VLayer *vlayer) -{ - struct VerseFace *vface; - struct VerseVert *vvert; - - /* set up EditVert->vvert and EditFace->vface pointers to NULL */ - switch(vlayer->content) { - case VERTEX_LAYER: - vvert = (VerseVert*)vlayer->dl.lb.first; - while(vvert) { - ((VGeomData*)vnode->data)->post_vertex_free_constraint(vvert); - vvert = vvert->next; - } - break; - case POLYGON_LAYER: - vface = (VerseFace*)vlayer->dl.lb.first; - while(vface) { - ((VGeomData*)vnode->data)->post_polygon_free_constraint(vface); - vface = vface->next; - } - break; - default: - break; - } - /* free Verse Layer name */ - MEM_freeN(vlayer->name); - /* destroy VerseLayer data (vertexes, polygons, etc.) */ - BLI_dlist_destroy(&(vlayer->dl)); - /* free unsent data */ - BLI_freelistN(&(vlayer->queue)); - /* free orphans */ - BLI_freelistN(&(vlayer->orphans)); -} - -/* - * free all unneeded VerseVerts waiting for deleting - */ -static void free_unneeded_verseverts_of_verseface(VNode *vnode, VerseFace *vface) -{ - struct VLayer *vert_vlayer; - - /* find layer containing vertexes */ - vert_vlayer = find_verse_layer_type((VGeomData*)vnode->data, VERTEX_LAYER); - - /* free all "deleted" VerseVert waiting for deleting this VerseFace */ - - if((vface->vvert0->counter < 1) && (vface->vvert0->flag & VERT_DELETED)) { - ((VGeomData*)vnode->data)->post_vertex_delete(vface->vvert0); - free_verse_vertex(vert_vlayer, vface->vvert0); - vface->vvert0 = NULL; - } - if((vface->vvert1->counter < 1) && (vface->vvert1->flag & VERT_DELETED)) { - ((VGeomData*)vnode->data)->post_vertex_delete(vface->vvert1); - free_verse_vertex(vert_vlayer, vface->vvert1); - vface->vvert1 = NULL; - } - if((vface->vvert2->counter < 1) && (vface->vvert2->flag & VERT_DELETED)) { - ((VGeomData*)vnode->data)->post_vertex_delete(vface->vvert2); - free_verse_vertex(vert_vlayer, vface->vvert2); - vface->vvert2 = NULL; - } - if((vface->vvert3) && (vface->vvert3->counter < 1) && (vface->vvert3->flag & VERT_DELETED)) { - ((VGeomData*)vnode->data)->post_vertex_delete(vface->vvert3); - free_verse_vertex(vert_vlayer, vface->vvert3); - vface->vvert3 = NULL; - } -} - -/* - * This function create VerseVert and returns pointer on this vertex - */ -VerseVert* create_verse_vertex( - VLayer *vlayer, - uint32 vertex_id, - real32 x, - real32 y, - real32 z) -{ - struct VerseVert *vvert; - - vvert = (VerseVert*)MEM_mallocN(sizeof(VerseVert), "VerseVert"); - - /* set up pointer on parent node */ - vvert->vlayer = vlayer; - vvert->id = vertex_id; - /* position */ - vvert->co[0] = x; - vvert->co[1] = y; - vvert->co[2] = z; - /* normal */ - vvert->no[0] = vvert->no[1] = vvert->no[2] = 0.0; - /* blender internals */ - vvert->flag = 0; - vvert->counter = 0; - vvert->vertex = NULL; - - /* increase layer counter of vertexes */ - vlayer->counter++; - - return vvert; -} - -/* - * this function creates fake VerseEdge and returns pointer at this edge - */ -VerseEdge *create_verse_edge(uint32 v0, uint32 v1) -{ - struct VerseEdge *vedge; - - vedge = (VerseEdge*)MEM_mallocN(sizeof(VerseEdge), "VerseEdge"); - - vedge->v0 = v0; - vedge->v1 = v1; - vedge->counter = 0; - - return vedge; -} - -/* - * this function will create new VerseFace and will return pointer on such Face - */ -VerseFace* create_verse_face( - VLayer *vlayer, - uint32 polygon_id, - uint32 v0, - uint32 v1, - uint32 v2, - uint32 v3) -{ - struct VerseFace *vface; - - vface = (VerseFace*)MEM_mallocN(sizeof(VerseFace), "VerseFace"); - - /* verse data */ - vface->vlayer = vlayer; - vface->id = polygon_id; - - vface->vvert0 = NULL; - vface->vvert1 = NULL; - vface->vvert2 = NULL; - vface->vvert3 = NULL; - - vface->v0 = v0; - vface->v1 = v1; - vface->v2 = v2; - vface->v3 = v3; - - /* blender data */ - vface->face = NULL; - vface->flag = 0; - vface->counter = 4; - - /* increase layer counter of faces */ - vlayer->counter++; - - return vface; -} - -/* - * create and return VerseLayer - */ -VLayer *create_verse_layer( - VNode *vnode, - VLayerID layer_id, - const char *name, - VNGLayerType type, - uint32 def_integer, - real64 def_real) -{ - struct VLayer *vlayer; - - /* add layer to the DynamicList */ - vlayer = (VLayer*)MEM_mallocN(sizeof(VLayer), "VerseLayer"); - - /* store all relevant info to the vlayer and set up vlayer */ - vlayer->vnode = vnode; - vlayer->id = layer_id; - vlayer->name = (char*)MEM_mallocN(sizeof(char)*(sizeof(name)+1),"Verse Layer name"); - strcpy(vlayer->name, name); - vlayer->type = type; - vlayer->def_int = def_integer; - vlayer->def_real = def_real; - - if((type == VN_G_LAYER_VERTEX_XYZ) && (layer_id == 0)) - vlayer->content = VERTEX_LAYER; - else if((type == VN_G_LAYER_POLYGON_CORNER_UINT32) && (layer_id == 1)) - vlayer->content = POLYGON_LAYER; - else - vlayer->content = -1; - - /* initialize DynamicList in the vlayer (vertexes, polygons, etc.)*/ - BLI_dlist_init(&(vlayer->dl)); - /* initialization of queue of layer */ - vlayer->queue.first = vlayer->queue.last = NULL; - /* initialization of list of orphans */ - vlayer->orphans.first = vlayer->orphans.last = NULL; - /* initialize number of sent items (vertexes, faces, etc) */ - vlayer->counter = 0; - /* initialize flag */ - vlayer->flag = 0; - - /* set up methods */ - //XXX vlayer->post_layer_create = post_layer_create; - //XXX vlayer->post_layer_destroy = post_layer_destroy; - - return vlayer; -} - -/* - * create geometry data - */ -VGeomData *create_geometry_data(void) -{ - struct VGeomData *geom; - - geom = (VGeomData*)MEM_mallocN(sizeof(VGeomData), "VerseGeometryData"); - BLI_dlist_init(&(geom->layers)); - geom->vlink = NULL; - geom->queue.first = geom->queue.last = NULL; - geom->mesh = NULL; - geom->editmesh = NULL; - - /* initialize list of fake verse edges and initialize verse edge hash */ - geom->edges.first = geom->edges.last = NULL; - geom->hash = MEM_callocN(VEDHASHSIZE*sizeof(HashVerseEdge), "verse hashedge tab"); - - /* set up methods */ - //XXX geom->post_vertex_create = post_vertex_create; - //XXX geom->post_vertex_set_xyz = post_vertex_set_xyz; - //XXX geom->post_vertex_delete = post_vertex_delete; - //XXX geom->post_vertex_free_constraint = post_vertex_free_constraint; - //XXX geom->post_polygon_create = post_polygon_create; - //XXX geom->post_polygon_set_corner = post_polygon_set_corner; - //XXX geom->post_polygon_delete = post_polygon_delete; - //XXX geom->post_polygon_free_constraint = post_polygon_free_constraint; - //XXX geom->post_geometry_free_constraint = post_geometry_free_constraint; - //XXX geom->post_polygon_set_uint8 = post_polygon_set_uint8; - - return geom; -} - -/* Create item containing 4 floats */ -static quat_real32_item *create_quat_real32_item( - VLayer *vlayer, - uint32 item_id, - real32 v0, - real32 v1, - real32 v2, - real32 v3) -{ - struct quat_real32_item *item; - - item = (quat_real32_item*)MEM_mallocN(sizeof(quat_real32_item), "quat_real32_item"); - - item->vlayer = vlayer; - item->id = item_id; - item->value[0] = v0; - item->value[1] = v1; - item->value[2] = v2; - item->value[3] = v3; - - return item; -} - -/* Create item containing 1 float */ -static real32_item *create_real32_item(VLayer *vlayer, uint32 item_id, real32 value) -{ - struct real32_item *item; - - item = (real32_item*)MEM_mallocN(sizeof(real32_item), "real32_item"); - - item->vlayer = vlayer; - item->id = item_id; - item->value = value; - - return item; -} - -/* Create item containing 1 integer */ -static uint32_item *create_uint32_item(VLayer *vlayer, uint32 item_id, uint32 value) -{ - struct uint32_item *item; - - item = (uint32_item*)MEM_mallocN(sizeof(uint32_item), "uint32_item"); - - item->vlayer = vlayer; - item->id = item_id; - item->value = value; - - return item; -} - -/* Create item containing 1 byte */ -static uint8_item *create_uint8_item(VLayer *vlayer, uint32 item_id, uint8 value) -{ - struct uint8_item *item; - - item = (uint8_item*)MEM_mallocN(sizeof(uint8_item), "uint8_item"); - - item->vlayer = vlayer; - item->id = item_id; - item->value = value; - - return item; -} - -/* - * callback function: vertex crease was set - */ -static void cb_g_crease_set_vertex( - void *user_data, - VNodeID node_id, - const char *layer, - uint32 def_crease) -{ -} - -/* - * we have to test corretness of incoming data from verse server - * no two vertexes can have the same index - */ -static char test_polygon_set_corner_uint32( - uint32 v0, - uint32 v1, - uint32 v2, - uint32 v3) -{ - if((v0==v1) || (v0==v2) || (v0==v3) || (v1==v2) || (v1==v3) || (v2==v3)) - return 0; - else - return 1; -} - -/* - * try to find verse layer in sending queue of verse geometry node - */ -static VLayer *find_vlayer_in_sending_queue(VNode *vnode, VLayerID layer_id) -{ - struct VLayer *vlayer; - - /* try to find verse layyer in sending queue */ - vlayer = ((VGeomData*)vnode->data)->queue.first; - while(vlayer) { - if(vlayer->id==layer_id) return vlayer; - vlayer = vlayer->next; - } - - return NULL; -} - -/* - * this function will find edge in hash table, hash function isn't too optimal (it needs - * lot of memory for every verse node), but it works without any bug - */ -static VerseEdge* find_verse_edge(VNode *vnode, uint32 v0, uint32 v1) -{ - struct HashVerseEdge *hve; - - if(((VGeomData*)vnode->data)->hash==NULL) - ((VGeomData*)vnode->data)->hash = MEM_callocN(VEDHASHSIZE*sizeof(HashVerseEdge), "verse hashedge tab"); - - hve = ((VGeomData*)vnode->data)->hash + VEDHASH(v0, v1);; - while(hve) { - /* edge v0---v1 is the same edge as v1---v0 */ - if(hve->vedge && ((hve->vedge->v0==v0 && hve->vedge->v1==v1) || (hve->vedge->v0==v1 && hve->vedge->v1==v0))) return hve->vedge; - hve = hve->next; - } - - return NULL; -} - -/* - * insert hash of verse edge to hash table - */ -static void insert_verse_edgehash(VNode *vnode, VerseEdge *vedge) -{ - struct HashVerseEdge *first, *hve; - - if(((VGeomData*)vnode->data)->hash==NULL) - ((VGeomData*)vnode->data)->hash = MEM_callocN(VEDHASHSIZE*sizeof(HashVerseEdge), "verse hashedge tab"); - - first = ((VGeomData*)vnode->data)->hash + VEDHASH(vedge->v0, vedge->v1); - - if(first->vedge==NULL) { - first->vedge = vedge; - } - else { - hve = &(vedge->hash); - hve->vedge = vedge; - hve->next = first->next; - first->next = hve; - } -} - -/* - * remove hash of verse edge from hash table - */ -static void remove_verse_edgehash(VNode *vnode, VerseEdge *vedge) -{ - struct HashVerseEdge *first, *hve, *prev; - - hve = first = ((VGeomData*)vnode->data)->hash + VEDHASH(vedge->v0, vedge->v1); - - while(hve) { - if(hve->vedge == vedge) { - if(hve==first) { - if(first->next) { - hve = first->next; - first->vedge = hve->vedge; - first->next = hve->next; - } - else { - hve->vedge = NULL; - } - } - else { - prev->next = hve->next; - } - return; - } - prev = hve; - hve = hve->next; - } -} - -/* - * this function will try to remove existing fake verse edge, when this verse - * edge is still used by some faces, then counter will be only decremented - */ -static void remove_verse_edge(VNode *vnode, uint32 v0, uint32 v1) -{ - struct VerseEdge *vedge; - - vedge = find_verse_edge(vnode, v0, v1); - if(vedge) { - vedge->counter--; - if(vedge->counter==0) { - remove_verse_edgehash(vnode, vedge); - BLI_freelinkN(&(((VGeomData*)vnode->data)->edges), vedge); - } - } - else { - printf("error: remove_verse_edge %d, %d\n", v0, v1); - } -} - -/* - * this function will try to add new fake verse edge, when no such edge exist, - * when such edge exist, then only counter of edge will be incremented - */ -static void add_verse_edge(VNode *vnode, uint32 v0, uint32 v1) -{ - struct VerseEdge *vedge; - - vedge = find_verse_edge(vnode, v0, v1); - if(!vedge) { - if(v0!=v1) { - vedge = create_verse_edge(v0, v1); - BLI_addtail(&(((VGeomData*)vnode->data)->edges), vedge); - insert_verse_edgehash(vnode, vedge); - } - else { - printf("error:add_verse_edge: %d, %d\n", v0, v1); - return; - } - } - vedge->counter++; -} - -/* - * verse face was deleted ... update edge hash - */ -static void update_edgehash_of_deleted_verseface(VNode *vnode, VerseFace *vface) -{ - uint32 v0, v1, v2, v3; /* verse vertex indexes of deleted verse face */ - - v0 = vface->vvert0->id; - v1 = vface->vvert1->id; - v2 = vface->vvert2->id; - v3 = vface->vvert3 ? vface->vvert3->id : -1; - - remove_verse_edge(vnode, v0, v1); - remove_verse_edge(vnode, v1, v2); - if(v3!=-1) { - remove_verse_edge(vnode, v2, v3); - remove_verse_edge(vnode, v3, v0); - } - else { - remove_verse_edge(vnode, v2, v0); - } -} - -/* - * existing verse face was changed ... update edge hash - */ -static void update_edgehash_of_changed_verseface( - VNode *vnode, - VerseFace *vface, - uint32 v0, - uint32 v1, - uint32 v2, - uint32 v3) -{ - uint32 ov0, ov1, ov2, ov3; /* old indexes at verse vertexes*/ - - ov0 = vface->vvert0->id; - ov1 = vface->vvert1->id; - ov2 = vface->vvert2->id; - ov3 = vface->vvert3 ? vface->vvert3->id : -1; - - /* 1st edge */ - if(v0!=ov0 || v1!=ov1) { - remove_verse_edge(vnode, ov0, ov1); - add_verse_edge(vnode, v0, v1); - } - - /* 2nd edge */ - if(v1!=ov1 || v2!=ov2) { - remove_verse_edge(vnode, ov1, ov2); - add_verse_edge(vnode, v1, v2); - } - - /* 3rd edge */ - if(v2!=ov2 || v3!=ov3 || v0!=ov0) { - if(ov3!=-1) { - remove_verse_edge(vnode, ov2, ov3); - if(v3!=-1) { - add_verse_edge(vnode, v2, v3); /* new 3rd edge (quat->quat) */ - } - else { - remove_verse_edge(vnode, ov3, ov0); /* old edge v3,v0 of quat have to be removed */ - add_verse_edge(vnode, v2, v0); /* new 3rd edge (quat->triangle) */ - } - } - else { - remove_verse_edge(vnode, ov2, ov0); - if(v3!=-1) { - add_verse_edge(vnode, v2, v3); /* new 3rd edge (triangle->quat) */ - } - else { - add_verse_edge(vnode, v2, v0); /* new 3rd edge (triangle->triangle) */ - } - } - } - - /* 4th edge */ - if(v3!=-1 && (v3!=ov3 || v0!=ov0)) { - remove_verse_edge(vnode, ov3, ov0); - add_verse_edge(vnode, v3, v0); - } -} - -/* - * new verse face was created ... update list of edges and edge has - */ -static void update_edgehash_of_new_verseface( - VNode *vnode, - uint32 v0, - uint32 v1, - uint32 v2, - uint32 v3) -{ - /* when edge already exists, then only its counter is incremented, - * look at commentary of add_verse_edge() function */ - add_verse_edge(vnode, v0, v1); - add_verse_edge(vnode, v1, v2); - if(v3!=-1) { - add_verse_edge(vnode, v2, v3); - add_verse_edge(vnode, v3, v0); - } - else { - add_verse_edge(vnode, v2, v0); - } -} - -/* - * callback function: edge crease was set - */ -static void cb_g_crease_set_edge( - void *user_data, - VNodeID node_id, - const char *layer, - uint32 def_crease) -{ -} - -/* - * callback function: float value for polygon was set up - */ -static void cb_g_polygon_set_face_real32( - void *user_def, - VNodeID node_id, - VLayerID layer_id, - uint32 polygon_id, - real32 value) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VLayer *vlayer; - struct real32_item *item; - - if(!session) return; - - /* find needed node (we can be sure, that it is geometry node) */ - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - /* find layer containing uint_8 data */ - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), (unsigned int)layer_id); - - /* try to find item*/ - item = BLI_dlist_find_link(&(vlayer->dl), polygon_id); - - if(item) { - item->value = value; - } - else { - item = create_real32_item(vlayer, polygon_id, value); - BLI_dlist_add_item_index(&(vlayer->dl), item, item->id); - } -} - -/* - * callback function: int values for polygon was set up - */ -static void cb_g_polygon_set_face_uint32( - void *user_def, - VNodeID node_id, - VLayerID layer_id, - uint32 polygon_id, - uint32 value) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VLayer *vlayer; - struct uint32_item *item; - - if(!session) return; - - /* find needed node (we can be sure, that it is geometry node) */ - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - /* find layer containing uint_8 data */ - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), (unsigned int)layer_id); - - /* try to find item*/ - item = BLI_dlist_find_link(&(vlayer->dl), polygon_id); - - if(item) { - item->value = value; - } - else { - item = create_uint32_item(vlayer, polygon_id, value); - BLI_dlist_add_item_index(&(vlayer->dl), item, item->id); - } -} - -/* - * callback function: uint8 value for polygon was set up - */ -static void cb_g_polygon_set_face_uint8( - void *user_def, - VNodeID node_id, - VLayerID layer_id, - uint32 polygon_id, - uint8 value) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VLayer *vlayer; - struct uint8_item *item; - - if(!session) return; - - /* find needed node (we can be sure, that it is geometry node) */ - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - /* find layer containing uint_8 data */ - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), (unsigned int)layer_id); - - /* try to find item*/ - item = BLI_dlist_find_link(&(vlayer->dl), polygon_id); - - if(item) { - item->value = value; - } - else { - item = create_uint8_item(vlayer, polygon_id, value); - BLI_dlist_add_item_index(&(vlayer->dl), item, item->id); - } -} - -/* - * callback function: float value for polygon corner was set up - */ -static void cb_g_polygon_set_corner_real32( - void *user_def, - VNodeID node_id, - VLayerID layer_id, - uint32 polygon_id, - real32 v0, - real32 v1, - real32 v2, - real32 v3) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VLayer *vlayer; - struct quat_real32_item *item; - - if(!session) return; - - /* find needed node (we can be sure, that it is geometry node) */ - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - /* find layer containing uint_8 data */ - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), (unsigned int)layer_id); - - /* try to find item*/ - item = BLI_dlist_find_link(&(vlayer->dl), polygon_id); - - if(item) { - item->value[0] = v0; - item->value[1] = v1; - item->value[2] = v2; - item->value[3] = v3; - } - else { - item = create_quat_real32_item(vlayer, polygon_id, v0, v1, v2, v3); - BLI_dlist_add_item_index(&(vlayer->dl), item, item->id); - } -} - -/* - * callback function: polygon is deleted - */ -static void cb_g_polygon_delete( - void *user_data, - VNodeID node_id, - uint32 polygon_id) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - VNode *vnode; - VLayer *vlayer; - VerseFace *vface; - - if(!session) return; - - /* find needed node (we can be sure, that it is geometry node) */ - vnode = BLI_dlist_find_link(&(session->nodes), node_id); - - /* find layer containing faces */ - vlayer = find_verse_layer_type((VGeomData*)vnode->data, POLYGON_LAYER); - - /* find wanted VerseFace */ - vface = BLI_dlist_find_link(&(vlayer->dl), polygon_id); - - if(!vface) return; - - /* update edge hash */ - update_edgehash_of_deleted_verseface(vnode, vface); - - ((VGeomData*)vnode->data)->post_polygon_delete(vface); - - /* decrease references at coresponding VerseVertexes */ - vface->vvert0->counter--; - vface->vvert1->counter--; - vface->vvert2->counter--; - if(vface->vvert3) vface->vvert3->counter--; - - /* delete unneeded VerseVertexes */ - free_unneeded_verseverts_of_verseface(vnode, vface); - - free_verse_face(vlayer, vface); -} - -/* - * callback function: new polygon (face) created or existing polygon was changed - */ -static void cb_g_polygon_set_corner_uint32( - void *user_data, - VNodeID node_id, - VLayerID layer_id, - uint32 polygon_id, - uint32 v0, - uint32 v1, - uint32 v2, - uint32 v3) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VLayer *vlayer; - struct VerseFace *vface=NULL; - - if(!session) return; - - /* try to find VerseNode */ - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - if(!vnode) return; - - /* try to find VerseLayer */ - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), (unsigned int)layer_id); - if(!vlayer) return; - - /* we have to test coretness of incoming data */ - if(!test_polygon_set_corner_uint32(v0, v1, v2, v3)) return; - - /* Blender uses different order of vertexes */ - if(v3!=-1) { /* quat swap */ - unsigned int v; v = v1; v1 = v3; v3 = v; - } - else { /* triangle swap */ - unsigned int v; v = v1; v1 = v2; v2 = v; - } - - /* try to find VerseFace */ - vface = (VerseFace*)BLI_dlist_find_link(&(vlayer->dl), (unsigned int)polygon_id); - - /* try to find modified VerseFace */ - if(!vface) { - vface = find_changed_verse_face_in_queue(vlayer, polygon_id); - if(vface) { - BLI_remlink(&(vlayer->queue), (void*)vface); - BLI_dlist_add_item_index(&(vlayer->dl), (void*)vface, (unsigned int)polygon_id); - } - } - - if(!vface) { - /* try to find VerseFace in list of VerseVaces created by me and set up polygon and - * layer ids */ - vface = find_verse_face_in_queue(vlayer, node_id, polygon_id, v0, v1, v2, v3); - - /* update edge hash */ - update_edgehash_of_new_verseface(vnode, v0, v1, v2, v3); - - if(vface){ - /* I creeated this face ... remove VerseFace from queue */ - BLI_remlink(&(vlayer->queue), (void*)vface); - } - else { - /* some other client created this face*/ - vface = create_verse_face(vlayer, polygon_id, v0, v1, v2, v3); - } - - vface->flag &= ~FACE_SENT; - - /* return number of missing verse vertexes */ - vface->counter = test_incoming_verseface((VGeomData*)vnode->data, vface); - - if(vface->counter < 1) { - /* when VerseFace received all needed VerseFaces, then it is moved - * to list of VerseFaces */ - BLI_dlist_add_item_index(&(vlayer->dl), (void*)vface, (unsigned int)polygon_id); - increase_verse_verts_references(vface); - recalculate_verseface_normals(vnode); - ((VGeomData*)vnode->data)->post_polygon_create(vface); - } - else { - /* when all needed VerseVertexes weren't received, then VerseFace is moved to - * the list of orphans waiting on needed vertexes */ - vface->flag |= FACE_RECEIVED; - BLI_addtail(&(vlayer->orphans), (void*)vface); - } - } - else { - VLayer *vert_vlayer = find_verse_layer_type((VGeomData*)vnode->data, VERTEX_LAYER); - /* VerseVertexes of existing VerseFace were changed (VerseFace will use some different - * VerseVertexes or it will use them in different order) */ - - /* update fake verse edges */ - update_edgehash_of_changed_verseface(vnode, vface, v0, v1, v2, v3); - - /* initialize count of unreceived vertexes needed for this face */ - vface->counter = 4; - - /* 1st corner */ - if(vface->vvert0->id != v0) { - /* decrease references of obsolete vertexes*/ - vface->vvert0->counter--; - /* delete this vertex, when it isn't used by any face and it was marked as deleted */ - if((vface->vvert0->counter < 1) && (vface->vvert0->flag & VERT_DELETED)) { - ((VGeomData*)vnode->data)->post_vertex_delete(vface->vvert0); - free_verse_vertex(vert_vlayer, vface->vvert0); - } - /* try to set up new pointer at verse vertex */ - vface->v0 = v0; - vface->vvert0 = BLI_dlist_find_link(&(vert_vlayer->dl), vface->v0); - if(vface->vvert0) { - /* increase references at new vertex */ - vface->vvert0->counter++; - /* decrease count of needed vertex to receive */ - vface->counter--; - } - - } - else - /* this corner wasn't changed */ - vface->counter--; - - /* 2nd corner */ - if(vface->vvert1->id != v1) { - vface->vvert1->counter--; - if((vface->vvert1->counter < 1) && (vface->vvert1->flag & VERT_DELETED)) { - ((VGeomData*)vnode->data)->post_vertex_delete(vface->vvert1); - free_verse_vertex(vert_vlayer, vface->vvert1); - } - vface->v1 = v1; - vface->vvert1 = BLI_dlist_find_link(&(vert_vlayer->dl), vface->v1); - if(vface->vvert1) { - vface->vvert1->counter++; - vface->counter--; - } - } - else - vface->counter--; - - /* 3rd corner */ - if(vface->vvert2->id != v2) { - vface->vvert2->counter--; - if((vface->vvert2->counter < 1) && (vface->vvert2->flag & VERT_DELETED)) { - ((VGeomData*)vnode->data)->post_vertex_delete(vface->vvert2); - free_verse_vertex(vert_vlayer, vface->vvert2); - } - vface->v2 = v2; - vface->vvert2 = BLI_dlist_find_link(&(vert_vlayer->dl), vface->v2); - if(vface->vvert2) { - vface->vvert2->counter++; - vface->counter--; - } - } - else - vface->counter--; - - /* 4th corner */ - if(vface->vvert3) { - if(vface->vvert3->id != v3) { - vface->vvert3->counter--; - if((vface->vvert3->counter < 1) && (vface->vvert3->flag & VERT_DELETED)) { - ((VGeomData*)vnode->data)->post_vertex_delete(vface->vvert3); - free_verse_vertex(vert_vlayer, vface->vvert3); - } - vface->v3 = v3; - if(v3 != -1) { - vface->vvert3 = BLI_dlist_find_link(&(vert_vlayer->dl), vface->v3); - if(vface->vvert3) { - vface->vvert3->counter++; - vface->counter--; - } - } - else { - /* this is some special case, this face hase now only 3 corners - * quat -> triangle */ - vface->vvert3 = NULL; - vface->counter--; - } - } - } - else if(v3 != -1) - /* this is some special case, 4th corner of this polygon was created - * triangle -> quat */ - vface->v3 = v3; - vface->vvert3 = BLI_dlist_find_link(&(vert_vlayer->dl), vface->v3); - if(vface->vvert3) { - vface->vvert3->counter++; - vface->counter--; - } - else { - vface->v3 = -1; - vface->counter--; - } - - vface->flag &= ~FACE_SENT; - vface->flag |= FACE_CHANGED; - - if(vface->counter<1) { - vface->flag &= ~FACE_CHANGED; - recalculate_verseface_normals(vnode); - ((VGeomData*)vnode->data)->post_polygon_set_corner(vface); - } - else { - /* when all needed VerseVertexes weren't received, then VerseFace is added to - * the list of orphans waiting on needed vertexes */ - BLI_dlist_rem_item(&(vlayer->dl), vface->id); - BLI_addtail(&(vlayer->orphans), (void*)vface); - } - } -} - -/* - * callback function: float value was set up for VerseVert with vertex_id - */ -static void cb_g_vertex_set_real32( - void *user_def, - VNodeID node_id, - VLayerID layer_id, - uint32 vertex_id, - real32 value) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VLayer *vlayer; - struct real32_item *item; - - if(!session) return; - - /* find needed node (we can be sure, that it is geometry node) */ - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - /* find layer containing uint_8 data */ - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), (unsigned int)layer_id); - - /* try to find item*/ - item = BLI_dlist_find_link(&(vlayer->dl), vertex_id); - - if(item) { - item->value = value; - } - else { - item = create_real32_item(vlayer, vertex_id, value); - BLI_dlist_add_item_index(&(vlayer->dl), item, item->id); - } -} - -/* - * callback function: int value was set up for VerseVert with vertex_id - */ -static void cb_g_vertex_set_uint32( - void *user_def, - VNodeID node_id, - VLayerID layer_id, - uint32 vertex_id, - uint32 value) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VLayer *vlayer; - struct uint32_item *item; - - if(!session) return; - - /* find needed node (we can be sure, that it is geometry node) */ - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - /* find layer containing uint_8 data */ - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), (unsigned int)layer_id); - - /* try to find item*/ - item = BLI_dlist_find_link(&(vlayer->dl), vertex_id); - - if(item) { - item->value = value; - } - else { - item = create_uint32_item(vlayer, vertex_id, value); - BLI_dlist_add_item_index(&(vlayer->dl), item, item->id); - } -} - -/* - * callback function: polygon was deleted - */ -static void cb_g_vertex_delete_real32( - void *user_data, - VNodeID node_id, - uint32 vertex_id) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - VNode *vnode=NULL; - VLayer *vert_vlayer=NULL; - VerseVert *vvert=NULL; - - if(!session) return; - - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - vert_vlayer = find_verse_layer_type((VGeomData*)vnode->data, VERTEX_LAYER); - - vvert = BLI_dlist_find_link(&(vert_vlayer->dl), (unsigned int)vertex_id); - - if(!vvert) return; - - if(vvert->counter < 1) { - ((VGeomData*)vnode->data)->post_vertex_delete(vvert); - BLI_dlist_free_item(&(vert_vlayer->dl), (unsigned int)vertex_id); - } - else { - /* some VerseFace(s) still need VerseVert, remove verse vert from - * list verse vertexes and put it to list of orphans */ - vvert->flag |= VERT_DELETED; - BLI_dlist_rem_item(&(vert_vlayer->dl), (unsigned int)vertex_id); - BLI_addtail(&(vert_vlayer->orphans), vvert); - } -} - -/* - * callback function: position of one vertex was changed or new vertex was created - */ -static void cb_g_vertex_set_xyz_real32( - void *user_data, - VNodeID node_id, - VLayerID layer_id, - uint32 vertex_id, - real32 x, - real32 y, - real32 z) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode = NULL; - struct VLayer *vlayer = NULL; - struct VerseVert *vvert = NULL; - real32 tmp; - - if(!session) return; - - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - if(!vnode)return; - - vlayer = (VLayer*)BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), (unsigned int)layer_id); - if(!vlayer) return; - - /* switch axis orientation */ - tmp = y; - y = -z; - z = tmp; - - if(vlayer->id == 0) { - /* try to pick up verse vert from DynamicList */ - vvert = (VerseVert*)BLI_dlist_find_link(&(vlayer->dl), (unsigned int)vertex_id); - - if(vvert) { - if(vvert->flag & VERT_OBSOLETE) return; - - if (vvert->flag & VERT_LOCKED) { - /* this application changed position of this vertex */ - if((vvert->co[0]==x) && (vvert->co[1]==y) && (vvert->co[2]==z)) { - /* unlock vertex position */ - vvert->flag &= ~VERT_LOCKED; - /* call post_vertex_set_xyz only, when position of vertex is - * obsolete ... the new vertex position will be sent to - * verse server */ - if (vvert->flag & VERT_POS_OBSOLETE) { - ((VGeomData*)vnode->data)->post_vertex_set_xyz(vvert); - } - } - } - else { - /* somebody else changed position of this vertex*/ - if((vvert->co[0]!=x) || (vvert->co[1]!=y) || (vvert->co[2]!=z)) { - vvert->co[0] = x; - vvert->co[1] = y; - vvert->co[2] = z; - recalculate_verseface_normals(vnode); - ((VGeomData*)vnode->data)->post_vertex_set_xyz(vvert); - } - } - } - else { - /* create new verse vert */ - - /* test if we are authors of this vertex :-) */ - vvert = find_verse_vert_in_queue(vlayer, node_id, vertex_id, x, y, z); - - if(vvert) { - /* remove vert from queue */ - BLI_remlink(&(vlayer->queue), (void*)vvert); - /* add vvert to the dynamic list */ - BLI_dlist_add_item_index(&(vlayer->dl), (void*)vvert, (unsigned int)vertex_id); - /* set VerseVert flags */ - vvert->flag |= VERT_RECEIVED; - if(!(vvert->flag & VERT_POS_OBSOLETE)) - vvert->flag &= ~VERT_LOCKED; - /* find VerseFaces orphans */ - find_vlayer_orphans(vnode, vvert); - /* find unsent VerseFaces */ - find_unsent_faces(vnode, vvert); - } - else { - /* create new VerseVert */ - vvert = create_verse_vertex(vlayer, vertex_id, x, y, z); - /* add VerseVert to list of VerseVerts */ - BLI_dlist_add_item_index(&(vlayer->dl), (void*)vvert, (unsigned int)vertex_id); - /* set VerseVert flags */ - vvert->flag |= VERT_RECEIVED; - /* find VerseFaces orphans */ - find_vlayer_orphans(vnode, vvert); - } - - ((VGeomData*)vnode->data)->post_vertex_create(vvert); - } - } -} - -/* - * callback function for destroyng of verse layer - */ -static void cb_g_layer_destroy( - void *user_data, - VNodeID node_id, - VLayerID layer_id) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VLayer *vlayer; - - if(!session) return; - - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), node_id); - if(!vnode) return; - - vlayer = (VLayer*) BLI_dlist_find_link(&(((VGeomData*)vnode->data)->layers), layer_id); - - if(vlayer){ - /* free VerseLayer data */ - free_verse_layer_data(vnode, vlayer); - /* remove VerseLayer from list of verse layers */ - BLI_dlist_rem_item(&(((VGeomData*)vnode->data)->layers), layer_id); - /* do client dependent actions */ - vlayer->post_layer_destroy(vlayer); - /* free vlayer itself */ - MEM_freeN(vlayer); - } - -} - -/* - * callback function: new layer was created - */ -static void cb_g_layer_create( - void *user_data, - VNodeID node_id, - VLayerID layer_id, - const char *name, - VNGLayerType type, - uint32 def_integer, - real64 def_real) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode=NULL; - struct VLayer *vlayer=NULL; - - if(!session) return; - - /* find node of this layer*/ - vnode = BLI_dlist_find_link(&(session->nodes), node_id); - if(!vnode) return; - - /* when we created this layer, then subscribe to this layer */ - if(vnode->owner_id == VN_OWNER_MINE || session->flag & VERSE_AUTOSUBSCRIBE) - verse_send_g_layer_subscribe(node_id, layer_id, 0); - - /* try to find */ - if(vnode->owner_id == VN_OWNER_MINE) - vlayer = find_vlayer_in_sending_queue(vnode, layer_id); - - if(vlayer) { - /* remove vlayer form sending queue add verse layer to list of verse layers */ - BLI_remlink(&((VGeomData*)vnode->data)->queue, vlayer); - BLI_dlist_add_item_index(&((VGeomData*)vnode->data)->layers, (void*)vlayer, (unsigned int)vlayer->id); - /* send all not sent vertexes to verse server - * other items waiting in sending queue will be automaticaly sent to verse server, - * when verse vertexes will be received from verse server */ - if((vlayer->type == VN_G_LAYER_VERTEX_XYZ) && (layer_id==0)) { - struct VerseVert *vvert = (VerseVert*)vlayer->queue.first; - while(vvert) { - send_verse_vertex(vvert); - vvert = vvert->next; - } - } - } - else { - /* create new VerseLayer */ - vlayer = create_verse_layer(vnode, layer_id, name, type, def_integer, def_real); - /* add layer to the list of VerseLayers */ - BLI_dlist_add_item_index(&(((VGeomData*)vnode->data)->layers), (void*)vlayer, (unsigned int)layer_id); - } - - vlayer->flag |= LAYER_RECEIVED; - - /* post callback function */ - vlayer->post_layer_create(vlayer); -} - -/* - * this function will send destroy commands for all VerseVertexes and - * VerseFaces to verse server, but it will not send destroy commands - * for VerseLayers or geometry node, it can be used in other functions - * (undo, destroy geom node, some edit mesh commands, ... ), parameter of - * this function has to be geometry verse node - */ -void destroy_geometry(VNode *vnode) -{ - struct VLayer *vert_vlayer, *face_vlayer; - struct VerseFace *vface; - struct VerseVert *vvert; - - if(vnode->type != V_NT_GEOMETRY) return; - - face_vlayer = find_verse_layer_type((VGeomData*)vnode->data, POLYGON_LAYER); - vface = face_vlayer->dl.lb.first; - - while(vface) { - send_verse_face_delete(vface); - vface = vface->next; - } - - vert_vlayer = find_verse_layer_type((VGeomData*)vnode->data, VERTEX_LAYER); - vvert = vert_vlayer->dl.lb.first; - - while(vvert) { - send_verse_vertex_delete(vvert); - vvert = vvert->next; - } - - /* own destruction of local verse date will be executed, when client will - * receive apropriate callback commands from verse server */ -} - -/* - * free VGeomData - */ -void free_geom_data(VNode *vnode) -{ - struct VerseSession *session = vnode->session; - struct VLayer *vlayer; - - if(vnode->data){ - vlayer = (VLayer*)((VGeomData*)vnode->data)->layers.lb.first; - while(vlayer){ - /* unsubscribe from layer */ - if(session->flag & VERSE_CONNECTED) - verse_send_g_layer_unsubscribe(vnode->id, vlayer->id); - /* free VerseLayer data */ - free_verse_layer_data(vnode, vlayer); - /* next layer */ - vlayer = vlayer->next; - } - /* free constraint between vnode and mesh */ - ((VGeomData*)vnode->data)->post_geometry_free_constraint(vnode); - /* free all VerseLayers */ - BLI_dlist_destroy(&(((VGeomData*)vnode->data)->layers)); - /* free fake verse edges */ - BLI_freelistN(&((VGeomData*)vnode->data)->edges); - /* free edge hash */ - MEM_freeN(((VGeomData*)vnode->data)->hash); - } -} - -void set_geometry_callbacks(void) -{ - /* new layer created */ - verse_callback_set(verse_send_g_layer_create, cb_g_layer_create, NULL); - /* layer was destroyed */ - verse_callback_set(verse_send_g_layer_destroy, cb_g_layer_destroy, NULL); - - /* position of vertex was changed */ - verse_callback_set(verse_send_g_vertex_set_xyz_real32, cb_g_vertex_set_xyz_real32, NULL); - /* vertex was deleted */ - verse_callback_set(verse_send_g_vertex_delete_real32, cb_g_vertex_delete_real32, NULL); - - /* callback functions for values being associated with vertexes */ - verse_callback_set(verse_send_g_vertex_set_uint32, cb_g_vertex_set_uint32, NULL); - verse_callback_set(verse_send_g_vertex_set_real32, cb_g_vertex_set_real32, NULL); - - /* new polygon was created / vertex(es) of polygon was set */ - verse_callback_set(verse_send_g_polygon_set_corner_uint32, cb_g_polygon_set_corner_uint32, NULL); - /* polygon was deleted */ - verse_callback_set(verse_send_g_polygon_delete, cb_g_polygon_delete, NULL); - - /* callback functions for values being associated with polygon corners */ - verse_callback_set(verse_send_g_polygon_set_corner_real32, cb_g_polygon_set_corner_real32, NULL); - /* callback functions for values being associated with faces */ - verse_callback_set(verse_send_g_polygon_set_face_uint8, cb_g_polygon_set_face_uint8, NULL); - verse_callback_set(verse_send_g_polygon_set_face_uint32, cb_g_polygon_set_face_uint32, NULL); - verse_callback_set(verse_send_g_polygon_set_face_real32, cb_g_polygon_set_face_real32, NULL); - - /* crease of vertex was set */ - verse_callback_set(verse_send_g_crease_set_vertex, cb_g_crease_set_vertex, NULL); - /* crease of edge was set */ - verse_callback_set(verse_send_g_crease_set_edge, cb_g_crease_set_edge, NULL); -} - -#endif diff --git a/source/blender/blenkernel/intern/verse_method.c b/source/blender/blenkernel/intern/verse_method.c deleted file mode 100644 index b95b302f6c6..00000000000 --- a/source/blender/blenkernel/intern/verse_method.c +++ /dev/null @@ -1,519 +0,0 @@ -/** - * $Id$ - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Contributor(s): Nathan Letwory. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef WITH_VERSE - -#include - -#include "MEM_guardedalloc.h" - -#include "DNA_listBase.h" -#include "DNA_userdef_types.h" -#include "DNA_text_types.h" - -#include "BLI_dynamiclist.h" -#include "BLI_blenlib.h" -#include "BLI_arithb.h" - -//XXX #include "BIF_verse.h" - -#include "BKE_library.h" -#include "BKE_text.h" -#include "BKE_verse.h" -#include "BKE_global.h" -#include "BKE_main.h" - -#include "verse.h" - -/* helper struct for creating method descriptions */ -typedef struct VMethodInfo { - const char *name; - uint8 param_count; - const VNOParamType param_type[4]; - const char *param_name[4]; - uint16 id; -} VMethodInfo; - -#ifdef VERSECHAT -/* array with methods for verse chat */ -static VMethodInfo vmethod_info[] = { - { "join", 1, { VN_O_METHOD_PTYPE_STRING }, { "channel"}}, - { "leave", 1, { VN_O_METHOD_PTYPE_STRING }, { "channel"}}, - { "hear", 3, { VN_O_METHOD_PTYPE_STRING, VN_O_METHOD_PTYPE_STRING, VN_O_METHOD_PTYPE_STRING }, { "channel", "from", "msg"}} -}; -#endif - -/* lookup a method group based on its name */ -struct VMethodGroup *lookup_vmethodgroup_name(ListBase *lb, const char *name) { - struct VMethodGroup *vmg; - - for(vmg= lb->first; vmg; vmg= vmg->next) - if(strcmp(vmg->name,name)==0) break; - - return vmg; -} - -/* lookup a method group based on its group_id */ -struct VMethodGroup *lookup_vmethodgroup(ListBase *lb, uint16 group_id) { - struct VMethodGroup *vmg; - - for(vmg= lb->first; vmg; vmg= vmg->next) - if(vmg->group_id==group_id) break; - - return vmg; -} - -/* lookup a method based on its name */ -struct VMethod *lookup_vmethod_name(ListBase *lb, const char *name) { - struct VMethod *vm; - for(vm= lb->first; vm; vm= vm->next) - if(strcmp(vm->name,name)==0) break; - - return vm; -} - -/* lookup a method based on its method_id */ -struct VMethod *lookup_vmethod(ListBase *lb, uint8 method_id) { - struct VMethod *vm; - for(vm= lb->first; vm; vm= vm->next) - if(vm->id==method_id) break; - - return vm; -} - -#ifdef VERSECHAT -/* - * send say command - */ -void send_say(const char *chan, const char *utter) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VMethodGroup *vmg; - struct VMethod *vm; - VNOPackedParams *utterpack; - VNOParam args[2]; - - vnode= (VNode *)(session->nodes.lb.first); - - for( ; vnode; vnode= vnode->next) { - if(strcmp(vnode->name, "tawksrv")==0) { - vmg= lookup_vmethodgroup_name(&(vnode->methodgroups), "tawk"); - if(!vmg) break; - vm= lookup_vmethod_name(&(vmg->methods), "say"); - if(!vm) break; - args[0].vstring= (char *)chan; - args[1].vstring= (char *)utter; - if((utterpack= verse_method_call_pack(vm->param_count, vm->param_type, args))!=NULL) { - verse_send_o_method_call(vnode->id, vmg->group_id, vm->id, vnode->session->avatar, utterpack); - } - break; - } - - } -} - -/* - * send logout command - */ -void send_logout(VNode *vnode) -{ - struct VMethodGroup *vmg; - struct VMethod *vm; - VNOPackedParams *pack; - - vnode->chat_flag = CHAT_LOGGED; - vmg= lookup_vmethodgroup_name(&(vnode->methodgroups), "tawk"); - if(!vmg) return; - vm= lookup_vmethod_name(&(vmg->methods), "logout"); - if(!vm) return; - - if((pack= verse_method_call_pack(vm->param_count, vm->param_type, NULL))!=NULL) { - verse_send_o_method_call(vnode->id, vmg->group_id, vm->id, vnode->session->avatar, pack); - } - vnode->chat_flag = CHAT_NOTLOGGED; -} - -/* - * send join command - */ -void send_join(VNode *vnode, const char *chan) -{ - struct VMethodGroup *vmg; - struct VMethod *vm; - VNOPackedParams *join; - VNOParam channel[1]; - - vmg= lookup_vmethodgroup_name(&(vnode->methodgroups), "tawk"); - if(!vmg) return; - vm= lookup_vmethod_name(&(vmg->methods), "join"); - if(!vm) return; - - channel[0].vstring= (char *)chan; - if((join= verse_method_call_pack(vm->param_count, vm->param_type, channel))!=NULL) { - verse_send_o_method_call(vnode->id, vmg->group_id, vm->id, vnode->session->avatar, join); - } -} - -/* - * send leave command - */ -void send_leave(VNode *vnode, const char *chan) -{ - struct VMethodGroup *vmg; - struct VMethod *vm; - VNOPackedParams *leave; - VNOParam channel[1]; - - vmg= lookup_vmethodgroup_name(&(vnode->methodgroups), "tawk"); - if(!vmg) return; - vm= lookup_vmethod_name(&(vmg->methods), "leave"); - if(!vm) return; - - channel[0].vstring= (char *)chan; - if((leave= verse_method_call_pack(vm->param_count, vm->param_type, channel))!=NULL) { - verse_send_o_method_call(vnode->id, vmg->group_id, vm->id, vnode->session->avatar, leave); - } -} - -/* - * send login command - */ -void send_login(VNode *vnode) -{ - struct VMethodGroup *vmg; - struct VMethod *vm; - VNOPackedParams *login; - VNOParam param[1]; - - vnode->chat_flag = CHAT_LOGGED; - vmg= lookup_vmethodgroup_name(&(vnode->methodgroups), "tawk"); - if(!vmg) return; - vm= lookup_vmethod_name(&(vmg->methods), "login"); - if(!vm) return; - - param[0].vstring= U.verseuser; - - if((login= verse_method_call_pack(vm->param_count, vm->param_type, param))!=NULL) { - verse_send_o_method_call(vnode->id, vmg->group_id, vm->id, vnode->session->avatar, login); - } - vnode->chat_flag = CHAT_LOGGED; - - vnode= lookup_vnode(vnode->session, vnode->session->avatar); - vmg= lookup_vmethodgroup_name(&(vnode->methodgroups), "tawk-client"); - if(!vmg) - verse_send_o_method_group_create(vnode->session->avatar, ~0, "tawk-client"); -} -#endif - -/* - * Free a VMethod - */ -void free_verse_method(VMethod *vm) { - if(!vm) return; - - MEM_freeN(vm->param_type); -} - -/* - * Free methods for VMethodGroup - */ -void free_verse_methodgroup(VMethodGroup *vmg) -{ - struct VMethod *vm, *tmpvm; - - if(!vmg) return; - - vm= vmg->methods.first; - while(vm) { - tmpvm=vm->next; - free_verse_method(vm); - vm= tmpvm; - } - BLI_freelistN(&(vmg->methods)); -} - -/* callback for method group creation */ -static void cb_o_method_group_create( - void *user_data, - VNodeID node_id, - uint16 group_id, - const char *name) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VMethodGroup *vmg; - - if(!session) return; - - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - vmg = lookup_vmethodgroup(&(vnode->methodgroups), group_id); - - /* create method group holder in node node_id */ - if(!vmg) { - vmg= MEM_mallocN(sizeof(VMethodGroup), "VMethodGroup"); - vmg->group_id = group_id; - vmg->methods.first = vmg->methods.last = NULL; - BLI_addtail(&(vnode->methodgroups), vmg); - printf("new method group with name %s (group_id %d) for node %u created\n", name, group_id, node_id); - } - - /* this ensures name of an existing group gets updated, in case it is changed */ - BLI_strncpy(vmg->name, (char *)name, 16); - - /* subscribe to method group */ - verse_send_o_method_group_subscribe(node_id, group_id); - -#ifdef VERSECHAT - /* if this is our own method group, register our methods */ - if(node_id==session->avatar) { - verse_send_o_method_create(node_id, group_id, (uint8)~0u, vmethod_info[0].name, - vmethod_info[0].param_count, - (VNOParamType *)vmethod_info[0].param_type, - (const char **)vmethod_info[0].param_name); - b_verse_update(); - verse_send_o_method_create(node_id, group_id, (uint8)~0u, vmethod_info[1].name, - vmethod_info[1].param_count, - (VNOParamType *)vmethod_info[1].param_type, - (const char **)vmethod_info[1].param_name); - b_verse_update(); - verse_send_o_method_create(node_id, group_id, (uint8)~0u, vmethod_info[2].name, - vmethod_info[2].param_count, - (VNOParamType *)vmethod_info[2].param_type, - (const char **)vmethod_info[2].param_name); - b_verse_update(); - } -#endif -} - -/* callback for method group destruction */ -static void cb_o_method_group_destroy( - void *user_data, - VNodeID node_id, - uint16 group_id, - const char *name) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VMethodGroup *vmg; - struct VMethod *vm; - - printf("method group %d destroyed\n", group_id); - - if(!session) return; - - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - for(vmg= vnode->methodgroups.first; vmg; vmg= vmg->next) - if(vmg->group_id==group_id) break; - - if(!vmg) return; /* method group doesn't exist? */ - - vmg->group_id = 0; - vmg->name[0] = '\0'; - vm= vmg->methods.first; - while(vm) { - /* free vm */ - - } - - /* TODO: unsubscribe from method group */ - BLI_remlink(&(vnode->methodgroups),vmg); - MEM_freeN(vmg); -} - -/* callback for method creation */ -static void cb_o_method_create( - void *user_data, - VNodeID node_id, - uint16 group_id, - uint16 method_id, - const char *name, - uint8 param_count, - const VNOParamType *param_type, - const char *param_name[]) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VMethodGroup *vmg; - struct VMethod *vm; - unsigned int size; - unsigned int i; - char *put; - - if(!session) return; - - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - vmg= lookup_vmethodgroup((&vnode->methodgroups), group_id); - - if(!vmg) return; - - vm= lookup_vmethod((&vmg->methods), method_id); - - if(!vm) { - vm= MEM_mallocN(sizeof(VMethod), "VMethod"); - vm->id= method_id; - vm->param_count= param_count; - size= param_count* (sizeof(*vm->param_type) + sizeof(*vm->param_name)); - for(i= 0; i param_type= MEM_mallocN(size, "param_type and param_name"); - memcpy(vm->param_type, param_type, sizeof(VNOParamType)*param_count); - vm->param_name= (char **)(vm->param_type + param_count); - put= (char *)(vm->param_name + param_count); - for(i= 0; i < param_count; i++) { - vm->param_name[i]= put; - strcpy(put, param_name[i]); - put += strlen(param_name[i]) + 1; - } - - BLI_addtail(&(vmg->methods), vm); -#ifdef VERSECHAT - if(strcmp(vmethod_info[0].name, name)==0) { - vmethod_info[0].id = method_id; - } -#endif - printf("method %s in group %d of node %u created\n", name, group_id, node_id); - } - - BLI_strncpy(vm->name, (char *)name, 500); -} - -/* callback for method destruction */ -static void cb_o_method_destroy( - void *user_data, - VNodeID node_id, - uint16 group_id, - uint16 method_id, - const char *name, - uint8 param_count, - const VNOParamType *param_type, - const char *param_name[]) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VMethodGroup *vmg; - struct VMethod *vm; - - if(!session) return; - - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - for(vmg= vnode->methodgroups.first; vmg; vmg= vmg->next) - if(vmg->group_id==group_id) break; - - if(!vmg) return; /* method group doesn't exist? */ - - for(vm= vmg->methods.first; vm; vm= vm->next) - if(vm->id==method_id) break; - - if(!vm) return; - - BLI_remlink(&(vmg->methods), vm); - MEM_freeN(vm->param_type); - MEM_freeN(vm); -} - -/* callback for method calls */ -static void cb_o_method_call(void *user_data, VNodeID node_id, uint8 group_id, uint8 method_id, VNodeID sender, VNOPackedParams *params) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VMethodGroup *vmg; - struct VMethod *vm; - Text *text; - int method_idx= -1; - - VNOParam arg[3]; - - if(!session) return; - - if(session->avatar!=node_id) return; - - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - vmg= lookup_vmethodgroup(&(vnode->methodgroups), group_id); - if(!vmg) return; - - vm= lookup_vmethod(&(vmg->methods), method_id); - if(!vm) return; -#ifdef VERSECHAT - if(strcmp(vm->name, "join")==0) method_idx=0; - if(strcmp(vm->name, "leave")==0) method_idx=1; - if(strcmp(vm->name, "hear")==0) method_idx=2; - if(method_idx>-1) - verse_method_call_unpack(params, vmethod_info[method_idx].param_count, vmethod_info[method_idx].param_type, arg); - - switch(method_idx) { - case 0: - printf("Joining channel %s\n",arg[0].vstring); - text=add_empty_text(); - text->flags |= TXT_ISCHAT; - rename_id(&(text->id), arg[0].vstring); - break; - case 1: - printf("Leaving channel %s\n",arg[0].vstring); - break; - case 2: - { - ListBase lb = G.main->text; - ID *id= (ID *)lb.first; - char showstr[1024]; - showstr[0]='\0'; - text = NULL; - sprintf(showstr, "%s: %s\n", arg[1].vstring, arg[2].vstring); - for(; id; id= id->next) { - if(strcmp(id->name+2, arg[0].vstring)==0 && strcmp(arg[0].vstring, "#server")!=0) { - text = (Text *)id; - break; - } - } - if(text) { - txt_insert_buf(text, showstr); - txt_move_eof(text, 0); -// XXX allqueue(REDRAWCHAT, 0); - } else { - printf("%s> %s: %s\n",arg[0].vstring, arg[1].vstring, arg[2].vstring); - } - } - break; - } -#endif -} - -void set_method_callbacks(void) -{ - /* create and destroy method groups */ - verse_callback_set(verse_send_o_method_group_create, cb_o_method_group_create, NULL); - verse_callback_set(verse_send_o_method_group_destroy, cb_o_method_group_destroy, NULL); - - /* create and destroy methods */ - verse_callback_set(verse_send_o_method_create, cb_o_method_create, NULL); - verse_callback_set(verse_send_o_method_destroy, cb_o_method_destroy, NULL); - - /* call methods */ - verse_callback_set(verse_send_o_method_call, cb_o_method_call, NULL); -} - -#endif diff --git a/source/blender/blenkernel/intern/verse_node.c b/source/blender/blenkernel/intern/verse_node.c deleted file mode 100644 index ee47896474a..00000000000 --- a/source/blender/blenkernel/intern/verse_node.c +++ /dev/null @@ -1,747 +0,0 @@ -/** - * $Id$ - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Contributor(s): Jiri Hnidek. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef WITH_VERSE - -#include - -#include "MEM_guardedalloc.h" - -#include "DNA_listBase.h" -#include "DNA_userdef_types.h" - -#include "BLI_dynamiclist.h" -#include "BLI_blenlib.h" - -//XXX #include "BIF_verse.h" - -#include "BKE_verse.h" - -#include "verse.h" - -/* function prototypes of static functions */ - /* for tags */ -static void free_verse_tag_data(struct VTag *vtag); -static struct VTag *find_tag_in_queue(struct VTagGroup *vtaggroup, const char *name); -static struct VTag *create_verse_tag(struct VTagGroup *vtaggroup, uint16 tag_id, const char *name, VNTagType type, const VNTag *tag); - /* for verse tag groups */ -static void free_verse_taggroup_data(struct VTagGroup *taggroup); -static struct VTagGroup *find_taggroup_in_queue(struct VNode *vnode, const char *name); -static struct VTagGroup *create_verse_taggroup(VNode *vnode, uint16 group_id, const char *name); - /* for verse nodes */ -static void move_verse_node_to_dlist(struct VerseSession *session, VNodeID vnode_id); - /* function prototypes of node callback functions */ -static void cb_tag_destroy(void *user_data, VNodeID node_id, uint16 group_id, uint16 tag_id); -static void cb_tag_create(void *user_data, VNodeID node_id, uint16 group_id, uint16 tag_id, const char *name, VNTagType type, const VNTag *tag); -static void cb_tag_group_destroy(void *user_data, VNodeID node_id, uint16 group_id); -static void cb_tag_group_create(void *user_data, VNodeID node_id, uint16 group_id, const char *name); -static void cb_node_name_set(void *user_data, VNodeID node_id, const char *name); -static void cb_node_destroy(void *user_data, VNodeID node_id); -static void cb_node_create(void *user_data, VNodeID node_id, uint8 type, VNodeID owner_id); - -/* - * send new tag to verse server - */ -void send_verse_tag(VTag *vtag) -{ - verse_send_tag_create(vtag->vtaggroup->vnode->id, - vtag->vtaggroup->id, - vtag->id, - vtag->name, - vtag->type, - vtag->tag); -} - -/* - * free tag data - */ -static void free_verse_tag_data(VTag *vtag) -{ - /* free name of verse tag */ - MEM_freeN(vtag->name); - /* free value of tag */ - MEM_freeN(vtag->tag); -} - -/* - * try to find tag in sending queue ... if tag will be found, then - * this function will removed tag from queue and will return pointer - * at this tag - */ -static VTag *find_tag_in_queue(VTagGroup *vtaggroup, const char *name) -{ - struct VTag *vtag; - - vtag = vtaggroup->queue.first; - - while(vtag) { - if(strcmp(vtag->name, name)==0) { - BLI_remlink(&(vtaggroup->queue), vtag); - break; - } - vtag = vtag->next; - } - - return vtag; -} - -/* - * create new verse tag - */ -static VTag *create_verse_tag( - VTagGroup *vtaggroup, - uint16 tag_id, - const char *name, - VNTagType type, - const VNTag *tag) -{ - struct VTag *vtag; - - vtag = (VTag*)MEM_mallocN(sizeof(VTag), "VTag"); - - vtag->vtaggroup = vtaggroup; - vtag->id = tag_id; - vtag->name = (char*)MEM_mallocN(sizeof(char)*(strlen(name)+1), "VTag name"); - strcpy(vtag->name, name); - vtag->type = type; - - vtag->tag = (VNTag*)MEM_mallocN(sizeof(VNTag), "VNTag"); - *vtag->tag = *tag; - - vtag->value = NULL; - - return vtag; -} - -/* - * send taggroup to verse server - */ -void send_verse_taggroup(VTagGroup *vtaggroup) -{ - verse_send_tag_group_create( - vtaggroup->vnode->id, - vtaggroup->id, - vtaggroup->name); -} - -/* - * free taggroup data - */ -static void free_verse_taggroup_data(VTagGroup *taggroup) -{ - struct VerseSession *session = taggroup->vnode->session; - struct VTag *vtag; - - vtag = taggroup->tags.lb.first; - - while(vtag) { - free_verse_tag_data(vtag); - vtag = vtag->next; - } - - /* unsubscribe from taggroup */ - if(session->flag & VERSE_CONNECTED) - verse_send_tag_group_unsubscribe(taggroup->vnode->id, taggroup->id); - - BLI_dlist_destroy(&(taggroup->tags)); - MEM_freeN(taggroup->name); -} - -/* - * move taggroup from queue to dynamic list with access array, - * set up taggroup id and return pointer at this taggroup - */ -static VTagGroup *find_taggroup_in_queue(VNode *vnode, const char *name) -{ - struct VTagGroup *vtaggroup; - - vtaggroup = vnode->queue.first; - - while(vtaggroup) { - if(strcmp(vtaggroup->name, name)==0) { - BLI_remlink(&(vnode->queue), vtaggroup); - break; - } - vtaggroup = vtaggroup->next; - } - - return vtaggroup; -} - -/* - * create new verse group of tags - */ -static VTagGroup *create_verse_taggroup(VNode *vnode, uint16 group_id, const char *name) -{ - struct VTagGroup *taggroup; - - taggroup = (VTagGroup*)MEM_mallocN(sizeof(VTagGroup), "VTagGroup"); - - taggroup->vnode = vnode; - taggroup->id = group_id; - taggroup->name = (char*)MEM_mallocN(sizeof(char)*(strlen(name)+1), "VTagGroup name"); - strcpy(taggroup->name, name); - - BLI_dlist_init(&(taggroup->tags)); - taggroup->queue.first = taggroup->queue.last = NULL; - - //XXX taggroup->post_tag_change = post_tag_change; - //XXX taggroup->post_taggroup_create = post_taggroup_create; - - return taggroup; -} - -/* - * move first VerseNode waiting in sending queue to dynamic list of VerseNodes - * (it usually happens, when "our" VerseNode was received from verse server) - */ -static void move_verse_node_to_dlist(VerseSession *session, VNodeID vnode_id) -{ - VNode *vnode; - - vnode = session->queue.first; - - if(vnode) { - BLI_remlink(&(session->queue), vnode); - BLI_dlist_add_item_index(&(session->nodes), (void*)vnode, vnode_id); - } -} - -/* - * send VerseNode to verse server - */ -void send_verse_node(VNode *vnode) -{ - verse_send_node_create( - vnode->id, - vnode->type, - vnode->session->avatar); -} - -/* - * free Verse Node data - */ -void free_verse_node_data(VNode *vnode) -{ - struct VerseSession *session = vnode->session; - struct VTagGroup *vtaggroup; - - /* free node data (object, geometry, etc.) */ - switch(vnode->type){ - case V_NT_OBJECT: - free_object_data(vnode); - break; - case V_NT_GEOMETRY: - free_geom_data(vnode); - break; - case V_NT_BITMAP: - free_bitmap_node_data(vnode); - break; - default: - break; - } - - /* free all tag groups in dynamic list with access array */ - vtaggroup = vnode->taggroups.lb.first; - while(vtaggroup) { - free_verse_taggroup_data(vtaggroup); - vtaggroup = vtaggroup->next; - } - BLI_dlist_destroy(&(vnode->taggroups)); - - /* free all tag groups still waiting in queue */ - vtaggroup = vnode->queue.first; - while(vtaggroup) { - free_verse_taggroup_data(vtaggroup); - vtaggroup = vtaggroup->next; - } - BLI_freelistN(&(vnode->queue)); - - /* unsubscribe from node */ - if(session->flag & VERSE_CONNECTED) - verse_send_node_unsubscribe(vnode->id); - - /* free node name */ - MEM_freeN(vnode->name); - vnode->name = NULL; - - /* free node data */ - MEM_freeN(vnode->data); - vnode->data = NULL; - -} - -/* - * free VerseNode - */ -void free_verse_node(VNode *vnode) -{ - free_verse_node_data(vnode); - - BLI_dlist_free_item(&(vnode->session->nodes), vnode->id); -} - -/* - * Find a Verse Node from session - */ -VNode* lookup_vnode(VerseSession *session, VNodeID node_id) -{ - struct VNode *vnode; - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - return vnode; -} - -/* - * create new Verse Node - */ -VNode* create_verse_node(VerseSession *session, VNodeID node_id, uint8 type, VNodeID owner_id) -{ - struct VNode *vnode; - - vnode = (VNode*)MEM_mallocN(sizeof(VNode), "VerseNode"); - - vnode->session = session; - vnode->id = node_id; - vnode->owner_id = owner_id; - vnode->name = NULL; - vnode->type = type; - - BLI_dlist_init(&(vnode->taggroups)); - vnode->queue.first = vnode->queue.last = NULL; - vnode->methodgroups.first = vnode->methodgroups.last = NULL; - - vnode->data = NULL; - - vnode->counter = 0; - - vnode->flag = 0; -#ifdef VERSECHAT - vnode->chat_flag = CHAT_NOTLOGGED; -#endif - - //XXX vnode->post_node_create = post_node_create; - //XXX vnode->post_node_destroy = post_node_destroy; - //XXX vnode->post_node_name_set = post_node_name_set; - - return vnode; -} - -/* - * callback function: tag was destroyed - */ -static void cb_tag_destroy( - void *user_data, - VNodeID node_id, - uint16 group_id, - uint16 tag_id) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VTagGroup *vtaggroup; - struct VTag *vtag; - - if(!session) return; - - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - if(!vnode) return; - - /* try to find tag group in list of tag groups */ - vtaggroup = BLI_dlist_find_link(&(vnode->taggroups), group_id); - - if(!vtaggroup) return; - - /* try to find verse tag in dynamic list of tags in tag group */ - vtag = (VTag*)BLI_dlist_find_link(&(vtaggroup->tags), tag_id); - - if(vtag) { - free_verse_tag_data(vtag); - BLI_dlist_free_item(&(vtaggroup->tags), vtag->id); - } -} - -/* - * callback function: new tag was created - */ -static void cb_tag_create( - void *user_data, - VNodeID node_id, - uint16 group_id, - uint16 tag_id, - const char *name, - VNTagType type, - const VNTag *tag) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VTagGroup *vtaggroup; - struct VTag *vtag; - - if(!session) return; - - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - if(!vnode) return; - - /* try to find tag group in list of tag groups */ - vtaggroup = BLI_dlist_find_link(&(vnode->taggroups), group_id); - - if(!vtaggroup) return; - - /* try to find verse tag in dynamic list of tags in tag group */ - vtag = (VTag*)BLI_dlist_find_link(&(vtaggroup->tags), tag_id); - - if(!vtag) { - /* we will try to find vtag in sending queue */ - vtag = find_tag_in_queue(vtaggroup, name); - - /* when we didn't create this tag, then we will have to create one */ - if(!vtag) vtag = create_verse_tag(vtaggroup, tag_id, name, type, tag); - else vtag->id = tag_id; - - /* add tag to the list of tags in tag group */ - BLI_dlist_add_item_index(&(vtaggroup->tags), vtag, tag_id); - - /* post change/create method */ - vtaggroup->post_tag_change(vtag); - } - else { - /* this tag exists, then we will propably change value of this tag */ - if((vtag->type != type) || (strcmp(vtag->name, name)!=0)) { - /* changes of type or name are not allowed and such - * stupid changes will be returned back */ - send_verse_tag(vtag); - } - else { - /* post change/create method */ - vtaggroup->post_tag_change(vtag); - } - } -} - -/* - * callback function: tag group was destroyed - */ -static void cb_tag_group_destroy( - void *user_data, - VNodeID node_id, - uint16 group_id) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VTagGroup *vtaggroup; - - if(!session) return; - - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - if(!vnode) return; - - vtaggroup = BLI_dlist_find_link(&(vnode->taggroups), group_id); - - if(vtaggroup) { - free_verse_taggroup_data(vtaggroup); - BLI_dlist_free_item(&(vnode->taggroups), vtaggroup->id); - } -} - -/* - * callback function: new tag group was created - */ -static void cb_tag_group_create( - void *user_data, - VNodeID node_id, - uint16 group_id, - const char *name) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VTagGroup *vtaggroup; - - if(!session) return; - - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - if(!vnode) return; - - /* name of taggroup has to begin with string "blender:" */ - if(strncmp("blender:", name, 8)) return; - - /* try to find tag group in list of tag groups */ - vtaggroup = BLI_dlist_find_link(&(vnode->taggroups), group_id); - - if(!vtaggroup) { - /* subscribe to tag group (when new tag will be created, then blender will - * receive command about it) */ - verse_send_tag_group_subscribe(vnode->id, group_id); - verse_callback_update(0); - - /* try to find taggroup in waiting queue */ - vtaggroup = find_taggroup_in_queue(vnode, name); - - /* if no taggroup exist, then new has to be created */ - if(!vtaggroup) vtaggroup = create_verse_taggroup(vnode, group_id, name); - else vtaggroup->id = group_id; - - /* add tag group to dynamic list with access array */ - BLI_dlist_add_item_index(&(vnode->taggroups), (void*)vtaggroup, (unsigned int)group_id); - - /* post create method */ - vtaggroup->post_taggroup_create(vtaggroup); - } - else { - /* this taggroup exist and somebody try to change its name */ - if(strcmp(vtaggroup->name, name)!=0) { - /* blender doesn't allow such stupid and dangerous things */ - send_verse_taggroup(vtaggroup); - } - } -} - -/* - * callback function: change name of node - */ -static void cb_node_name_set( - void *user_data, - VNodeID node_id, - const char *name) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - - if(!session) return; - - vnode = (VNode*)BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - if(vnode && name) { - if(!vnode->name) { - vnode->name = (char*)MEM_mallocN(sizeof(char)*(strlen(name)+1), "VerseNode name"); - } - else if(strlen(name) > strlen(vnode->name)) { - MEM_freeN(vnode->name); - vnode->name = (char*)MEM_mallocN(sizeof(char)*(strlen(name)+1), "VerseNode name"); - } - strcpy(vnode->name, name); - - vnode->post_node_name_set(vnode); - } -} - -/* - * callback function for deleting node - */ -static void cb_node_destroy( - void *user_data, - VNodeID node_id) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - - if(!session) return; - - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - if(vnode) { - /* remove VerseNode from dynamic list */ - BLI_dlist_rem_item(&(session->nodes), (unsigned int)node_id); - /* do post destroy operations */ - vnode->post_node_destroy(vnode); - /* free verse data */ - free_verse_node_data(vnode); - /* free VerseNode */ - MEM_freeN(vnode); - }; -} - - -/* - * callback function for new created node - */ -static void cb_node_create( - void *user_data, - VNodeID node_id, - uint8 type, - VNodeID owner_id) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode = NULL; - - if(!session) return; - - /* subscribe to node */ - if((type==V_NT_OBJECT) || (type==V_NT_GEOMETRY) || (type==V_NT_BITMAP)) - verse_send_node_subscribe(node_id); - else - return; - - switch(type){ - case V_NT_OBJECT : - if(owner_id==VN_OWNER_MINE) { - struct VLink *vlink; - /* collect VerseNode from VerseNode queue */ - move_verse_node_to_dlist(session, node_id); - /* send next VerseNode waiting in queue */ - if(session->queue.first) send_verse_node(session->queue.first); - /* get received VerseNode from list of VerseNodes */ - vnode = BLI_dlist_find_link(&(session->nodes), node_id); - /* set up ID */ - vnode->id = node_id; - /* set up flags */ - vnode->flag |= NODE_RECEIVED; - /* find unsent link pointing at this VerseNode */ - vlink = find_unsent_child_vlink(session, vnode); - /* send VerseLink */ - if(vlink) send_verse_link(vlink); - /* send name of object node */ - verse_send_node_name_set(node_id, vnode->name); - /* subscribe to changes of object node transformations */ - verse_send_o_transform_subscribe(node_id, 0); - /* send object transformation matrix */ - send_verse_object_position(vnode); - send_verse_object_rotation(vnode); - send_verse_object_scale(vnode); - } - else { - /* create new VerseNode */ - vnode = create_verse_node(session, node_id, type, owner_id); - /* add VerseNode to list of nodes */ - BLI_dlist_add_item_index(&(session->nodes), (void*)vnode, (unsigned int)node_id); - /* set up flags */ - vnode->flag |= NODE_RECEIVED; - /* create object data */ - vnode->data = create_object_data(); - /* set up avatar's name */ - if(node_id == session->avatar) { - verse_send_node_name_set(node_id, U.verseuser); - } - else if(session->flag & VERSE_AUTOSUBSCRIBE) { - /* subscribe to changes of object node transformations */ - verse_send_o_transform_subscribe(node_id, 0); - } - } - break; - case V_NT_GEOMETRY : - if(owner_id==VN_OWNER_MINE){ - struct VLink *vlink; - struct VLayer *vlayer; - /* collect VerseNode from VerseNode queue */ - move_verse_node_to_dlist(session, node_id); - /* send next VerseNode waiting in queue */ - if(session->queue.first) send_verse_node(session->queue.first); - /* get received VerseNode from list of VerseNodes */ - vnode = BLI_dlist_find_link(&(session->nodes), node_id); - /* set up ID */ - vnode->id = node_id; - /* set up flags */ - vnode->flag |= NODE_RECEIVED; - /* find unsent link pointing at this VerseNode */ - vlink = find_unsent_parent_vlink(session, vnode); - /* send VerseLink */ - if(vlink) send_verse_link(vlink); - /* send name of geometry node */ - verse_send_node_name_set(node_id, vnode->name); - /* send all not sent layer to verse server */ - vlayer = (VLayer*)((VGeomData*)vnode->data)->queue.first; - if(vlayer) { - while(vlayer) { - send_verse_layer(vlayer); - vlayer = vlayer->next; - } - } - else { - /* send two verse layers to verse server */ -/* verse_send_g_layer_create(node_id, 0, "vertex", VN_G_LAYER_VERTEX_XYZ, 0, 0); - verse_send_g_layer_create(node_id, 1, "polygon", VN_G_LAYER_POLYGON_CORNER_UINT32, 0, 0);*/ - } - } - else { - /* create new VerseNode*/ - vnode = create_verse_node(session, node_id, type, owner_id); - /* add VerseNode to dlist of nodes */ - BLI_dlist_add_item_index(&(session->nodes), (void*)vnode, (unsigned int)node_id); - /* set up flags */ - vnode->flag |= NODE_RECEIVED; - /* create geometry data */ - vnode->data = (void*)create_geometry_data(); - } - break; - case V_NT_BITMAP : - if(owner_id==VN_OWNER_MINE) { - /* collect VerseNode from VerseNode queue */ - move_verse_node_to_dlist(session, node_id); - /* send next VerseNode waiting in queue */ - if(session->queue.first) send_verse_node(session->queue.first); - /* get received VerseNode from list of VerseNodes */ - vnode = BLI_dlist_find_link(&(session->nodes), node_id); - /* set up ID */ - vnode->id = node_id; - /* set up flags */ - vnode->flag |= NODE_RECEIVED; - /* send name of object node */ - verse_send_node_name_set(node_id, vnode->name); - /* send dimension of image to verse server */ - verse_send_b_dimensions_set(node_id, - ((VBitmapData*)vnode->data)->width, - ((VBitmapData*)vnode->data)->height, - ((VBitmapData*)vnode->data)->depth); - } - else { - /* create new VerseNode*/ - vnode = create_verse_node(session, node_id, type, owner_id); - /* add VerseNode to dlist of nodes */ - BLI_dlist_add_item_index(&(session->nodes), (void*)vnode, (unsigned int)node_id); - /* set up flags */ - vnode->flag |= NODE_RECEIVED; - /* create bitmap data */ - vnode->data = (void*)create_bitmap_data(); - } - break; - default: - vnode = NULL; - break; - } - - if(vnode) vnode->post_node_create(vnode); -} - -/* - * set up all callbacks for verse nodes - */ -void set_node_callbacks(void) -{ - /* new node created */ - verse_callback_set(verse_send_node_create, cb_node_create, NULL); - /* node was deleted */ - verse_callback_set(verse_send_node_destroy, cb_node_destroy, NULL); - /* name of node was set */ - verse_callback_set(verse_send_node_name_set, cb_node_name_set, NULL); - - /* new tag group was created */ - verse_callback_set(verse_send_tag_group_create, cb_tag_group_create, NULL); - /* tag group was destroy */ - verse_callback_set(verse_send_tag_group_destroy, cb_tag_group_destroy, NULL); - - /* new tag was created */ - verse_callback_set(verse_send_tag_create, cb_tag_create, NULL); - /* tag was destroy */ - verse_callback_set(verse_send_tag_destroy, cb_tag_destroy, NULL); -} - -#endif diff --git a/source/blender/blenkernel/intern/verse_object_node.c b/source/blender/blenkernel/intern/verse_object_node.c deleted file mode 100644 index e7827c8dc46..00000000000 --- a/source/blender/blenkernel/intern/verse_object_node.c +++ /dev/null @@ -1,617 +0,0 @@ -/** - * $Id$ - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Contributor(s): Jiri Hnidek. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef WITH_VERSE - -#include -#include - -#include "MEM_guardedalloc.h" - -#include "DNA_listBase.h" -#include "DNA_userdef_types.h" - -#include "BLI_dynamiclist.h" -#include "BLI_blenlib.h" -#include "BLI_arithb.h" - -//XXX #include "BIF_verse.h" - -#include "BKE_verse.h" -#include "BKE_utildefines.h" - -#include "verse.h" - -/* function prototypes of static functions */ - -/* callback functions */ -static void cb_o_transform_pos_real32(void *user_data, VNodeID node_id, uint32 time_s, uint32 time_f, const real32 *pos, const real32 *speed, const real32 *accelerate, const real32 *drag_normal, real32 drag); -static void cb_o_transform_rot_real32(void *user_data, VNodeID node_id, uint32 time_s, uint32 time_f, const VNQuat32 *temp, const VNQuat32 *speed, const VNQuat32 *accelerate, const VNQuat32 *drag_normal, real32 drag); -static void cb_o_transform_scale_real32(void *user_data, VNodeID node_id, real32 scale_x, real32 scale_y, real32 scale_z); -static void cb_o_link_set(void *user_data, VNodeID node_id, uint16 link_id, VNodeID link, const char *label, uint32 target_id); -static void cb_o_link_destroy(void *user_data, VNodeID node_id,uint16 link_id); - -/* other functions */ -static void set_target_node_link_pointer(struct VNode *vnode, struct VLink *vlink); -static void free_verse_link_data(struct VLink *vlink); - -/* - * find noy sent VerseLink in queue - */ -VLink *find_unsent_child_vlink(VerseSession *session, VNode *vnode) -{ - struct VLink *vlink; - - if(vnode->type!=V_NT_OBJECT) return NULL; - - vlink = ((VObjectData*)vnode->data)->queue.first; - while(vlink) { - if(vlink->target->id != -1) { - printf("\t vlink found, vnode target id %d\n", vlink->target->id); - return vlink; - } - vlink = vlink->next; - } - return NULL; -} - -/* - * find unsent VerseLink "pointing at this VerseNode" - */ -VLink *find_unsent_parent_vlink(VerseSession *session, VNode *vnode) -{ - struct VNode *tmp; - struct VLink *vlink; - - tmp = session->nodes.lb.first; - - while(tmp) { - if(tmp->type==V_NT_OBJECT) { - vlink = ((VObjectData*)tmp->data)->queue.first; - while(vlink) { - if(vlink->target == vnode) - return vlink; - vlink = vlink->next; - } - } - tmp = tmp->next; - } - return NULL; -} - -/* - * send object position to verse server - */ -void send_verse_object_position(VNode *vnode) -{ - float tmp; - - ((VObjectData*)vnode->data)->flag &= ~POS_SEND_READY; - - /* we have to do rotation around x axis (+pi/2) to be - compatible with other verse applications */ - tmp = -((VObjectData*)vnode->data)->pos[1]; - ((VObjectData*)vnode->data)->pos[1] = ((VObjectData*)vnode->data)->pos[2]; - ((VObjectData*)vnode->data)->pos[2] = tmp; - - verse_send_o_transform_pos_real32( - vnode->id, /* node id */ - 0, /* time_s ... no interpolation */ - 0, /* time_f ... no interpolation */ - ((VObjectData*)vnode->data)->pos, - NULL, /* speed ... no interpolation */ - NULL, /* accelerate ... no interpolation */ - NULL, /* drag normal ... no interpolation */ - 0.0); /* drag ... no interpolation */ -} - -/* - * send object rotation to verse server - */ -void send_verse_object_rotation(VNode *vnode) -{ - VNQuat32 quat; - float q[4] = {cos(-M_PI/4), -sin(-M_PI/4), 0, 0}, v[4], tmp[4]; - - /* inverse transformation to transformation in function cb_o_transform_rot_real32 */ - QuatMul(v, ((VObjectData*)vnode->data)->quat, q); - q[1]= sin(-M_PI/4); - QuatMul(tmp, q, v); - - quat.x = tmp[1]; - quat.y = tmp[2]; - quat.z = tmp[3]; - quat.w = tmp[0]; - - ((VObjectData*)vnode->data)->flag &= ~ROT_SEND_READY; - - verse_send_o_transform_rot_real32( - vnode->id, /* node id */ - 0, /* time_s ... no interpolation */ - 0, /* time_f ... no interpolation */ - &quat, - NULL, /* speed ... no interpolation */ - NULL, /* accelerate ... no interpolation */ - NULL, /* drag normal ... no interpolation */ - 0.0); /* drag ... no interpolation */ -} - -/* - * send object rotation to verse server - */ -void send_verse_object_scale(VNode *vnode) -{ - float tmp; - - ((VObjectData*)vnode->data)->flag &= ~SCALE_SEND_READY; - - /* we have to do rotation around x axis (+pi/2) to be - compatible with other verse applications */ - tmp = ((VObjectData*)vnode->data)->scale[1]; - ((VObjectData*)vnode->data)->scale[1] = ((VObjectData*)vnode->data)->scale[2]; - ((VObjectData*)vnode->data)->scale[2] = tmp; - - verse_send_o_transform_scale_real32( - vnode->id, - ((VObjectData*)vnode->data)->scale[0], - ((VObjectData*)vnode->data)->scale[1], - ((VObjectData*)vnode->data)->scale[2]); -} - -/* - * send VerseLink to verse server - */ -void send_verse_link(VLink *vlink) -{ - verse_session_set(vlink->session->vsession); - - verse_send_o_link_set( - vlink->source->id, - vlink->id, - vlink->target->id, - vlink->label, - vlink->target_id); -} - -/* - * set up pointer at VerseLink of target node (geometry node, material node, etc.) - */ -static void set_target_node_link_pointer(VNode *vnode, VLink *vlink) -{ - switch (vnode->type) { - case V_NT_GEOMETRY: - ((VGeomData*)vnode->data)->vlink = vlink; - break; - default: - break; - } -} - -/* - * free VerseLink and it's label - */ -static void free_verse_link_data(VLink *vlink) -{ - MEM_freeN(vlink->label); -} - -/* - * create new VerseLink - */ -VLink *create_verse_link( - VerseSession *session, - VNode *source, - VNode *target, - uint16 link_id, - uint32 target_id, - const char *label) -{ - struct VLink *vlink; - - vlink = (VLink*)MEM_mallocN(sizeof(VLink), "VerseLink"); - vlink->session = session; - vlink->source = source; - vlink->target = target; - vlink->id = link_id; - vlink->target_id = target_id; - - set_target_node_link_pointer(target, vlink); - - vlink->label = (char*)MEM_mallocN(sizeof(char)*(strlen(label)+1), "VerseLink label"); - vlink->label[0] = '\0'; - strcat(vlink->label, label); - - vlink->flag = 0; - - //XXX vlink->post_link_set = post_link_set; - //XXX vlink->post_link_destroy = post_link_destroy; - - return vlink; -} - -/* - * free ObjectData (links, links in queue and lables of links) - */ -void free_object_data(VNode *vnode) -{ - struct VerseSession *session = vnode->session; - struct VObjectData *obj = (VObjectData*)vnode->data; - struct VLink *vlink; - struct VMethodGroup *vmg; - - if(!obj) return; - - /* free all labels of links in dlist */ - vlink = obj->links.lb.first; - while(vlink){ - free_verse_link_data(vlink); - vlink = vlink->next; - } - - /* free all labels of links waiting in queue */ - vlink = obj->queue.first; - while(vlink){ - free_verse_link_data(vlink); - vlink = vlink->next; - } - /* free dynamic list and sendig queue of links */ - BLI_dlist_destroy(&(obj->links)); - BLI_freelistN(&(obj->queue)); - - /* free method groups and their methods */ - for(vmg = vnode->methodgroups.first; vmg; vmg= vmg->next) { - free_verse_methodgroup(vmg); - } - BLI_freelistN(&(vnode->methodgroups)); - - /* free constraint between VerseNode and Object */ - obj->post_object_free_constraint(vnode); - - /* unsubscribe from receiving changes of transformation matrix */ - if(session->flag & VERSE_CONNECTED) - verse_send_o_transform_unsubscribe(vnode->id, 0); -} - -/* - * create new object data - */ -VObjectData *create_object_data(void) -{ - VObjectData *obj; - - obj = (VObjectData*)MEM_mallocN(sizeof(VObjectData), "VerseObjectData"); - obj->object = NULL; - BLI_dlist_init(&(obj->links)); - obj->queue.first = obj->queue.last = NULL; - obj->flag = 0; - - /* transformation matrix */ - obj->pos[0] = obj->pos[1] = obj->pos[2] = 0.0; - obj->quat[0] = obj->quat[1] = obj->quat[2] = 0.0; obj->quat[3] = 1; - obj->scale[0] = obj->scale[1] = obj->scale[2] = 1.0; - - /* transformation flags */ - obj->flag |= POS_SEND_READY; - obj->flag |= ROT_SEND_READY; - obj->flag |= SCALE_SEND_READY; - - /* set up pointers at post callback functions */ -/* obj->post_transform = post_transform;*/ - //XXX obj->post_transform_pos = post_transform_pos; - //XXX obj->post_transform_rot = post_transform_rot; - //XXX obj->post_transform_scale = post_transform_scale; - //XXX obj->post_object_free_constraint = post_object_free_constraint; - - return obj; -} - -/* - * callback function: - */ -static void cb_o_transform_pos_real32( - void *user_data, - VNodeID node_id, - uint32 time_s, - uint32 time_f, - const real32 *pos, - const real32 *speed, - const real32 *accelerate, - const real32 *drag_normal, - real32 drag) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - float vec[3], dt, tmp; - - if(!session) return; - - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - ((VObjectData*)vnode->data)->flag |= POS_SEND_READY; - - /* verse server sends automaticaly some stupid default values ... - * we have to ignore these values, when we created this object node */ - if( (vnode->owner_id==VN_OWNER_MINE) && !(((VObjectData*)vnode->data)->flag & POS_RECEIVE_READY) ) { - ((VObjectData*)vnode->data)->flag |= POS_RECEIVE_READY; - return; - } - - dt = time_s + time_f/(0xffff); - - if(pos) { - vec[0] = pos[0]; - vec[1] = pos[1]; - vec[2] = pos[2]; - } - else { - vec[0] = 0.0f; - vec[1] = 0.0f; - vec[2] = 0.0f; - } - - if(speed) { - vec[0] += speed[0]*dt; - vec[1] += speed[1]*dt; - vec[2] += speed[2]*dt; - } - - if(accelerate) { - vec[0] += accelerate[0]*dt*dt/2; - vec[1] += accelerate[1]*dt*dt/2; - vec[2] += accelerate[2]*dt*dt/2; - } - - /* we have to do rotation around x axis (+pi/2) to be - compatible with other verse applications */ - tmp = vec[1]; - vec[1] = -vec[2]; - vec[2] = tmp; - - if( (((VObjectData*)vnode->data)->pos[0] != vec[0]) || - (((VObjectData*)vnode->data)->pos[1] != vec[1]) || - (((VObjectData*)vnode->data)->pos[2] != vec[2])) - { - ((VObjectData*)vnode->data)->pos[0] = vec[0]; - ((VObjectData*)vnode->data)->pos[1] = vec[1]; - ((VObjectData*)vnode->data)->pos[2] = vec[2]; - - ((VObjectData*)vnode->data)->post_transform_pos(vnode); - } -} - -/* - * callback function: - */ -static void cb_o_transform_rot_real32( - void *user_data, - VNodeID node_id, - uint32 time_s, - uint32 time_f, - const VNQuat32 *quat, - const VNQuat32 *speed, - const VNQuat32 *accelerate, - const VNQuat32 *drag_normal, - real32 drag) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - float temp[4]={0, 0, 0, 0}, v[4], dt; /* temporary quaternions */ - float q[4]={cos(M_PI/4), -sin(M_PI/4), 0, 0}; /* conjugate quaternion (represents rotation - around x-axis +90 degrees) */ - - if(!session) return; - - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - ((VObjectData*)vnode->data)->flag |= ROT_SEND_READY; - - /* verse server sends automaticaly some stupid default values ... - * we have to ignore these values, when we created this object node */ - if( (vnode->owner_id==VN_OWNER_MINE) && !(((VObjectData*)vnode->data)->flag & ROT_RECEIVE_READY) ) { - ((VObjectData*)vnode->data)->flag |= ROT_RECEIVE_READY; - return; - } - - dt = time_s + time_f/(0xffff); - - if(quat) { - temp[1] = quat->x; - temp[2] = quat->y; - temp[3] = quat->z; - temp[0] = quat->w; - } - - if(speed) { - temp[1] += speed->x*dt; - temp[2] += speed->y*dt; - temp[3] += speed->z*dt; - temp[0] += speed->w*dt; - } - - if(accelerate) { - temp[1] += accelerate->x*dt*dt/2; - temp[2] += accelerate->y*dt*dt/2; - temp[3] += accelerate->z*dt*dt/2; - temp[0] += accelerate->w*dt*dt/2; - } - - /* following matematical operation transform rotation: - * - * v' = quaternion * v * conjugate_quaternion - * - *, where v is original representation of rotation */ - - QuatMul(v, temp, q); - q[1]= sin(M_PI/4); /* normal quaternion */ - QuatMul(temp, q, v); - - if( (((VObjectData*)vnode->data)->quat[0] != temp[0]) || - (((VObjectData*)vnode->data)->quat[1] != temp[1]) || - (((VObjectData*)vnode->data)->quat[2] != temp[2]) || - (((VObjectData*)vnode->data)->quat[3] != temp[3])) - { - QUATCOPY(((VObjectData*)vnode->data)->quat, temp); - - ((VObjectData*)vnode->data)->post_transform_rot(vnode); - } -} - -/* - * callback function: - */ -static void cb_o_transform_scale_real32( - void *user_data, - VNodeID node_id, - real32 scale_x, - real32 scale_y, - real32 scale_z) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - real32 tmp; - - if(!session) return; - - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - ((VObjectData*)vnode->data)->flag |= SCALE_SEND_READY; - - /* verse server sends automaticaly some stupid default values ... - * we have to ignore these values, when we created this object node */ - if( (vnode->owner_id==VN_OWNER_MINE) && !(((VObjectData*)vnode->data)->flag & SCALE_RECEIVE_READY) ) { - ((VObjectData*)vnode->data)->flag |= SCALE_RECEIVE_READY; - return; - } - - /* flip axis (verse spec) */ - tmp = scale_y; - scale_y = scale_z; - scale_z = tmp; - - /* z and y axis are flipped here too */ - if( (((VObjectData*)vnode->data)->scale[0] != scale_x) || - (((VObjectData*)vnode->data)->scale[1] != scale_y) || - (((VObjectData*)vnode->data)->scale[2] != scale_z)) - { - ((VObjectData*)vnode->data)->scale[0] = scale_x; - ((VObjectData*)vnode->data)->scale[1] = scale_y; - ((VObjectData*)vnode->data)->scale[2] = scale_z; - - ((VObjectData*)vnode->data)->post_transform_scale(vnode); - } -} - -/* - * callback function: link between object node and some other node was created - */ -static void cb_o_link_set( - void *user_data, - VNodeID node_id, - uint16 link_id, - VNodeID link, - const char *label, - uint32 target_id) -{ - struct VLink *vlink; - struct VNode *source; - struct VNode *target; - - struct VerseSession *session = (VerseSession*)current_verse_session(); - - if(!session) return; - - source = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - target = BLI_dlist_find_link(&(session->nodes), (unsigned int)link); - - if(!(source && target)) return; - - vlink = ((VObjectData*)source->data)->queue.first; - - if(vlink && (vlink->source==source) && (vlink->target==target)) { - /* remove VerseLink from sending queue */ - BLI_remlink(&(((VObjectData*)source->data)->queue), vlink); - /* add VerseLink to dynamic list of VerseLinks */ - BLI_dlist_add_item_index(&(((VObjectData*)source->data)->links), vlink, (unsigned int)link_id); - /* send next link from sending queue */ - if(((VObjectData*)source->data)->queue.first) - send_verse_link(((VObjectData*)source->data)->queue.first); - /* set up VerseLink variables */ - vlink->flag = 0; - vlink->id = link_id; - vlink->target_id = target_id; - } - else { - /* create new VerseLink */ - vlink = create_verse_link(session, source, target, link_id, target_id, label); - /* add VerseLink to dynamic list of VerseLinks */ - BLI_dlist_add_item_index(&(((VObjectData*)source->data)->links), vlink, (unsigned int)link_id); - } - - target->counter++; - - vlink->post_link_set(vlink); -} - -/* - * callback function: destroy link between two VerseNodes - */ -static void cb_o_link_destroy( - void *user_data, - VNodeID node_id, - uint16 link_id) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VNode *vnode; - struct VLink *vlink; - - if(!session) return; - - vnode = BLI_dlist_find_link(&(session->nodes), (unsigned int)node_id); - - vlink = BLI_dlist_find_link(&(((VObjectData*)vnode->data)->links), link_id); - - if(vlink) { - vlink->target->counter--; - free_verse_link_data(vlink); - BLI_dlist_free_item(&(((VObjectData*)vnode->data)->links), link_id); - } - - vlink->post_link_destroy(vlink); -} - -void set_object_callbacks(void) -{ - /* position of object was changed */ - verse_callback_set(verse_send_o_transform_pos_real32, cb_o_transform_pos_real32, NULL); - /* rotation of object was changed */ - verse_callback_set(verse_send_o_transform_rot_real32, cb_o_transform_rot_real32, NULL); - /* size of object was changed */ - verse_callback_set(verse_send_o_transform_scale_real32, cb_o_transform_scale_real32, NULL); - /* new link between nodes was created */ - verse_callback_set(verse_send_o_link_set, cb_o_link_set, NULL); - /* link between nodes was destroyed */ - verse_callback_set(verse_send_o_link_destroy, cb_o_link_destroy, NULL); -} - -#endif diff --git a/source/blender/blenkernel/intern/verse_session.c b/source/blender/blenkernel/intern/verse_session.c deleted file mode 100644 index 9771c8a46de..00000000000 --- a/source/blender/blenkernel/intern/verse_session.c +++ /dev/null @@ -1,478 +0,0 @@ -/** - * $Id$ - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Contributor(s): Jiri Hnidek. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef WITH_VERSE - -#include - -#include "MEM_guardedalloc.h" - -#include "DNA_mesh_types.h" /* temp */ -#include "DNA_listBase.h" -#include "DNA_screen_types.h" -#include "DNA_userdef_types.h" - -#include "BLI_dynamiclist.h" -#include "BLI_blenlib.h" - -//XXX #include "BIF_screen.h" -//XXX #include "BIF_verse.h" - -#include "BKE_global.h" -#include "BKE_verse.h" - -struct ListBase session_list={NULL, NULL}; -struct ListBase server_list={NULL, NULL}; - -static int cb_ping_registered = 0; - -/* list of static function prototypes */ -static void cb_connect_terminate(const char *address, const char *bye); -static void cb_connect_accept(void *user_data, uint32 avatar, void *address, void *connection, const uint8 *host_id); -static void set_all_callbacks(void); -static void free_verse_session_data(struct VerseSession *session); -static void add_verse_server(VMSServer *server); -static void check_connection_state(struct VerseServer *server); - -static void check_connection_state(struct VerseServer *server) -{ - struct VerseSession *session; - session = session_list.first; - while(session) { - if(strcmp(server->ip,session->address)==0) { - server->flag = session->flag; - return; - } - session = session->next; - } -} -/* - * add verse server to server_list. Prevents duplicate - * entries - */ -static void add_verse_server(VMSServer *server) -{ - struct VerseServer *iter, *niter; - VerseServer *newserver; - const char *name = verse_ms_field_value(server, "DE"); - iter = server_list.first; - - while(iter) { - niter = iter->next; - if(strcmp(iter->ip, server->ip)==0) { - return; - } - iter = niter; - } - - newserver = (VerseServer *)MEM_mallocN(sizeof(VerseServer), "VerseServer"); - newserver->ip = (char *)MEM_mallocN(sizeof(char)*(strlen(server->ip)+1), "VerseServer ip"); - strcpy(newserver->ip, server->ip); - - if(name) { - newserver->name = (char *)MEM_mallocN(sizeof(char)*(strlen(name)+strlen(newserver->ip)+4), "VerseServer name"); - strcpy(newserver->name, name); - strcat(newserver->name, " ("); - strcat(newserver->name, newserver->ip); - strcat(newserver->name, ")"); - } - - newserver->flag = 0; - check_connection_state(newserver); - - printf("Adding new verse server: %s at %s\n", newserver->name, newserver->ip); - - BLI_addtail(&server_list, newserver); - //XXX post_server_add(); -} - -/* - * callback function for ping - */ -static void cb_ping(void *user, const char *address, const char *message) -{ - VMSServer **servers = verse_ms_list_parse(message); - if(servers != NULL) - { - int i; - - for(i = 0; servers[i] != NULL; i++) - add_verse_server(servers[i]); - - free(servers); - } -} - -/* - * callback function for connection terminated - */ -static void cb_connect_terminate(const char *address, const char *bye) -{ - VerseSession *session = (VerseSession*)current_verse_session(); - - if(!session) return; - - /* remove session from list of session */ - BLI_remlink(&session_list, session); - /* do post connect operations */ - session->post_connect_terminated(session); - /* free session data */ - free_verse_session_data(session); - /* free session */ - MEM_freeN(session); -} - -/* - * callback function for accepted connection to verse server - */ -static void cb_connect_accept( - void *user_data, - uint32 avatar, - void *address, - void *connection, - const uint8 *host_id) -{ - struct VerseSession *session = (VerseSession*)current_verse_session(); - struct VerseServer *server = server_list.first; - uint32 i, mask=0; - - if(!session) return; - - session->flag |= VERSE_CONNECTED; - session->flag &= ~VERSE_CONNECTING; - - while(server) { - if(strcmp(session->address, server->ip)==0) { - server->flag |= VERSE_CONNECTED; - server->flag &= ~VERSE_CONNECTING; - server->session = session; - break; - } - server = server->next; - } - - printf("\tBlender is connected to verse server: %s\n", (char*)address); - printf("\tVerseSession->counter: %d\n", session->counter); - - session->avatar = avatar; - - session->post_connect_accept(session); - - for(i = 0; i < V_NT_NUM_TYPES; i++) - mask = mask | (1 << i); - verse_send_node_index_subscribe(mask); - verse_send_node_subscribe(session->avatar); /* subscribe to avatar node, as well */ - - /* create our own method group and method */ - /*verse_send_o_method_group_create(session->avatar, ~0, "tawk-client");*/ -} - -/* - * set up all callbacks for sessions - */ -void set_verse_session_callbacks(void) -{ - /* connection */ - verse_callback_set(verse_send_connect_accept, cb_connect_accept, NULL); - /* connection was terminated */ - verse_callback_set(verse_send_connect_terminate, cb_connect_terminate, NULL); - -} - -/* - * set all callbacks used in Blender - */ -static void set_all_callbacks(void) -{ - /* set up all callbacks for sessions */ - set_verse_session_callbacks(); - - /* set up callbacks for nodes */ - set_node_callbacks(); - - /* set up all callbacks for object nodes */ - set_object_callbacks(); - - /* set up all callbacks for geometry nodes */ - set_geometry_callbacks(); - - /* set up all callbacks for bitmap nodes */ - set_bitmap_callbacks(); - - /* set up all callbacks for method groups and methods */ - set_method_callbacks(); -} - -/* - * this function sends and receive all packets for all sessions - */ -void b_verse_update(void) -{ - VerseSession *session, *next_session; - - session = session_list.first; - while(session){ - next_session = session->next; - verse_session_set(session->vsession); - if((session->flag & VERSE_CONNECTED) || (session->flag & VERSE_CONNECTING)) { - verse_callback_update(10); - session->post_connect_update(session); - } - session = next_session; - } - if(cb_ping_registered>0) { - verse_callback_update(10); - } -} - -/* - * returns VerseSession coresponding to vsession pointer - */ -VerseSession *versesession_from_vsession(VSession *vsession) -{ - struct VerseSession *session; - - session = session_list.first; - - while(session) { - if(session->vsession==vsession) return session; - session = session->next; - } - - return session; -} - -/* - * returns pointer at current VerseSession - */ -VerseSession *current_verse_session(void) -{ - struct VerseSession *session; - VSession vsession = verse_session_get(); - - session = session_list.first; - - while(session){ - if(session->vsession == vsession) - return session; - session = session->next; - } - - printf("error: non-existing SESSION occured!\n"); - return NULL; -} - -/* - * free VerseSession - */ -static void free_verse_session_data(VerseSession *session) -{ - struct VNode *vnode; - - /* free data of all nodes */ - vnode = session->nodes.lb.first; - while(vnode){ - free_verse_node_data(vnode); - vnode = vnode->next; - } - - /* free data of nodes waiting in queue */ - vnode = session->queue.first; - while(vnode){ - free_verse_node_data(vnode); - vnode = vnode->next; - } - - /* free all VerseNodes */ - BLI_dlist_destroy(&(session->nodes)); - /* free all VerseNodes waiting in queque */ - BLI_freelistN(&(session->queue)); - - /* free name of verse host for this session */ - MEM_freeN(session->address); -} - -/* - * free VerseSession - */ -void free_verse_session(VerseSession *session) -{ - /* remove session from session list*/ - BLI_remlink(&session_list, session); - /* do post terminated operations */ - session->post_connect_terminated(session); - /* free session data (nodes, layers) */ - free_verse_session_data(session); - /* free session */ - MEM_freeN(session); -} - -/* - * create new verse session and return coresponding data structure - */ -VerseSession *create_verse_session( - const char *name, - const char *pass, - const char *address, - uint8 *expected_key) -{ - struct VerseSession *session; - VSession *vsession; - - vsession = verse_send_connect(name, pass, address, expected_key); - - if(!vsession) return NULL; - - session = (VerseSession*)MEM_mallocN(sizeof(VerseSession), "VerseSession"); - - session->flag = VERSE_CONNECTING; - - session->vsession = vsession; - session->avatar = -1; - - session->address = (char*)MEM_mallocN(sizeof(char)*(strlen(address)+1),"session adress name"); - strcpy(session->address, address); - - session->connection = NULL; - session->host_id = NULL; - session->counter = 0; - - /* initialize dynamic list of nodes and node queue */ - BLI_dlist_init(&(session->nodes)); - session->queue.first = session->queue.last = NULL; - - /* set up all client dependent functions */ - //XXX session->post_connect_accept = post_connect_accept; - //XXX session->post_connect_terminated = post_connect_terminated; - //XXX session->post_connect_update = post_connect_update; - - //XXX post_server_add(); - - return session; -} - -/* - * end verse session and free all session data - */ -void end_verse_session(VerseSession *session) -{ - /* send terminate command to verse server */ - verse_send_connect_terminate(session->address, "blender: bye bye"); - /* update callbacks */ - verse_callback_update(1000); - /* send destroy session command to verse server */ - verse_session_destroy(session->vsession); - /* set up flag of verse session */ - session->flag &= ~VERSE_CONNECTED; - /* do post connect operations */ - session->post_connect_terminated(session); - /* free structure of verse session */ - free_verse_session(session); -} - -void free_all_servers(void) -{ - VerseServer *server, *nextserver; - - server = server_list.first; - - while(server) { - nextserver = server->next; - BLI_remlink(&server_list, server); - MEM_freeN(server->name); - MEM_freeN(server->ip); - MEM_freeN(server); - server = nextserver; - } - - BLI_freelistN(&server_list); -} - -/* - * end connection to all verse hosts (servers) ... free all VerseSessions - * free all VerseServers - */ -void end_all_verse_sessions(void) -{ - VerseSession *session,*nextsession; - - session = session_list.first; - - while(session) { - nextsession= session->next; - end_verse_session(session); - /* end next session */ - session = nextsession; - } - - BLI_freelistN(&session_list); - - free_all_servers(); -} - -/* - * do a get from ms - */ -void b_verse_ms_get(void) -{ - if(cb_ping_registered==0) { - /* handle ping messages (for master server) */ - verse_callback_set(verse_send_ping, cb_ping, NULL); - //XXX add_screenhandler(G.curscreen, SCREEN_HANDLER_VERSE, 1); - cb_ping_registered++; - } - free_all_servers(); - - verse_ms_get_send(U.versemaster, VERSE_MS_FIELD_DESCRIPTION, NULL); - verse_callback_update(10); -} - -/* - * connect to verse host, set up all callbacks, create session - */ -void b_verse_connect(char *address) -{ - VerseSession *session = NULL; - - /* if no session was created before, then set up all callbacks */ - if((session_list.first==NULL) && (session_list.last==NULL)) - set_all_callbacks(); - - /* create new session */ - if(address) - session = create_verse_session("Blender", "pass", address, NULL); - - if(session) { - /* add new session to the list of sessions */ - BLI_addtail(&session_list, session); - - /* add verse handler if this is first session */ - if(session_list.first == session_list.last) { - //XXX add_screenhandler(G.curscreen, SCREEN_HANDLER_VERSE, 1); - } - - } -} - -#endif diff --git a/source/blender/blenkernel/intern/writeavi.c b/source/blender/blenkernel/intern/writeavi.c index 1829a07d543..f84bd690347 100644 --- a/source/blender/blenkernel/intern/writeavi.c +++ b/source/blender/blenkernel/intern/writeavi.c @@ -171,7 +171,7 @@ void start_avi(RenderData *rd, int rectx, int recty) printf("Created avi: %s\n", name); } -void append_avi(int frame, int *pixels, int rectx, int recty) +void append_avi(RenderData *rd, int frame, int *pixels, int rectx, int recty) { unsigned int *rt1, *rt2, *rectot; int x, y; diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c index 908defb08cc..8fd2426a1b6 100644 --- a/source/blender/blenkernel/intern/writeffmpeg.c +++ b/source/blender/blenkernel/intern/writeffmpeg.c @@ -558,7 +558,7 @@ static AVStream* alloc_audio_stream(RenderData *rd, int codec_id, AVFormatContex return NULL; } - set_ffmpeg_properties(c, "audio"); + set_ffmpeg_properties(rd, c, "audio"); if (avcodec_open(c, codec) < 0) { //XXX error("Couldn't initialize audio codec"); diff --git a/source/blender/blenlib/BLI_editVert.h b/source/blender/blenlib/BLI_editVert.h index fec89690090..f0f54bae8ea 100644 --- a/source/blender/blenlib/BLI_editVert.h +++ b/source/blender/blenlib/BLI_editVert.h @@ -70,9 +70,6 @@ typedef struct EditVert short fast; /* only 0 or 1, for editmesh_fastmalloc, do not store temp data here! */ int hash; int keyindex; /* original index #, for restoring key information */ -/*#ifdef WITH_VERSE*/ - void *vvert; -/*#endif*/ void *data; /* custom vertex data */ } EditVert; @@ -132,9 +129,6 @@ typedef struct EditFace unsigned char f, f1, h; unsigned char fast; /* only 0 or 1, for editmesh_fastmalloc */ unsigned char fgonf; /* flag for fgon options */ -/*#ifdef WITH_VERSE*/ - void *vface; -/*#endif*/ void *data; /* custom face data */ } EditFace; @@ -187,9 +181,6 @@ typedef struct EditMesh CustomData vdata, edata, fdata; -#ifdef WITH_VERSE - void *vnode; -#endif } EditMesh; #endif diff --git a/source/blender/blenlib/BLI_storage_types.h b/source/blender/blenlib/BLI_storage_types.h index 01627f62e72..385aa39e6cb 100644 --- a/source/blender/blenlib/BLI_storage_types.h +++ b/source/blender/blenlib/BLI_storage_types.h @@ -74,9 +74,6 @@ struct direntry{ #define HIDDEN 1 #define FIRST 1 #define ACTIVE 2 -/*#ifdef WITH_VERSE*/ -#define VERSE 3 -/*#endif*/ #define DESELECT 0 #define NOT_YET 0 #define VISIBLE 0 diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt index 4eb01a50f39..b22e7b1dd70 100644 --- a/source/blender/blenlib/CMakeLists.txt +++ b/source/blender/blenlib/CMakeLists.txt @@ -40,11 +40,6 @@ SET(INC ) ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux") -IF(WITH_VERSE) - ADD_DEFINITIONS(-DWITH_VERSE) - SET(INC ${INC} ${VERSE_INC}) -ENDIF(WITH_VERSE) - IF(WITH_INTERNATIONAL) ADD_DEFINITIONS(-DWITH_FREETYPE2) ENDIF(WITH_INTERNATIONAL) diff --git a/source/blender/blenlib/SConscript b/source/blender/blenlib/SConscript index 39d4df62a93..142ffeb0a83 100644 --- a/source/blender/blenlib/SConscript +++ b/source/blender/blenlib/SConscript @@ -15,10 +15,6 @@ if env['WITH_BF_SDL']: if env['WITH_BF_INTERNATIONAL']: defs = 'WITH_FREETYPE2' -if env['WITH_BF_VERSE']: - defs += ' WITH_VERSE' - incs += ' ' + env['BF_VERSE_INCLUDE'] - if env['OURPLATFORM'] == 'linux2': cflags='-pthread' incs += ' ../../../extern/binreloc/include' diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt index 9101536c23f..1b9c5647702 100644 --- a/source/blender/blenloader/CMakeLists.txt +++ b/source/blender/blenloader/CMakeLists.txt @@ -34,10 +34,4 @@ SET(INC ${ZLIB_INC} ) -IF(WITH_VERSE) - ADD_DEFINITIONS(-DWITH_VERSE) - SET(INC ${INC} ${VERSE_INC}) -ENDIF(WITH_VERSE) - BLENDERLIB(bf_blenloader "${SRC}" "${INC}") -#env.BlenderLib ( 'bf_blenloader', sources, Split(incs), Split(defs), libtype=['core','player'], priority = [70, 30] ) diff --git a/source/blender/blenloader/SConscript b/source/blender/blenloader/SConscript index c07170fea95..5a445ad0cfc 100644 --- a/source/blender/blenloader/SConscript +++ b/source/blender/blenloader/SConscript @@ -9,9 +9,6 @@ incs += ' ../render/extern/include' incs += ' ' + env['BF_ZLIB_INC'] -defs = '' -if env['WITH_BF_VERSE']: - defs += ' WITH_VERSE' - incs += ' ' + env['BF_VERSE_INCLUDE'] +defs = [] -env.BlenderLib ( 'bf_blenloader', sources, Split(incs), Split(defs), libtype=['core','player'], priority = [165, 30] ) +env.BlenderLib ( 'bf_blenloader', sources, Split(incs), defs, libtype=['core','player'], priority = [165, 30] ) diff --git a/source/blender/blenloader/intern/Makefile b/source/blender/blenloader/intern/Makefile index 4f729d98d00..7382dd655b2 100644 --- a/source/blender/blenloader/intern/Makefile +++ b/source/blender/blenloader/intern/Makefile @@ -44,11 +44,6 @@ ifeq ($(OS),$(findstring $(OS), "solaris windows")) CPPFLAGS += -I$(NAN_ZLIB)/include endif -ifeq ($(WITH_VERSE), true) - CPPFLAGS += -DWITH_VERSE - CPPFLAGS += -I$(NAN_VERSE)/include -endif - # streaming write function CPPFLAGS += -I../../writestreamglue CPPFLAGS += -I../../readstreamglue diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index a34c3cc88a5..ebc6cb4dcbd 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -161,10 +161,6 @@ Any case: direct data is ALWAYS after the lib block #include "BKE_utildefines.h" // for defines #include "BKE_modifier.h" #include "BKE_idprop.h" -#ifdef WITH_VERSE -#include "BKE_verse.h" -//XXX #include "BIF_verse.h" -#endif #include "BLO_writefile.h" #include "BLO_readfile.h" @@ -918,15 +914,7 @@ static void write_objects(WriteData *wd, ListBase *idbase) while(ob) { if(ob->id.us>0 || wd->current) { /* write LibData */ -#ifdef WITH_VERSE - /* pointer at vnode stored in file have to be NULL */ - struct VNode *vnode = (VNode*)ob->vnode; - if(vnode) ob->vnode = NULL; -#endif writestruct(wd, ID_OB, "Object", 1, ob); -#ifdef WITH_VERSE - if(vnode) ob->vnode = (void*)vnode; -#endif /*Write ID Properties -- and copy this comment EXACTLY for easy finding of library blocks that implement this.*/ @@ -1204,20 +1192,7 @@ static void write_meshs(WriteData *wd, ListBase *idbase) while(mesh) { if(mesh->id.us>0 || wd->current) { /* write LibData */ -#ifdef WITH_VERSE - struct VNode *vnode = (VNode*)mesh->vnode; - if(vnode) { - /* mesh has to be created from verse geometry node*/ - //XXX create_meshdata_from_geom_node(mesh, vnode); - /* pointer at verse node can't be stored in file */ - mesh->vnode = NULL; - } -#endif - writestruct(wd, ID_ME, "Mesh", 1, mesh); -#ifdef WITH_VERSE - if(vnode) mesh->vnode = (void*)vnode; -#endif /* direct data */ if (mesh->id.properties) IDP_WriteProperty(mesh->id.properties, wd); diff --git a/source/blender/editors/CMakeLists.txt b/source/blender/editors/CMakeLists.txt index 19a91d08d08..15c0bca8ffb 100644 --- a/source/blender/editors/CMakeLists.txt +++ b/source/blender/editors/CMakeLists.txt @@ -71,11 +71,6 @@ IF(WIN32) SET(INC ${INC} ${PTHREADS_INC}) ENDIF(WIN32) -IF(WITH_VERSE) - SET(INC ${INC} ${VERSE_INC}) - ADD_DEFINITIONS(-DWITH_VERSE) -ENDIF(WITH_VERSE) - # TODO buildinfo IF(BF_BUILDINFO) ADD_DEFINITIONS(-DNAN_BUILDINFO) @@ -83,7 +78,3 @@ ENDIF(BF_BUILDINFO) BLENDERLIB_NOLIST(bf_editors "${SRC}" "${INC}") -IF(WITH_VERSE) - ADD_DEPENDENCIES(bf_editors mkprot verse) -ENDIF(WITH_VERSE) - diff --git a/source/blender/editors/screen/CMakeLists.txt b/source/blender/editors/screen/CMakeLists.txt index c6d1288cf4f..42480f65268 100644 --- a/source/blender/editors/screen/CMakeLists.txt +++ b/source/blender/editors/screen/CMakeLists.txt @@ -74,11 +74,6 @@ IF(WIN32) SET(INC ${INC} ${PTHREADS_INC}) ENDIF(WIN32) -IF(WITH_VERSE) - SET(INC ${INC} ${VERSE_INC}) - ADD_DEFINITIONS(-DWITH_VERSE) -ENDIF(WITH_VERSE) - # TODO buildinfo IF(BF_BUILDINFO) ADD_DEFINITIONS(-DNAN_BUILDINFO) @@ -86,7 +81,3 @@ ENDIF(BF_BUILDINFO) BLENDERLIB_NOLIST(bf_editors "${SRC}" "${INC}") -IF(WITH_VERSE) - ADD_DEPENDENCIES(bf_editors mkprot verse) -ENDIF(WITH_VERSE) - diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index c7f49a31938..cfae1b127cf 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -3588,7 +3588,7 @@ static void outliner_draw_tree_element(Scene *scene, ARegion *ar, SpaceOops *soo /* open/close icon, only when sublevels, except for scene */ if(te->subtree.first || (tselem->type==0 && te->idcode==ID_SCE) || (te->flag & TE_LAZY_CLOSED)) { int icon_x; - if((tselem->type==0 && ELEM(te->idcode, ID_OB, ID_SCE)) || ELEM4(te->idcode,ID_VN,ID_VS, ID_MS, ID_SS)) + if(tselem->type==0 && ELEM(te->idcode, ID_OB, ID_SCE)) icon_x = startx; else icon_x = startx+5; @@ -3680,7 +3680,7 @@ static void outliner_draw_hierarchy(SpaceOops *soops, ListBase *lb, int startx, tselem= TREESTORE(te); /* horizontal line? */ - if((tselem->type==0 && (te->idcode==ID_OB || te->idcode==ID_SCE)) || ELEM4(te->idcode,ID_VS,ID_VN,ID_MS,ID_SS)) + if(tselem->type==0 && (te->idcode==ID_OB || te->idcode==ID_SCE)) glRecti(startx, *starty, startx+OL_X, *starty-1); *starty-= OL_H; @@ -3693,7 +3693,7 @@ static void outliner_draw_hierarchy(SpaceOops *soops, ListBase *lb, int startx, te= lb->last; if(te->parent || lb->first!=lb->last) { tselem= TREESTORE(te); - if((tselem->type==0 && te->idcode==ID_OB) || ELEM4(te->idcode,ID_VS,ID_VN,ID_MS,ID_SS)) { + if(tselem->type==0 && te->idcode==ID_OB) { glRecti(startx, y1+OL_H, startx+1, y2); } diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 806afa8e624..3f123300c5a 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -170,9 +170,6 @@ typedef struct TransData { void *extra; /* extra data (mirrored element pointer, in editmode mesh to EditVert) (editbone for roll fixing) (...) */ short flag; /* Various flags */ short protectflag; /* If set, copy of Object or PoseChannel protection */ -/*#ifdef WITH_VERSE*/ - void *verse; /* pointer at verse data struct (VerseVert, etc.) */ -/*#endif*/ } TransData; typedef struct MouseInput { @@ -318,10 +315,6 @@ typedef struct TransInfo { #define TD_USEQUAT (1 << 3) #define TD_NOTCONNECTED (1 << 4) #define TD_SINGLESIZE (1 << 5) /* used for scaling of MetaElem->rad */ -#ifdef WITH_VERSE - #define TD_VERSE_OBJECT (1 << 6) - #define TD_VERSE_VERT (1 << 7) -#endif #define TD_TIMEONLY (1 << 8) #define TD_NOCENTER (1 << 9) #define TD_NO_EXT (1 << 10) /* ext abused for particle key timing */ diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index cd06c27e12e..6b633600db7 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -1914,15 +1914,6 @@ static void VertsToTransData(TransInfo *t, TransData *td, EditMesh *em, EditVert td->val = &(eve->bweight); td->ival = eve->bweight; } - -#ifdef WITH_VERSE - if(eve->vvert) { - td->verse = (void*)eve->vvert; - td->flag |= TD_VERSE_VERT; - } - else - td->flag &= ~TD_VERSE_VERT; -#endif } /* *********************** CrazySpace correction. Now without doing subsurf optimal ****************** */ @@ -3320,15 +3311,6 @@ static void ObjectToTransData(bContext *C, TransInfo *t, TransData *td, Object * { td->flag |= TD_ACTIVE; } - -#ifdef WITH_VERSE - if(ob->vnode) { - td->verse = (void*)ob; - td->flag |= TD_VERSE_OBJECT; - } - else - td->flag &= ~TD_VERSE_OBJECT; -#endif } @@ -4215,6 +4197,11 @@ void createTransData(bContext *C, TransInfo *t) else if(t->spacetype == SPACE_NODE) { t->flag |= T_2D_EDIT|T_POINTS; createTransNodeData(C, t); + if (t->data && (t->flag & T_PROP_EDIT)) { + sort_trans_data(t); // makes selected become first in array + set_prop_dist(t, 1); + sort_trans_data_dist(t); + } } else if (t->obedit) { t->ext = NULL; diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index ea79a559f44..76e2e68e015 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -68,10 +68,6 @@ //#include "BSE_editipo.h" //#include "BSE_editipo_types.h" -#ifdef WITH_VERSE -#include "BIF_verse.h" -#endif - #include "BKE_action.h" #include "BKE_anim.h" #include "BKE_armature.h" @@ -91,10 +87,6 @@ #include "BKE_utildefines.h" #include "BKE_context.h" -#ifdef WITH_VERSE -#include "BKE_verse.h" -#endif - #include "ED_view3d.h" #include "ED_mesh.h" @@ -272,9 +264,6 @@ void recalcData(TransInfo *t) { Scene *scene = t->scene; Base *base; -#ifdef WITH_VERSE - struct TransData *td; -#endif #if 0 // TRANSFORM_FIX_ME if (t->spacetype == SPACE_ACTION) { @@ -639,17 +628,6 @@ void recalcData(TransInfo *t) } } -#ifdef WITH_VERSE - for (td = t->data; td < t->data + t->total; td++) { - if(td->flag & TD_VERSE_VERT) { - if(td->verse) - send_versevert_pos((VerseVert*)td->verse); - } - else if(td->flag & TD_VERSE_OBJECT) - if(td->verse) b_verse_send_transformation((Object*)td->verse); - } -#endif - /* update shaded drawmode while transform */ if(t->spacetype==SPACE_VIEW3D && ((View3D*)t->view)->drawtype == OB_SHADED) reshadeall_displist(t->scene); @@ -800,24 +778,6 @@ void postTrans (TransInfo *t) TransData *td; G.moving = 0; // Set moving flag off (display as usual) -#ifdef WITH_VERSE - - for (td = t->data; td < t->data + t->total; td++) { - if(td->flag & TD_VERSE_VERT) { - if(td->verse) send_versevert_pos((VerseVert*)td->verse); - } - else if(td->flag & TD_VERSE_OBJECT) { - if(td->verse) { - struct VNode *vnode; - vnode = (VNode*)((Object*)td->verse)->vnode; - ((VObjectData*)vnode->data)->flag |= POS_SEND_READY; - ((VObjectData*)vnode->data)->flag |= ROT_SEND_READY; - ((VObjectData*)vnode->data)->flag |= SCALE_SEND_READY; - b_verse_send_transformation((Object*)td->verse); - } - } - } -#endif stopConstraint(t); @@ -927,25 +887,6 @@ void restoreTransObjects(TransInfo *t) for (td = t->data; td < t->data + t->total; td++) { restoreElement(td); -#ifdef WITH_VERSE - /* position of vertexes and object transformation matrix is sent - * extra, becuase blender uses synchronous sending of vertexes - * position as well object trans. matrix and it isn't possible to - * send it in recalcData sometimes */ - if(td->flag & TD_VERSE_VERT) { - if(td->verse) { - ((VerseVert*)td->verse)->flag |= VERT_POS_OBSOLETE; - } - } - else if(td->flag & TD_VERSE_OBJECT) - if(td->verse) { - struct VNode *vnode; - vnode = (VNode*)((Object*)td->verse)->vnode; - ((VObjectData*)vnode->data)->flag |= POS_SEND_READY; - ((VObjectData*)vnode->data)->flag |= ROT_SEND_READY; - ((VObjectData*)vnode->data)->flag |= SCALE_SEND_READY; - } -#endif } Mat3One(t->mat); diff --git a/source/blender/imbuf/CMakeLists.txt b/source/blender/imbuf/CMakeLists.txt index 2d41a6d73e6..61ec3430bff 100644 --- a/source/blender/imbuf/CMakeLists.txt +++ b/source/blender/imbuf/CMakeLists.txt @@ -35,11 +35,6 @@ SET(INC ${ZLIB_INC} ) -IF(WITH_VERSE) - ADD_DEFINITIONS(-DWITH_VERSE) - SET(INC ${INC} VERSE_INC) -ENDIF(WITH_VERSE) - IF(WITH_OPENEXR) ADD_DEFINITIONS(-DWITH_OPENEXR) ENDIF(WITH_OPENEXR) diff --git a/source/blender/imbuf/SConscript b/source/blender/imbuf/SConscript index 27337a0b15a..9da0cf21596 100644 --- a/source/blender/imbuf/SConscript +++ b/source/blender/imbuf/SConscript @@ -13,10 +13,6 @@ incs += ' ' + env['BF_ZLIB_INC'] defs = [] -if env['WITH_BF_VERSE']: - defs.append('WITH_VERSE') - incs += ' ' + env['BF_VERSE_INCLUDE'] - if env['WITH_BF_OPENEXR']: defs.append('WITH_OPENEXR') diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h index 243f236ce3b..2846d138fbf 100644 --- a/source/blender/makesdna/DNA_ID.h +++ b/source/blender/makesdna/DNA_ID.h @@ -200,15 +200,6 @@ typedef struct PreviewImage { /* fluidsim Ipo */ #define ID_FLUIDSIM MAKE_ID2('F', 'S') - -/*#ifdef WITH_VERSE*/ -#define ID_VS MAKE_ID2('V', 'S') /* fake id for VerseSession, needed for outliner */ -#define ID_VN MAKE_ID2('V', 'N') /* fake id for VerseNode, needed for outliner */ -#define ID_MS MAKE_ID2('M', 'S') /* fake id for VerseServer root entry, needed for outliner */ -#define ID_SS MAKE_ID2('S', 'S') /* fake id for VerseServer entry, needed for ountliner */ -/*#endif*/ - - /* id->flag: set frist 8 bits always at zero while reading */ #define LIB_LOCAL 0 #define LIB_EXTERN 1 diff --git a/source/blender/makesdna/DNA_image_types.h b/source/blender/makesdna/DNA_image_types.h index 7a6e1707dad..371b0d75951 100644 --- a/source/blender/makesdna/DNA_image_types.h +++ b/source/blender/makesdna/DNA_image_types.h @@ -95,10 +95,6 @@ typedef struct Image { /* display aspect - for UV editing images resized for faster openGL display */ float aspx, aspy; - -/*#ifdef WITH_VERSE*/ - void *vnode; /* pointer at verse bitmap node */ -/*#endif*/ } Image; diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h index 8e9341cae0f..7da057efdb1 100644 --- a/source/blender/makesdna/DNA_mesh_types.h +++ b/source/blender/makesdna/DNA_mesh_types.h @@ -99,10 +99,6 @@ typedef struct Mesh { struct Multires *mr; /* Multiresolution modeling data */ struct PartialVisibility *pv; -/*ifdef WITH_VERSE*/ - /* not written in file, pointer at geometry VerseNode */ - void *vnode; -/*#endif*/ } Mesh; /* deprecated by MTFace, only here for file reading */ diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index f3d18e0559b..7deea1899d1 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -225,10 +225,6 @@ typedef struct Object { unsigned int init_state; /* bit masks of initial state as recorded by the users */ int pad2; -/*#ifdef WITH_VERSE*/ - void *vnode; /* pointer at object VerseNode */ -/*#endif*/ - ListBase gpulamp; /* runtime, for lamps only */ } Object; diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c index 53359a9c39d..de81ff10ae8 100644 --- a/source/blender/makesrna/intern/rna_image.c +++ b/source/blender/makesrna/intern/rna_image.c @@ -92,7 +92,6 @@ static void rna_def_image(BlenderRNA *brna) {IMA_TYPE_IMAGE, "IMAGE", "Image", ""}, {IMA_TYPE_MULTILAYER, "MULTILAYER", "Multilayer", ""}, {IMA_TYPE_UV_TEST, "UVTEST", "UV Test", ""}, - //{IMA_TYPE_VERSE, "VERSE", "Verse", ""}, {IMA_TYPE_R_RESULT, "RENDERRESULT", "Render Result", ""}, {IMA_TYPE_COMPOSITE, "COMPOSITING", "Compositing", ""}, {0, NULL, NULL, NULL}}; diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt index 4f8f4f38167..0b2bd9b4bfd 100644 --- a/source/blender/nodes/CMakeLists.txt +++ b/source/blender/nodes/CMakeLists.txt @@ -35,11 +35,6 @@ SET(INC ${ZLIB_INC} ) -IF(WITH_VERSE) - ADD_DEFINITIONS(-DWITH_VERSE) - SET(INC ${INC} ${VERSE_INC}) -ENDIF(WITH_VERSE) - IF(WITH_OPENEXR) ADD_DEFINITIONS(-DWITH_OPENEXR) ENDIF(WITH_OPENEXR) @@ -64,10 +59,6 @@ ADD_DEFINITIONS(-DWITH_CCGSUBSURF) BLENDERLIB(bf_nodes "${SRC}" "${INC}") -IF(WITH_VERSE) - ADD_DEPENDENCIES(bf_nodes mkprot verse) -ENDIF(WITH_VERSE) - IF(WITH_INTERNATIONAL) ADD_DEFINITIONS(-DWITH_FREETYPE2) ENDIF(WITH_INTERNATIONAL) diff --git a/source/blender/nodes/SConscript b/source/blender/nodes/SConscript index 7efbbd83aba..c7be20e3ec0 100644 --- a/source/blender/nodes/SConscript +++ b/source/blender/nodes/SConscript @@ -28,13 +28,6 @@ else: if env['WITH_BF_INTERNATIONAL']: defs += ' WITH_FREETYPE2' -if env['WITH_BF_VERSE']: - defs += ' WITH_VERSE' - incs += ' ' + env['BF_VERSE_INCLUDE'] - -if env['WITH_BF_VERSE']: - defs += ' WITH_VERSE' - if env['WITH_BF_OPENEXR']: defs += ' WITH_OPENEXR' diff --git a/source/blender/python/CMakeLists.txt b/source/blender/python/CMakeLists.txt index 0ae8e5c421f..b94ae8749df 100644 --- a/source/blender/python/CMakeLists.txt +++ b/source/blender/python/CMakeLists.txt @@ -30,11 +30,6 @@ SET(INC ../blenkernel ../editors/include ../windowmanager ${PYTHON_INC} ) -IF(WITH_VERSE) - ADD_DEFINITIONS(-DWITH_VERSE) - SET(INC ${INC} ${VERSE_INC}) -ENDIF(WITH_VERSE) - IF(WITH_OPENEXR) ADD_DEFINITIONS(-DWITH_OPENEXR) ENDIF(WITH_OPENEXR) @@ -53,10 +48,6 @@ ADD_DEFINITIONS(-DWITH_CCGSUBSURF) BLENDERLIB(bf_python "${SRC}" "${INC}") -IF(WITH_VERSE) - ADD_DEPENDENCIES(bf_nodes mkprot verse) -ENDIF(WITH_VERSE) - IF(WITH_INTERNATIONAL) ADD_DEFINITIONS(-DWITH_FREETYPE2) ENDIF(WITH_INTERNATIONAL) diff --git a/source/blender/python/intern/Makefile b/source/blender/python/intern/Makefile index ef4fc8bb58a..ea08ecac945 100644 --- a/source/blender/python/intern/Makefile +++ b/source/blender/python/intern/Makefile @@ -62,15 +62,5 @@ CPPFLAGS += -I../../render/extern/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I$(NAN_MEMUTIL)/include - -ifeq ($(WITH_VERSE), true) - CPPFLAGS += -DWITH_VERSE - CPPFLAGS += -I$(NAN_VERSE)/include - # print some other debug information - ifeq ($(VERSE_DEBUG_PRINT), true) - CPPFLAGS += -DVERSE_DEBUG_PRINT - endif -endif - # path to our own headerfiles CPPFLAGS += -I.. diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt index 10830d8d0aa..b381206cb8b 100644 --- a/source/blender/windowmanager/CMakeLists.txt +++ b/source/blender/windowmanager/CMakeLists.txt @@ -71,11 +71,6 @@ IF(WIN32) SET(INC ${INC} ${PTHREADS_INC}) ENDIF(WIN32) -IF(WITH_VERSE) - SET(INC ${INC} ${VERSE_INC}) - ADD_DEFINITIONS(-DWITH_VERSE) -ENDIF(WITH_VERSE) - # TODO buildinfo IF(BF_BUILDINFO) ADD_DEFINITIONS(-DNAN_BUILDINFO) @@ -83,7 +78,3 @@ ENDIF(BF_BUILDINFO) BLENDERLIB_NOLIST(bf_windowmanager "${SRC}" "${INC}") -IF(WITH_VERSE) - ADD_DEPENDENCIES(bf_windowmanager mkprot verse) -ENDIF(WITH_VERSE) - diff --git a/source/blender/windowmanager/intern/Makefile b/source/blender/windowmanager/intern/Makefile index 5ca68bef0a2..b5b04b11be7 100644 --- a/source/blender/windowmanager/intern/Makefile +++ b/source/blender/windowmanager/intern/Makefile @@ -71,15 +71,6 @@ ifeq ($(INTERNATIONAL), true) CPPFLAGS += -DINTERNATIONAL endif -ifeq ($(WITH_VERSE), true) - CPPFLAGS += -DWITH_VERSE - CPPFLAGS += -I$(NAN_VERSE)/include - # print some other debug information - ifeq ($(VERSE_DEBUG_PRINT), true) - CPPFLAGS += -DVERSE_DEBUG_PRINT - endif -endif - ifeq ($(WITH_QUICKTIME),true) CPPFLAGS += -I../quicktime CPPFLAGS += -DWITH_QUICKTIME diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 65df71a067a..4bac829c80a 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -200,9 +200,6 @@ void WM_exit(bContext *C) free_ttfont(); /* bke_font.h */ -#ifdef WITH_VERSE - end_all_verse_sessions(); -#endif free_openrecent(); BKE_freecubetable(); diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 7e249095868..ddd9b636660 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -240,7 +240,6 @@ IF(UNIX) blender_CTR bf_moto bf_bmfont - verse bf_windowmanager bf_editors bf_ftfont diff --git a/source/nan_definitions.mk b/source/nan_definitions.mk index 04a1d107931..258cfc6f586 100644 --- a/source/nan_definitions.mk +++ b/source/nan_definitions.mk @@ -109,10 +109,6 @@ endif export NAN_FFMPEGCFLAGS ?= -I$(NAN_FFMPEG)/include endif - ifeq ($(WITH_VERSE), true) - export NAN_VERSE ?= $(LCGDIR)/verse - endif - export WITH_OPENEXR ?= true export WITH_DDS ?= true diff --git a/source/nan_link.mk b/source/nan_link.mk index 186fe07e09a..e92103f56d9 100644 --- a/source/nan_link.mk +++ b/source/nan_link.mk @@ -134,9 +134,6 @@ ifeq ($(OS),windows) LDFLAGS += -mwindows -mno-cygwin -mconsole DADD += -L/usr/lib/w32api -lnetapi32 -lopengl32 -lglu32 -lshfolder DADD += -L/usr/lib/w32api -lwinmm -lwsock32 - ifeq ($(WITH_VERSE),true) - DADD += -lws2_32 - endif else DADD = kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib DADD += advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib -- cgit v1.2.3