/** * $Id:$ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** * * The contents of this file may be used under the terms of either the GNU * General Public License Version 2 or later (the "GPL", see * http://www.gnu.org/licenses/gpl.html ), or the Blender License 1.0 or * later (the "BL", see http://www.blender.org/BL/ ) which has to be * bought from the Blender Foundation to become active, in which case the * above mentioned GPL option does not apply. * * The Original Code is Copyright (C) 2002 by NaN Holding BV. * All rights reserved. * * The Original Code is: all of this file. * * Contributor(s): none yet. * * ***** END GPL/BL DUAL LICENSE BLOCK ***** */ #include "imbuf.h" #define OBJECTBLOK "delta" /************************************************************************/ /* DELTA'S */ /************************************************************************/ void addbpl(struct ImBuf *ibuf1, struct ImBuf *ibuf2) { int size,d; uint **list1,**list2; size = ibuf1->y * ibuf1->skipx; list1 = ibuf1->planes; list2 = ibuf2->planes; for (d = ibuf1->depth;d>0;d-=8){ int offset; for (offset=0; offsety * ibuf1->skipx; list1 = ibuf1->planes; list2 = ibuf2->planes; for (d = ibuf1->depth;d>0;d-=8){ int offset; for (offset=0; offsety * ibuf->skipx; list = ibuf->planes; for (d = ibuf->depth;d>0;d-=8){ int offset; for (offset=0; offsety * ibuf->skipx; list = ibuf->planes; for (d = ibuf->depth;d>0;d-=8){ int offset; for (offset=0; offset=0;i--){ data2=(list[i])[offset]; data2 ^= data1; (list[i])[offset] = data2; data1=data2; } } list +=8; } } void rectxorn(int *drect, int *srect, int x) { for(;x>0;x--){ *drect++ ^= *srect++; } } short makedelta(char *pic1,char *pic2,char *delta) { struct ImBuf *ibuf1,*ibuf2; extern void rectxor(); extern void rectsub(); short ok; ok=FALSE; ibuf1=loadiffname(pic1,IB_cmap); if (ibuf1){ ibuf2=loadiffname(pic2,IB_cmap); if (ibuf2){ if ((ibuf1->x == ibuf2->x) && (ibuf1->y == ibuf2->y) && (ibuf1->depth == ibuf2->depth)){ if ((ibuf1->planes != 0) && (ibuf2->planes !=0)){ subbpl(ibuf1,ibuf2); swapbitsbpl(ibuf1); if (saveiff(ibuf1,delta,IB_vert | IB_cmap)==0){ fprintf(stderr,"Makedelta: Couldn't save delta:%s\n",delta); } else ok=TRUE; } else if ((ibuf1->rect != 0) && (ibuf2->rect != 0)){ rectoptot(ibuf1,ibuf2,rectsub); if (saveiff(ibuf1,delta,IB_rect | IB_cmap)==0){ fprintf(stderr,"Makedelta: Couldn't save delta:%s\n",delta); } else ok=TRUE; } else{ fprintf(stderr,"Makedelta: %s, %s incompatible types\n",pic1,pic2); } } else{ fprintf(stderr,"Makedelta: %s, %s different sizes\n",pic1,pic2); } freeImBuf(ibuf2); } else{ fprintf(stderr,"Makedelta: Couldn't load pic: %s\n",pic2); } freeImBuf(ibuf1); } else{ fprintf(stderr,"Makedelta: Couldn't load pic: %s\n",pic1); } return (ok); }