[Bf-committers] BlenderCE - First results

Salvatore Russo salvatore.russo at laposte.net
Wed Jul 27 11:09:23 CEST 2005


Hi :=)

Ok, I run a stack trace and have the following:

free_libblock(ListBase * 0x8c0292b0, void * 0x14040004) line 406 + 4 bytes
free_main(Main * 0x006a012c) line 528
clear_global() line 232
setup_app_data(BlendFileData * 0x008e743c, char * 0x0055f360) line 350
BKE_read_file_from_memory(char * 0x0056eda0 datatoc_B_blend, int 93008, void * 0x00000000) line 471
BIF_read_homefile() line 300 + 20 bytes
BIF_init() line 607
main(int 1, char * * 0x006a0090) line 448
WinMain(HINSTANCE__ * 0xcf554372, HINSTANCE__ * 0x00000000, unsigned short * 0x2669fed8, int 5) line 47 + 12 bytes
WinMainCRTStartup(HINSTANCE__ *, HINSTANCE__ * 0x14040004, unsigned short * 0x14040004, int 96) line 21 + 20 bytes
27f66ee0()


I run also a step by step debug. And I CRASHES my pocketpc :=) Ah... first big crash! It should happen... but what I discovered is that my pocketpc crashes in intern/mallocn.c in the function void *MEM_callocN(unsigned int len, char *str) in this command:

memh= (MemHead *)calloc(len+sizeof(MemHead)+sizeof(MemTail),1);

That's probably what I already mentioned with UNICODE. I thought it would work without big problems but of course it was wrong... especially for this memory manipulations... in unicode, character are 2 bytes... and memory allocation should consider it... all strlen() or strcmp() function should be wcslen() or wcscmp()... and also char shouldd be wchar_t, not 'a' but _T('a')...

When I began my research on pocketpc porting, I collect lot of information about this... I will have to study this again...  the "simpletest.c" in guardedalloc will be a fist good exercice.

I will let you know.

Salvatore


> Hi,
> 
> So, you've been busy! :)
> 
> > Now the bad new: if I run BlenderCE, the console say me that it can 
> > not import blabla.. (normal) then the window for Blender appears with 
> > the title "ghost window class" ... and then it crashes... it would have 
> > been too good if it was working at the first try :=)
> > I run the debug version... it crashes because of a "First chance 
> > Exception in Blender.exe: 0XC0000005: Access violation"... Good to know 
> > :=) And it stop in BKE_library.c in the function: "Freelibbloc".
> 
> Can't you produce a stack trace? To see all calls it made tells much 
> more.
> 
> > This is probably because of the big size of BlenderCE for a pocketpc !?
> 
> If it has 32 meg memory, it should run fine.
> 
> > And I added functions for WinCE (and dummies):
> > int rewind(FILE* stream)
> > { 
> > return fseek(stream,0,SEEK_SET);
> > }
> > int remove(const char* pathname)
> > {
> > return unlink(pathname);
> > }
> > int rename (const char *oldname, const char *newname)
> > {
> > // ask OS to move file
> > if (!MoveFile(oldname, newname))
> > return -1;
> > 
> > return 0;
> > }
> > //No current directory in WinCE
> > int chdir (const char *path){return 1;}
> >
> > //For WinCE, not implemented for the moment!
> > int system(char *S){return 0;}
> >
> > Does anyone have suggestions about the best way to proceed at this 
> > point, maybe how to reduce the size of BlenderCE (deactivating useless 
> > functions). Maybe other suggestions??
> 
> The above calls should not crash blender on startup...
> 
> >
> > The biggest difference with Pocketpc is that it ONLY works in Unicode, 
> > do you think that I have to focus on a special part of Blender to take 
> > care about this difference?
> 
> What do you mean with 'works in unicode'?
> BTW; also don't forget the compiler that chars are unsigned by default 
> in Blender.
> 
> -Ton-
> 
> >
> > Thank you for your feedback and your suggestions :=)
> >
> > Salvatore
> >
> >
> >
> >
> >
> >
> >
> >
> > //Begin of Dummies Functions
> > //*************Dummies in Klimt*****************************
> > KLIMTES_API void glDrawBuffer(GLenum mode){}
> > KLIMTES_API void glReadBuffer(GLenum mode){}
> > KLIMTES_API void glEvalMesh1( GLenum mode, GLint i1, GLint i2 ){}
> > KLIMTES_API void glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint 
> > j1, GLint j2 ){}
> > KLIMTES_API void glGetTexLevelParameterfv( GLenum target, GLint level, 
> > GLenum pname, GLfloat *params ){}
> > KLIMTES_API void glIndexMask( GLuint mask ){}
> > KLIMTES_API void glIndexd( GLdouble c ){}
> > KLIMTES_API void glIndexf( GLfloat c ){}
> > KLIMTES_API void glIndexs( GLshort c ){}
> > KLIMTES_API void glIndexdv( const GLdouble *c ){}
> > KLIMTES_API void glIndexfv( const GLfloat *c ){}
> > KLIMTES_API void glIndexiv( const GLint *c ){}
> > KLIMTES_API void glIndexsv( const GLshort *c ){}
> > KLIMTES_API void glRasterPos2f( GLfloat x, GLfloat y ){}
> > KLIMTES_API void glRasterPos2d( GLdouble x, GLdouble y ){}
> > KLIMTES_API void glRasterPos2i( GLint x, GLint y ){}
> > KLIMTES_API void glRasterPos2s( GLshort x, GLshort y ){}
> > KLIMTES_API void glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ){}
> > KLIMTES_API void glRasterPos3i( GLint x, GLint y, GLint z ){}
> > KLIMTES_API void glRasterPos3s( GLshort x, GLshort y, GLshort z ){}
> > KLIMTES_API void glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, 
> > GLdouble w ){}
> > KLIMTES_API void glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, 
> > GLfloat w ){}
> > KLIMTES_API void glRasterPos4i( GLint x, GLint y, GLint z, GLint w ){}
> > KLIMTES_API void glRasterPos4s( GLshort x, GLshort y, GLshort z, 
> > GLshort w ){}
> > KLIMTES_API void glRasterPos2dv( const GLdouble *v ){}
> > KLIMTES_API void glRasterPos2fv( const GLfloat *v ){}
> > KLIMTES_API void glRasterPos2iv( const GLint *v ){}
> > KLIMTES_API void glRasterPos2sv( const GLshort *v ){}
> > KLIMTES_API void glRasterPos3dv( const GLdouble *v ){}
> > KLIMTES_API void glRasterPos3fv( const GLfloat *v ){}
> > KLIMTES_API void glRasterPos3iv( const GLint *v ){}
> > KLIMTES_API void glRasterPos3sv( const GLshort *v ){}
> > KLIMTES_API void glRasterPos4dv( const GLdouble *v ){}
> > KLIMTES_API void glRasterPos4fv( const GLfloat *v ){}
> > KLIMTES_API void glRasterPos4iv( const GLint *v ){}
> > KLIMTES_API void glRasterPos4sv( const GLshort *v ){}
> > KLIMTES_API void glMap1d( GLenum target, GLdouble u1, GLdouble u2, 
> > GLint stride, GLint order, const GLdouble *points ){}
> > KLIMTES_API void glMap1f( GLenum target, GLfloat u1, GLfloat u2, GLint 
> > stride, GLint order, const GLfloat *points ){}
> > KLIMTES_API void glMap2d( GLenum target, GLdouble u1, GLdouble u2, 
> > GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, 
> > GLint vorder, const GLdouble *points ){}
> > KLIMTES_API void glMap2f( GLenum target, GLfloat u1, GLfloat u2, GLint 
> > ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint 
> > vorder, const GLfloat *points ){}
> > KLIMTES_API void glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ){}
> > KLIMTES_API void glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ){}
> > KLIMTES_API void glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, 
> > GLint vn, GLdouble v1, GLdouble v2 ){}
> > KLIMTES_API void glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, GLint 
> > vn, GLfloat v1, GLfloat v2 ){}
> > KLIMTES_API void glPixelMapusv( GLenum map, GLint mapsize, const 
> > GLushort *values ){}
> > //Some list function are dummies in KlimtES so dummies here
> > KLIMTES_API void glCallLists( GLsizei n, GLenum type, const GLvoid 
> > *lists ){}
> > KLIMTES_API void glListBase( GLuint base ){}
> > KLIMTES_API GLboolean glIsList( GLuint list ){return false;}
> >
> > //*******************glTex********************************
> > void glTexImage1D( GLenum target, GLint level, GLint internalFormat, 
> > GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid 
> > *pixels ){}
> >
> > //***************glEval(all)*******************************
> > KLIMTES_API void glEvalCoord1d( GLdouble u ){}
> > KLIMTES_API void glEvalCoord1f( GLfloat u ){}
> > KLIMTES_API void glEvalCoord1dv( const GLdouble *u ){}
> > KLIMTES_API void glEvalCoord1fv( const GLfloat *u ){}
> > KLIMTES_API void glEvalCoord2d( GLdouble u, GLdouble v ){}
> > KLIMTES_API void glEvalCoord2f( GLfloat u, GLfloat v ){}
> > KLIMTES_API void glEvalCoord2dv( const GLdouble *u ){}
> > KLIMTES_API void glEvalCoord2fv( const GLfloat *u ){}
> > KLIMTES_API void glEvalPoint1( GLint i ){}
> > KLIMTES_API void glEvalPoint2( GLint i, GLint j ){}
> >
> > //********************glGet*************************************
> > KLIMTES_API void glGetPolygonStipple( GLubyte *mask ){}
> > KLIMTES_API void glGetPixelMapfv( GLenum map, GLfloat *values ){}
> > KLIMTES_API void glGetPixelMapuiv( GLenum map, GLuint *values ){}
> > KLIMTES_API void glGetPixelMapusv( GLenum map, GLushort *values ){}
> > KLIMTES_API void glGetTexGendv( GLenum coord, GLenum pname, GLdouble 
> > *params ){}
> > KLIMTES_API void glGetTexGenfv( GLenum coord, GLenum pname, GLfloat 
> > *params ){}
> > KLIMTES_API void glGetTexGeniv( GLenum coord, GLenum pname, GLint 
> > *params ){}
> > KLIMTES_API void glGetTexImage( GLenum target, GLint level, GLenum 
> > format, GLenum type, GLvoid *pixels ){}
> > KLIMTES_API void glGetMapdv( GLenum target, GLenum query, GLdouble *v 
> > ){}
> > KLIMTES_API void glGetMapfv( GLenum target, GLenum query, GLfloat *v 
> > ){}
> > KLIMTES_API void glGetMapiv( GLenum target, GLenum query, GLint *v ){}
> >
> > //****************glName (all)**************************
> > KLIMTES_API void glInitNames( void ){}
> > KLIMTES_API void glLoadName( GLuint name ){}
> > KLIMTES_API void glPushName( GLuint name ){}
> > KLIMTES_API void glPopName( void ){}
> > //******************Others**********************************
> > KLIMTES_API void glSelectBuffer( GLsizei size, GLuint *buffer ){}
> > KLIMTES_API void glCopyPixels( GLint x, GLint y, GLsizei width, 
> > GLsizei height, GLenum type ){}
> > KLIMTES_API void glClearAccum( GLfloat red, GLfloat green, GLfloat 
> > blue, GLfloat alpha ){}
> > KLIMTES_API void glEdgeFlag( GLboolean flag ){}
> > KLIMTES_API void glEdgeFlagv( const GLboolean *flag ){}
> > KLIMTES_API void glFeedbackBuffer( GLsizei size, GLenum type, GLfloat 
> > *buffer ){}
> > KLIMTES_API void glPassThrough( GLfloat token ){}
> > KLIMTES_API void glPrioritizeTextures( GLsizei n, const GLuint 
> > *textures, const GLclampf *priorities ){}
> >
> > KLIMTES_API GLint glRenderMode( GLenum mode ){return 0;}
> > KLIMTES_API GLboolean glAreTexturesResident( GLsizei n, const GLuint 
> > *textures, GLboolean *residences ){return false;}
> > //end of Dummies Functions
> >
> >
> > Accédez au courrier électronique de La Poste : www.laposte.net ;
> > 3615 LAPOSTENET (0,34€/mn) ; tél : 08 92 68 13 50 (0,34€/mn)
> >
> >
> >
> > _______________________________________________
> > Bf-committers mailing list
> > Bf-committers at projects.blender.org
> > http://projects.blender.org/mailman/listinfo/bf-committers
> >
> >
> ------------------------------------------------------------------------ 
> --
> Ton Roosendaal Blender Foundation ton at blender.org 
> http://www.blender.org
> 
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at projects.blender.org
> http://projects.blender.org/mailman/listinfo/bf-committers

Accédez au courrier électronique de La Poste : www.laposte.net ; 
3615 LAPOSTENET (0,34€/mn) ; tél : 08 92 68 13 50 (0,34€/mn)


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.blender.org/pipermail/bf-committers/attachments/20050727/0f157f88/attachment.html


More information about the Bf-committers mailing list