2004-01-04 22:10:36 +00:00
/*
2008-04-16 22:40:48 +00:00
* * * * * * BEGIN GPL LICENSE BLOCK * * * * *
2002-10-12 11:37:38 +00:00
*
* 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
2008-04-16 22:40:48 +00:00
* of the License , or ( at your option ) any later version .
2002-10-12 11:37:38 +00:00
*
* 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 ,
2010-02-12 13:34:04 +00:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
2002-10-12 11:37:38 +00:00
*
* The Original Code is Copyright ( C ) 2001 - 2002 by NaN Holding BV .
* All rights reserved .
*
* The Original Code is : all of this file .
*
* Contributor ( s ) : none yet .
*
2008-04-16 22:40:48 +00:00
* * * * * * END GPL LICENSE BLOCK * * * * *
2002-10-12 11:37:38 +00:00
*/
2010-02-08 13:55:31 +00:00
2011-02-25 10:01:33 +00:00
/** \file creator/creator.c
* \ ingroup creator
*/
2010-02-08 13:55:31 +00:00
# if defined(__linux__) && defined(__GNUC__)
2012-05-21 09:00:35 +00:00
# define _GNU_SOURCE
# include <fenv.h>
2010-02-08 13:55:31 +00:00
# endif
2011-02-25 10:58:04 +00:00
# if (defined(__APPLE__) && (defined(__i386__) || defined(__x86_64__)))
2012-05-21 09:00:35 +00:00
# define OSX_SSE_FPE
# include <xmmintrin.h>
2010-05-24 20:39:01 +00:00
# endif
2013-01-11 01:30:44 +00:00
/* crash handler */
2013-01-10 16:37:48 +00:00
# ifdef WIN32
# include <process.h> /* getpid */
# else
# include <unistd.h> /* getpid */
# endif
2012-03-20 02:17:37 +00:00
# ifdef WIN32
2013-02-19 12:05:38 +00:00
# include <windows.h>
2012-05-21 09:00:35 +00:00
# include "utfconv.h"
2012-03-20 02:17:37 +00:00
# endif
2013-01-13 15:01:34 +00:00
/* for backtrace */
2013-01-18 21:05:37 +00:00
# if defined(__linux__) || defined(__APPLE__)
2013-01-13 15:01:34 +00:00
# include <execinfo.h>
2013-01-18 21:05:37 +00:00
# elif defined(_MSV_VER)
# include <DbgHelp.h>
2013-01-13 15:01:34 +00:00
# endif
2002-10-12 11:37:38 +00:00
# include <stdlib.h>
2011-04-12 15:55:38 +00:00
# include <stddef.h>
2003-10-10 13:36:38 +00:00
# include <string.h>
2013-01-11 01:30:44 +00:00
# include <errno.h>
2013-11-20 21:47:05 +00:00
# include <time.h>
2002-10-12 11:37:38 +00:00
/* This little block needed for linking to Blender... */
# include "MEM_guardedalloc.h"
# ifdef WIN32
2012-04-15 07:54:07 +00:00
# include "BLI_winstuff.h"
2002-10-12 11:37:38 +00:00
# endif
2010-02-01 01:43:31 +00:00
# include "BLI_args.h"
2010-04-13 12:51:03 +00:00
# include "BLI_threads.h"
2011-01-07 18:36:47 +00:00
# include "BLI_utildefines.h"
2011-06-24 16:54:30 +00:00
# include "BLI_callbacks.h"
2013-10-03 14:44:33 +00:00
# include "BLI_blenlib.h"
# include "BLI_mempool.h"
2002-10-12 11:37:38 +00:00
# include "DNA_ID.h"
Giant commit!
A full detailed description of this will be done later... is several days
of work. Here's a summary:
Render:
- Full cleanup of render code, removing *all* globals and bad level calls
all over blender. Render module is now not called abusive anymore
- API-fied calls to rendering
- Full recode of internal render pipeline. Is now rendering tiles by
default, prepared for much smarter 'bucket' render later.
- Each thread now can render a full part
- Renders were tested with 4 threads, goes fine, apart from some lookup
tables in softshadow and AO still
- Rendering is prepared to do multiple layers and passes
- No single 32 bits trick in render code anymore, all 100% floats now.
Writing images/movies
- moved writing images to blender kernel (bye bye 'schrijfplaatje'!)
- made a new Movie handle system, also in kernel. This will enable much
easier use of movies in Blender
PreviewRender:
- Using new render API, previewrender (in buttons) now uses regular render
code to generate images.
- new datafile 'preview.blend.c' has the preview scenes in it
- previews get rendered in exact displayed size (1 pixel = 1 pixel)
3D Preview render
- new; press Pkey in 3d window, for a panel that continuously renders
(pkey is for games, i know... but we dont do that in orange now!)
- this render works nearly identical to buttons-preview render, so it stops
rendering on any event (mouse, keyboard, etc)
- on moving/scaling the panel, the render code doesn't recreate all geometry
- same for shifting/panning view
- all other operations (now) regenerate the full render database still.
- this is WIP... but big fun, especially for simple scenes!
Compositor
- Using same node system as now in use for shaders, you can composit images
- works pretty straightforward... needs much more options/tools and integration
with rendering still
- is not threaded yet, nor is so smart to only recalculate changes... will be
done soon!
- the "Render Result" node will get all layers/passes as output sockets
- The "Output" node renders to a builtin image, which you can view in the Image
window. (yes, output nodes to render-result, and to files, is on the list!)
The Bad News
- "Unified Render" is removed. It might come back in some stage, but this
system should be built from scratch. I can't really understand this code...
I expect it is not much needed, especially with advanced layer/passes
control
- Panorama render, Field render, Motion blur, is not coded yet... (I had to
recode every single feature in render, so...!)
- Lens Flare is also not back... needs total revision, might become composit
effect though (using zbuffer for visibility)
- Part render is gone! (well, thats obvious, its default now).
- The render window is only restored with limited functionality... I am going
to check first the option to render to a Image window, so Blender can become
a true single-window application. :)
For example, the 'Spare render buffer' (jkey) doesnt work.
- Render with border, now default creates a smaller image
- No zbuffers are written yet... on the todo!
- Scons files and MSVC will need work to get compiling again
OK... thats what I can quickly recall. Now go compiling!
2006-01-23 22:05:47 +00:00
# include "DNA_scene_types.h"
2011-10-21 17:37:38 +00:00
# include "DNA_userdef_types.h"
2002-10-12 11:37:38 +00:00
# include "BKE_blender.h"
2013-03-24 12:13:13 +00:00
# include "BKE_brush.h"
2009-09-18 22:25:49 +00:00
# include "BKE_context.h"
2012-03-28 05:09:50 +00:00
# include "BKE_depsgraph.h" /* for DAG_on_visible_update */
2003-11-25 18:14:00 +00:00
# include "BKE_font.h"
2002-10-12 11:37:38 +00:00
# include "BKE_global.h"
2013-02-11 03:01:50 +00:00
# include "BKE_library.h"
2002-10-12 11:37:38 +00:00
# include "BKE_main.h"
Giant commit!
A full detailed description of this will be done later... is several days
of work. Here's a summary:
Render:
- Full cleanup of render code, removing *all* globals and bad level calls
all over blender. Render module is now not called abusive anymore
- API-fied calls to rendering
- Full recode of internal render pipeline. Is now rendering tiles by
default, prepared for much smarter 'bucket' render later.
- Each thread now can render a full part
- Renders were tested with 4 threads, goes fine, apart from some lookup
tables in softshadow and AO still
- Rendering is prepared to do multiple layers and passes
- No single 32 bits trick in render code anymore, all 100% floats now.
Writing images/movies
- moved writing images to blender kernel (bye bye 'schrijfplaatje'!)
- made a new Movie handle system, also in kernel. This will enable much
easier use of movies in Blender
PreviewRender:
- Using new render API, previewrender (in buttons) now uses regular render
code to generate images.
- new datafile 'preview.blend.c' has the preview scenes in it
- previews get rendered in exact displayed size (1 pixel = 1 pixel)
3D Preview render
- new; press Pkey in 3d window, for a panel that continuously renders
(pkey is for games, i know... but we dont do that in orange now!)
- this render works nearly identical to buttons-preview render, so it stops
rendering on any event (mouse, keyboard, etc)
- on moving/scaling the panel, the render code doesn't recreate all geometry
- same for shifting/panning view
- all other operations (now) regenerate the full render database still.
- this is WIP... but big fun, especially for simple scenes!
Compositor
- Using same node system as now in use for shaders, you can composit images
- works pretty straightforward... needs much more options/tools and integration
with rendering still
- is not threaded yet, nor is so smart to only recalculate changes... will be
done soon!
- the "Render Result" node will get all layers/passes as output sockets
- The "Output" node renders to a builtin image, which you can view in the Image
window. (yes, output nodes to render-result, and to files, is on the list!)
The Bad News
- "Unified Render" is removed. It might come back in some stage, but this
system should be built from scratch. I can't really understand this code...
I expect it is not much needed, especially with advanced layer/passes
control
- Panorama render, Field render, Motion blur, is not coded yet... (I had to
recode every single feature in render, so...!)
- Lens Flare is also not back... needs total revision, might become composit
effect though (using zbuffer for visibility)
- Part render is gone! (well, thats obvious, its default now).
- The render window is only restored with limited functionality... I am going
to check first the option to render to a Image window, so Blender can become
a true single-window application. :)
For example, the 'Spare render buffer' (jkey) doesnt work.
- Render with border, now default creates a smaller image
- No zbuffers are written yet... on the todo!
- Scons files and MSVC will need work to get compiling again
OK... thats what I can quickly recall. Now go compiling!
2006-01-23 22:05:47 +00:00
# include "BKE_material.h"
2013-08-19 09:05:34 +00:00
# include "BKE_modifier.h"
2003-11-25 18:14:00 +00:00
# include "BKE_packedFile.h"
2002-10-12 11:37:38 +00:00
# include "BKE_scene.h"
2007-03-26 15:07:38 +00:00
# include "BKE_node.h"
2009-09-18 22:25:49 +00:00
# include "BKE_report.h"
2009-12-07 20:39:57 +00:00
# include "BKE_sound.h"
2011-11-24 05:18:26 +00:00
# include "BKE_image.h"
2002-10-12 11:37:38 +00:00
2012-03-28 05:09:50 +00:00
# include "IMB_imbuf.h" /* for IMB_init */
2003-09-09 21:26:34 +00:00
2010-10-31 04:11:39 +00:00
# ifdef WITH_PYTHON
2003-11-23 14:28:46 +00:00
# include "BPY_extern.h"
2008-10-28 18:47:13 +00:00
# endif
2003-11-23 14:28:46 +00:00
2011-10-22 16:24:28 +00:00
# include "RE_engine.h"
Giant commit!
A full detailed description of this will be done later... is several days
of work. Here's a summary:
Render:
- Full cleanup of render code, removing *all* globals and bad level calls
all over blender. Render module is now not called abusive anymore
- API-fied calls to rendering
- Full recode of internal render pipeline. Is now rendering tiles by
default, prepared for much smarter 'bucket' render later.
- Each thread now can render a full part
- Renders were tested with 4 threads, goes fine, apart from some lookup
tables in softshadow and AO still
- Rendering is prepared to do multiple layers and passes
- No single 32 bits trick in render code anymore, all 100% floats now.
Writing images/movies
- moved writing images to blender kernel (bye bye 'schrijfplaatje'!)
- made a new Movie handle system, also in kernel. This will enable much
easier use of movies in Blender
PreviewRender:
- Using new render API, previewrender (in buttons) now uses regular render
code to generate images.
- new datafile 'preview.blend.c' has the preview scenes in it
- previews get rendered in exact displayed size (1 pixel = 1 pixel)
3D Preview render
- new; press Pkey in 3d window, for a panel that continuously renders
(pkey is for games, i know... but we dont do that in orange now!)
- this render works nearly identical to buttons-preview render, so it stops
rendering on any event (mouse, keyboard, etc)
- on moving/scaling the panel, the render code doesn't recreate all geometry
- same for shifting/panning view
- all other operations (now) regenerate the full render database still.
- this is WIP... but big fun, especially for simple scenes!
Compositor
- Using same node system as now in use for shaders, you can composit images
- works pretty straightforward... needs much more options/tools and integration
with rendering still
- is not threaded yet, nor is so smart to only recalculate changes... will be
done soon!
- the "Render Result" node will get all layers/passes as output sockets
- The "Output" node renders to a builtin image, which you can view in the Image
window. (yes, output nodes to render-result, and to files, is on the list!)
The Bad News
- "Unified Render" is removed. It might come back in some stage, but this
system should be built from scratch. I can't really understand this code...
I expect it is not much needed, especially with advanced layer/passes
control
- Panorama render, Field render, Motion blur, is not coded yet... (I had to
recode every single feature in render, so...!)
- Lens Flare is also not back... needs total revision, might become composit
effect though (using zbuffer for visibility)
- Part render is gone! (well, thats obvious, its default now).
- The render window is only restored with limited functionality... I am going
to check first the option to render to a Image window, so Blender can become
a true single-window application. :)
For example, the 'Spare render buffer' (jkey) doesnt work.
- Render with border, now default creates a smaller image
- No zbuffers are written yet... on the todo!
- Scons files and MSVC will need work to get compiling again
OK... thats what I can quickly recall. Now go compiling!
2006-01-23 22:05:47 +00:00
# include "RE_pipeline.h"
2009-09-18 22:25:49 +00:00
# include "ED_datafiles.h"
Merge of first part of changes from the apricot branch, especially
the features that are needed to run the game. Compile tested with
scons, make, but not cmake, that seems to have an issue not related
to these changes. The changes include:
* GLSL support in the viewport and game engine, enable in the game
menu in textured draw mode.
* Synced and merged part of the duplicated blender and gameengine/
gameplayer drawing code.
* Further refactoring of game engine drawing code, especially mesh
storage changed a lot.
* Optimizations in game engine armatures to avoid recomputations.
* A python function to get the framerate estimate in game.
* An option take object color into account in materials.
* An option to restrict shadow casters to a lamp's layers.
* Increase from 10 to 18 texture slots for materials, lamps, word.
An extra texture slot shows up once the last slot is used.
* Memory limit for undo, not enabled by default yet because it
needs the .B.blend to be changed.
* Multiple undo for image painting.
* An offset for dupligroups, so not all objects in a group have to
be at the origin.
2008-09-04 20:51:28 +00:00
2009-09-18 22:25:49 +00:00
# include "WM_api.h"
2009-08-25 01:12:23 +00:00
2009-09-18 22:25:49 +00:00
# include "RNA_define.h"
# include "GPU_draw.h"
# include "GPU_extensions.h"
2002-10-12 11:37:38 +00:00
2012-12-20 07:57:26 +00:00
# ifdef WITH_FREESTYLE
# include "FRS_freestyle.h"
# endif
2009-10-15 01:06:34 +00:00
2011-02-24 17:57:35 +00:00
# ifdef WITH_BUILDINFO_HEADER
2012-05-21 09:00:35 +00:00
# define BUILD_DATE
2011-02-24 17:57:35 +00:00
# endif
2002-10-12 11:37:38 +00:00
/* for passing information between creator and gameengine */
2010-10-31 03:20:33 +00:00
# ifdef WITH_GAMEENGINE
2012-05-21 09:00:35 +00:00
# include "BL_System.h"
2010-10-31 00:56:46 +00:00
# else /* dummy */
2012-05-21 09:00:35 +00:00
# define SYS_SystemHandle int
2010-10-31 00:56:46 +00:00
# endif
2002-10-12 11:37:38 +00:00
# include <signal.h>
2003-07-19 20:14:07 +00:00
2002-10-12 11:37:38 +00:00
# ifdef __FreeBSD__
2012-05-21 09:00:35 +00:00
# include <sys / types.h>
# include <floatingpoint.h>
# include <sys / rtprio.h>
2002-10-12 11:37:38 +00:00
# endif
2008-01-18 21:39:47 +00:00
# ifdef WITH_BINRELOC
2012-05-21 09:00:35 +00:00
# include "binreloc.h"
2008-01-18 15:10:17 +00:00
# endif
2011-11-07 12:55:18 +00:00
# ifdef WITH_LIBMV
2012-05-21 09:00:35 +00:00
# include "libmv-capi.h"
2011-11-07 12:55:18 +00:00
# endif
2012-03-28 05:09:50 +00:00
/* from buildinfo.c */
2006-04-17 19:20:02 +00:00
# ifdef BUILD_DATE
2010-03-14 17:18:36 +00:00
extern char build_date [ ] ;
extern char build_time [ ] ;
2013-11-04 13:21:39 +00:00
extern char build_hash [ ] ;
2013-11-15 11:11:59 +00:00
extern unsigned long build_commit_timestamp ;
/* TODO(sergey): ideally size need to be in sync with buildinfo.c */
extern char build_commit_date [ 16 ] ;
extern char build_commit_time [ 16 ] ;
2013-11-04 13:21:39 +00:00
extern char build_branch [ ] ;
2010-03-14 17:18:36 +00:00
extern char build_platform [ ] ;
extern char build_type [ ] ;
2010-10-18 12:56:14 +00:00
extern char build_cflags [ ] ;
extern char build_cxxflags [ ] ;
extern char build_linkflags [ ] ;
2010-10-19 05:00:36 +00:00
extern char build_system [ ] ;
2006-04-17 19:20:02 +00:00
# endif
2002-10-12 11:37:38 +00:00
/* Local Function prototypes */
2013-02-06 13:07:45 +00:00
# ifdef WITH_PYTHON_MODULE
int main_python_enter ( int argc , const char * * argv ) ;
void main_python_exit ( void ) ;
# else
2011-02-19 12:05:20 +00:00
static int print_help ( int argc , const char * * argv , void * data ) ;
static int print_version ( int argc , const char * * argv , void * data ) ;
2012-06-15 21:19:05 +00:00
# endif
2002-10-12 11:37:38 +00:00
/* for the callbacks: */
2013-08-26 19:32:03 +00:00
# ifndef WITH_PYTHON_MODULE
2013-01-17 09:11:51 +00:00
# define BLEND_VERSION_FMT "Blender %d.%02d (sub %d)"
# define BLEND_VERSION_ARG BLENDER_VERSION / 100, BLENDER_VERSION % 100, BLENDER_SUBVERSION
/* pass directly to printf */
# define BLEND_VERSION_STRING_FMT BLEND_VERSION_FMT "\n", BLEND_VERSION_ARG
2013-08-26 19:32:03 +00:00
# endif
2010-09-03 09:21:40 +00:00
2011-05-16 04:55:31 +00:00
/* Initialize callbacks for the modules that need them */
2008-09-29 17:08:11 +00:00
static void setCallbacks ( void ) ;
2002-10-12 11:37:38 +00:00
2012-06-15 21:19:05 +00:00
# ifndef WITH_PYTHON_MODULE
2013-02-06 13:07:45 +00:00
static bool use_crash_handler = true ;
2010-05-26 23:03:25 +00:00
/* set breakpoints here when running in debug mode, useful to catch floating point errors */
2011-09-21 08:40:30 +00:00
# if defined(__linux__) || defined(_WIN32) || defined(OSX_SSE_FPE)
2010-10-17 06:38:56 +00:00
static void fpe_handler ( int UNUSED ( sig ) )
2002-10-12 11:37:38 +00:00
{
// printf("SIGFPE trapped\n");
}
2004-11-28 12:14:27 +00:00
# endif
2002-10-12 11:37:38 +00:00
2003-07-19 20:14:07 +00:00
/* handling ctrl-c event in console */
2013-04-08 05:01:35 +00:00
# if !(defined(WITH_PYTHON_MODULE) || defined(WITH_HEADLESS))
2003-07-19 20:14:07 +00:00
static void blender_esc ( int sig )
{
static int count = 0 ;
2012-08-08 18:37:06 +00:00
G . is_break = TRUE ; /* forces render loop to read queue, not sure if its needed */
2003-07-19 20:14:07 +00:00
if ( sig = = 2 ) {
if ( count ) {
printf ( " \n Blender killed \n " ) ;
exit ( 2 ) ;
}
printf ( " \n Sent an internal break event. Press ^C again to kill Blender \n " ) ;
count + + ;
}
}
2013-04-08 05:01:35 +00:00
# endif
2003-07-19 20:14:07 +00:00
2011-02-19 12:05:20 +00:00
static int print_version ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2003-12-24 16:44:24 +00:00
{
2012-03-28 05:09:50 +00:00
printf ( BLEND_VERSION_STRING_FMT ) ;
2006-04-17 19:20:02 +00:00
# ifdef BUILD_DATE
2012-03-28 05:09:50 +00:00
printf ( " \t build date: %s \n " , build_date ) ;
printf ( " \t build time: %s \n " , build_time ) ;
2013-11-15 11:11:59 +00:00
printf ( " \t build commit date: %s \n " , build_commit_date ) ;
printf ( " \t build commit time: %s \n " , build_commit_time ) ;
printf ( " \t build hash: %s \n " , build_hash ) ;
2012-03-28 05:09:50 +00:00
printf ( " \t build platform: %s \n " , build_platform ) ;
printf ( " \t build type: %s \n " , build_type ) ;
printf ( " \t build c flags: %s \n " , build_cflags ) ;
printf ( " \t build c++ flags: %s \n " , build_cxxflags ) ;
printf ( " \t build link flags: %s \n " , build_linkflags ) ;
printf ( " \t build system: %s \n " , build_system ) ;
2006-04-17 19:20:02 +00:00
# endif
2010-02-01 01:43:31 +00:00
exit ( 0 ) ;
return 0 ;
2003-12-24 16:44:24 +00:00
}
2003-07-19 20:14:07 +00:00
2011-02-19 12:05:20 +00:00
static int print_help ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * data )
2002-10-12 11:37:38 +00:00
{
2012-03-28 05:09:50 +00:00
bArgs * ba = ( bArgs * ) data ;
2010-05-24 18:53:45 +00:00
2012-03-28 05:09:50 +00:00
printf ( BLEND_VERSION_STRING_FMT ) ;
printf ( " Usage: blender [args ...] [file] [args ...] \n \n " ) ;
2010-05-23 20:39:21 +00:00
2012-03-28 05:09:50 +00:00
printf ( " Render Options: \n " ) ;
2010-06-03 20:06:29 +00:00
BLI_argsPrintArgDoc ( ba , " --background " ) ;
2010-05-24 18:53:45 +00:00
BLI_argsPrintArgDoc ( ba , " --render-anim " ) ;
BLI_argsPrintArgDoc ( ba , " --scene " ) ;
BLI_argsPrintArgDoc ( ba , " --render-frame " ) ;
BLI_argsPrintArgDoc ( ba , " --frame-start " ) ;
BLI_argsPrintArgDoc ( ba , " --frame-end " ) ;
BLI_argsPrintArgDoc ( ba , " --frame-jump " ) ;
BLI_argsPrintArgDoc ( ba , " --render-output " ) ;
BLI_argsPrintArgDoc ( ba , " --engine " ) ;
2013-06-29 10:09:15 +00:00
BLI_argsPrintArgDoc ( ba , " --threads " ) ;
2010-05-23 20:39:21 +00:00
2010-05-24 18:53:45 +00:00
printf ( " \n " ) ;
2012-03-28 05:09:50 +00:00
printf ( " Format Options: \n " ) ;
2010-05-24 18:53:45 +00:00
BLI_argsPrintArgDoc ( ba , " --render-format " ) ;
BLI_argsPrintArgDoc ( ba , " --use-extension " ) ;
2010-05-23 20:39:21 +00:00
2010-05-24 18:53:45 +00:00
printf ( " \n " ) ;
2012-03-28 05:09:50 +00:00
printf ( " Animation Playback Options: \n " ) ;
2010-05-24 18:53:45 +00:00
BLI_argsPrintArgDoc ( ba , " -a " ) ;
2002-10-12 11:37:38 +00:00
2010-05-24 18:53:45 +00:00
printf ( " \n " ) ;
2012-03-28 05:09:50 +00:00
printf ( " Window Options: \n " ) ;
2010-05-24 18:53:45 +00:00
BLI_argsPrintArgDoc ( ba , " --window-border " ) ;
BLI_argsPrintArgDoc ( ba , " --window-borderless " ) ;
BLI_argsPrintArgDoc ( ba , " --window-geometry " ) ;
2011-04-08 12:49:38 +00:00
BLI_argsPrintArgDoc ( ba , " --start-console " ) ;
2013-06-29 10:09:15 +00:00
BLI_argsPrintArgDoc ( ba , " --no-native-pixels " ) ;
2010-05-23 20:39:21 +00:00
2010-05-24 18:53:45 +00:00
printf ( " \n " ) ;
2012-03-28 05:09:50 +00:00
printf ( " Game Engine Specific Options: \n " ) ;
2010-05-24 18:53:45 +00:00
BLI_argsPrintArgDoc ( ba , " -g " ) ;
2010-05-23 20:39:21 +00:00
2010-05-24 18:53:45 +00:00
printf ( " \n " ) ;
2013-06-29 10:09:15 +00:00
printf ( " Python Options: \n " ) ;
BLI_argsPrintArgDoc ( ba , " --enable-autoexec " ) ;
BLI_argsPrintArgDoc ( ba , " --disable-autoexec " ) ;
printf ( " \n " ) ;
BLI_argsPrintArgDoc ( ba , " --python " ) ;
BLI_argsPrintArgDoc ( ba , " --python-text " ) ;
BLI_argsPrintArgDoc ( ba , " --python-console " ) ;
BLI_argsPrintArgDoc ( ba , " --addons " ) ;
printf ( " \n " ) ;
printf ( " Debug Options: \n " ) ;
2010-05-24 18:53:45 +00:00
BLI_argsPrintArgDoc ( ba , " --debug " ) ;
2013-06-29 10:09:15 +00:00
BLI_argsPrintArgDoc ( ba , " --debug-value " ) ;
2012-03-30 10:37:49 +00:00
2013-06-29 10:09:15 +00:00
printf ( " \n " ) ;
BLI_argsPrintArgDoc ( ba , " --debug-events " ) ;
2012-03-30 10:37:49 +00:00
# ifdef WITH_FFMPEG
BLI_argsPrintArgDoc ( ba , " --debug-ffmpeg " ) ;
# endif
2013-06-29 10:09:15 +00:00
BLI_argsPrintArgDoc ( ba , " --debug-handlers " ) ;
2012-03-30 10:37:49 +00:00
# ifdef WITH_LIBMV
BLI_argsPrintArgDoc ( ba , " --debug-libmv " ) ;
# endif
2013-10-10 11:58:01 +00:00
BLI_argsPrintArgDoc ( ba , " --debug-memory " ) ;
2013-06-29 10:09:15 +00:00
BLI_argsPrintArgDoc ( ba , " --debug-jobs " ) ;
BLI_argsPrintArgDoc ( ba , " --debug-python " ) ;
BLI_argsPrintArgDoc ( ba , " --debug-wm " ) ;
BLI_argsPrintArgDoc ( ba , " --debug-all " ) ;
printf ( " \n " ) ;
BLI_argsPrintArgDoc ( ba , " --debug-fpe " ) ;
BLI_argsPrintArgDoc ( ba , " --disable-crash-handler " ) ;
2012-03-30 10:37:49 +00:00
2010-05-24 18:53:45 +00:00
printf ( " \n " ) ;
2013-06-29 10:09:15 +00:00
printf ( " Misc Options: \n " ) ;
2011-01-19 09:13:24 +00:00
BLI_argsPrintArgDoc ( ba , " --factory-startup " ) ;
2010-05-24 18:53:45 +00:00
printf ( " \n " ) ;
2011-01-19 21:30:23 +00:00
BLI_argsPrintArgDoc ( ba , " --env-system-config " ) ;
BLI_argsPrintArgDoc ( ba , " --env-system-datafiles " ) ;
BLI_argsPrintArgDoc ( ba , " --env-system-scripts " ) ;
BLI_argsPrintArgDoc ( ba , " --env-system-python " ) ;
printf ( " \n " ) ;
2010-05-24 18:53:45 +00:00
BLI_argsPrintArgDoc ( ba , " -nojoystick " ) ;
BLI_argsPrintArgDoc ( ba , " -noglsl " ) ;
BLI_argsPrintArgDoc ( ba , " -noaudio " ) ;
BLI_argsPrintArgDoc ( ba , " -setaudio " ) ;
2010-05-23 20:39:21 +00:00
2010-05-24 18:53:45 +00:00
printf ( " \n " ) ;
2010-05-23 20:39:21 +00:00
2010-05-24 18:53:45 +00:00
BLI_argsPrintArgDoc ( ba , " --help " ) ;
2010-05-23 20:39:21 +00:00
2002-10-12 11:37:38 +00:00
# ifdef WIN32
2010-05-24 18:53:45 +00:00
BLI_argsPrintArgDoc ( ba , " -R " ) ;
2011-03-29 13:00:03 +00:00
BLI_argsPrintArgDoc ( ba , " -r " ) ;
2002-10-12 11:37:38 +00:00
# endif
2010-05-24 18:53:45 +00:00
BLI_argsPrintArgDoc ( ba , " --version " ) ;
BLI_argsPrintArgDoc ( ba , " -- " ) ;
2010-05-23 20:39:21 +00:00
2012-03-28 05:09:50 +00:00
printf ( " Other Options: \n " ) ;
2010-05-24 18:53:45 +00:00
BLI_argsPrintOtherDoc ( ba ) ;
2010-05-23 20:39:21 +00:00
2012-03-28 05:09:50 +00:00
printf ( " Argument Parsing: \n " ) ;
printf ( " \t arguments must be separated by white space. eg \n " ) ;
printf ( " \t \t \" blender -ba test.blend \" \n " ) ;
printf ( " \t ...will ignore the 'a' \n " ) ;
printf ( " \t \t \" blender -b test.blend -f8 \" \n " ) ;
printf ( " \t ...will ignore 8 because there is no space between the -f and the frame value \n \n " ) ;
printf ( " Argument Order: \n " ) ;
2013-05-25 02:21:50 +00:00
printf ( " \t arguments are executed in the order they are given. eg \n " ) ;
2012-03-28 05:09:50 +00:00
printf ( " \t \t \" blender --background test.blend --render-frame 1 --render-output /tmp \" \n " ) ;
printf ( " \t ...will not render to /tmp because '--render-frame 1' renders before the output path is set \n " ) ;
printf ( " \t \t \" blender --background --render-output /tmp test.blend --render-frame 1 \" \n " ) ;
printf ( " \t ...will not render to /tmp because loading the blend file overwrites the render output that was set \n " ) ;
printf ( " \t \t \" blender --background test.blend --render-output /tmp --render-frame 1 \" works as expected. \n \n " ) ;
printf ( " \n Environment Variables: \n " ) ;
printf ( " $BLENDER_USER_CONFIG Directory for user configuration files. \n " ) ;
printf ( " $BLENDER_USER_SCRIPTS Directory for user scripts. \n " ) ;
printf ( " $BLENDER_SYSTEM_SCRIPTS Directory for system wide scripts. \n " ) ;
2013-05-25 02:21:50 +00:00
printf ( " Directory for user data files (icons, translations, ..). \n " ) ;
2012-03-28 05:09:50 +00:00
printf ( " $BLENDER_SYSTEM_DATAFILES Directory for system wide data files. \n " ) ;
printf ( " $BLENDER_SYSTEM_PYTHON Directory for system python libraries. \n " ) ;
2008-04-12 22:17:23 +00:00
# ifdef WIN32
2012-03-28 05:09:50 +00:00
printf ( " $TEMP Store temporary files here. \n " ) ;
2008-04-12 22:17:23 +00:00
# else
2012-03-28 05:09:50 +00:00
printf ( " $TMP or $TMPDIR Store temporary files here. \n " ) ;
2008-10-19 06:12:11 +00:00
# endif
2011-10-20 00:19:21 +00:00
# ifdef WITH_SDL
2012-03-28 05:09:50 +00:00
printf ( " $SDL_AUDIODRIVER LibSDL audio driver - alsa, esd, dma. \n " ) ;
2008-04-12 22:17:23 +00:00
# endif
2012-03-28 05:09:50 +00:00
printf ( " $PYTHONHOME Path to the python directory, eg. /usr/lib/python. \n \n " ) ;
2010-05-23 20:39:21 +00:00
2010-02-01 01:43:31 +00:00
exit ( 0 ) ;
return 0 ;
2002-10-12 11:37:38 +00:00
}
2003-04-28 02:15:46 +00:00
2011-02-19 12:05:20 +00:00
static int end_arguments ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
return - 1 ;
}
2011-02-19 12:05:20 +00:00
static int enable_python ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
2010-04-28 08:02:51 +00:00
G . f | = G_SCRIPT_AUTOEXEC ;
2011-03-15 08:04:11 +00:00
G . f | = G_SCRIPT_OVERRIDE_PREF ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
2011-03-15 08:04:11 +00:00
static int disable_python ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
2010-04-28 08:02:51 +00:00
G . f & = ~ G_SCRIPT_AUTOEXEC ;
2011-03-15 08:04:11 +00:00
G . f | = G_SCRIPT_OVERRIDE_PREF ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
2013-01-10 16:37:48 +00:00
static int disable_crash_handler ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
{
use_crash_handler = false ;
return 0 ;
}
2011-02-19 12:05:20 +00:00
static int background_mode ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
G . background = 1 ;
return 0 ;
}
2011-02-19 12:05:20 +00:00
static int debug_mode ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * data )
2010-02-01 01:43:31 +00:00
{
2012-03-31 00:59:17 +00:00
G . debug | = G_DEBUG ; /* std output printf's */
2010-09-03 09:21:40 +00:00
printf ( BLEND_VERSION_STRING_FMT ) ;
2010-02-01 01:43:31 +00:00
MEM_set_memory_debug ( ) ;
2013-10-03 14:44:33 +00:00
# ifdef DEBUG
BLI_mempool_set_memory_debug ( ) ;
# endif
2010-02-01 01:43:31 +00:00
2011-08-22 16:54:26 +00:00
# ifdef WITH_BUILDINFO
2010-02-01 01:43:31 +00:00
printf ( " Build: %s %s %s %s \n " , build_date , build_time , build_platform , build_type ) ;
2013-10-03 14:44:33 +00:00
# endif
2010-02-01 01:43:31 +00:00
2012-03-30 10:37:49 +00:00
BLI_argsPrint ( data ) ;
return 0 ;
}
2012-03-31 00:59:17 +00:00
static int debug_mode_generic ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * data )
2012-03-30 10:37:49 +00:00
{
2012-03-31 00:59:17 +00:00
G . debug | = GET_INT_FROM_POINTER ( data ) ;
2012-03-30 10:37:49 +00:00
return 0 ;
}
2011-11-07 12:55:18 +00:00
# ifdef WITH_LIBMV
2012-03-31 00:59:17 +00:00
static int debug_mode_libmv ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2012-03-30 10:37:49 +00:00
{
2011-11-07 12:55:18 +00:00
libmv_startDebugLogging ( ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
2012-03-30 10:37:49 +00:00
# endif
2010-02-01 01:43:31 +00:00
2013-10-10 11:58:01 +00:00
static int debug_mode_memory ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
{
MEM_set_memory_debug ( ) ;
return 0 ;
}
2012-06-20 13:40:43 +00:00
static int set_debug_value ( int argc , const char * * argv , void * UNUSED ( data ) )
{
if ( argc > 1 ) {
2012-08-08 18:21:54 +00:00
G . debug_value = atoi ( argv [ 1 ] ) ;
2012-06-20 13:40:43 +00:00
return 1 ;
}
else {
printf ( " \n Error: you must specify debug value to set. \n " ) ;
return 0 ;
}
}
2011-02-19 12:05:20 +00:00
static int set_fpe ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2010-02-03 17:48:39 +00:00
{
2011-09-21 08:40:30 +00:00
# if defined(__linux__) || defined(_WIN32) || defined(OSX_SSE_FPE)
2010-02-03 17:48:39 +00:00
/* zealous but makes float issues a heck of a lot easier to find!
* set breakpoints on fpe_handler */
signal ( SIGFPE , fpe_handler ) ;
2010-05-26 23:03:25 +00:00
# if defined(__linux__) && defined(__GNUC__)
2012-03-28 05:09:50 +00:00
feenableexcept ( FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW ) ;
# endif /* defined(__linux__) && defined(__GNUC__) */
2011-02-25 10:01:33 +00:00
# if defined(OSX_SSE_FPE)
2010-05-24 20:39:01 +00:00
/* OSX uses SSE for floating point by default, so here
* use SSE instructions to throw floating point exceptions */
2012-03-28 05:09:50 +00:00
_MM_SET_EXCEPTION_MASK ( _MM_MASK_MASK & ~
( _MM_MASK_OVERFLOW | _MM_MASK_INVALID | _MM_MASK_DIV_ZERO ) ) ;
# endif /* OSX_SSE_FPE */
2010-05-26 23:03:25 +00:00
# if defined(_WIN32) && defined(_MSC_VER)
_controlfp_s ( NULL , 0 , _MCW_EM ) ; /* enables all fp exceptions */
_controlfp_s ( NULL , _EM_DENORMAL | _EM_UNDERFLOW | _EM_INEXACT , _MCW_EM ) ; /* hide the ones we don't care about */
# endif /* _WIN32 && _MSC_VER */
2010-02-03 17:48:39 +00:00
# endif
2010-05-24 20:39:01 +00:00
2010-02-03 17:48:39 +00:00
return 0 ;
}
2013-01-18 21:05:37 +00:00
# if defined(__linux__) || defined(__APPLE__)
/* Unix */
2013-01-11 01:30:44 +00:00
static void blender_crash_handler_backtrace ( FILE * fp )
{
# define SIZE 100
void * buffer [ SIZE ] ;
int nptrs ;
char * * strings ;
int i ;
fputs ( " \n # backtrace \n " , fp ) ;
/* include a backtrace for good measure */
nptrs = backtrace ( buffer , SIZE ) ;
strings = backtrace_symbols ( buffer , nptrs ) ;
for ( i = 0 ; i < nptrs ; i + + ) {
fputs ( strings [ i ] , fp ) ;
fputc ( ' \n ' , fp ) ;
}
free ( strings ) ;
# undef SIZE
2013-01-18 21:05:37 +00:00
}
2013-07-21 17:16:04 +00:00
# elif defined(_MSC_VER)
2013-01-18 21:05:37 +00:00
static void blender_crash_handler_backtrace ( FILE * fp )
{
2013-01-11 01:30:44 +00:00
( void ) fp ;
2013-01-18 21:05:37 +00:00
2013-01-13 15:01:34 +00:00
#if 0
2013-01-18 21:05:37 +00:00
# define MAXSYMBOL 256
2013-01-13 15:01:34 +00:00
unsigned short i ;
void * stack [ SIZE ] ;
unsigned short nframes ;
SYMBOL_INFO * symbolinfo ;
HANDLE process ;
process = GetCurrentProcess ( ) ;
SymInitialize ( process , NULL , TRUE ) ;
nframes = CaptureStackBackTrace ( 0 , SIZE , stack , NULL ) ;
symbolinfo = MEM_callocN ( sizeof ( SYMBOL_INFO ) + MAXSYMBOL * sizeof ( char ) , " crash Symbol table " ) ;
symbolinfo - > MaxNameLen = MAXSYMBOL - 1 ;
symbolinfo - > SizeOfStruct = sizeof ( SYMBOL_INFO ) ;
2013-02-11 00:49:00 +00:00
for ( i = 0 ; i < nframes ; i + + ) {
2013-01-13 15:01:34 +00:00
SymFromAddr ( process , ( DWORD64 ) ( stack [ i ] ) , 0 , symbolinfo ) ;
fprintf ( fp , " %u: %s - 0x%0X \n " , nframes - i - 1 , symbolinfo - > Name , symbolinfo - > Address ) ;
}
MEM_freeN ( symbolinfo ) ;
2013-01-11 01:30:44 +00:00
# endif
}
2013-01-13 15:01:34 +00:00
2013-01-18 21:05:37 +00:00
# else /* non msvc/osx/linux */
static void blender_crash_handler_backtrace ( FILE * fp )
{
( void ) fp ;
}
# endif
2013-01-10 16:37:48 +00:00
static void blender_crash_handler ( int signum )
{
#if 0
{
char fname [ FILE_MAX ] ;
if ( ! G . main - > name [ 0 ] ) {
BLI_make_file_string ( " / " , fname , BLI_temporary_dir ( ) , " crash.blend " ) ;
}
else {
BLI_strncpy ( fname , G . main - > name , sizeof ( fname ) ) ;
BLI_replace_extension ( fname , sizeof ( fname ) , " .crash.blend " ) ;
}
printf ( " Writing: %s \n " , fname ) ;
fflush ( stdout ) ;
BKE_undo_save_file ( fname ) ;
}
# endif
2013-01-11 01:30:44 +00:00
FILE * fp ;
char header [ 512 ] ;
wmWindowManager * wm = G . main - > wm . first ;
2013-01-10 16:37:48 +00:00
2013-01-11 01:30:44 +00:00
char fname [ FILE_MAX ] ;
2013-01-10 16:37:48 +00:00
2013-01-11 01:30:44 +00:00
if ( ! G . main - > name [ 0 ] ) {
2013-01-31 11:17:08 +00:00
BLI_join_dirfile ( fname , sizeof ( fname ) , BLI_temporary_dir ( ) , " blender.crash.txt " ) ;
2013-01-11 01:30:44 +00:00
}
else {
2013-01-31 11:17:08 +00:00
BLI_join_dirfile ( fname , sizeof ( fname ) , BLI_temporary_dir ( ) , BLI_path_basename ( G . main - > name ) ) ;
2013-01-11 01:30:44 +00:00
BLI_replace_extension ( fname , sizeof ( fname ) , " .crash.txt " ) ;
}
2013-01-10 16:37:48 +00:00
2013-01-11 01:30:44 +00:00
printf ( " Writing: %s \n " , fname ) ;
fflush ( stdout ) ;
2013-01-10 16:37:48 +00:00
2013-11-04 13:21:39 +00:00
# ifndef BUILD_DATE
BLI_snprintf ( header , sizeof ( header ) , " # " BLEND_VERSION_FMT " , Unknown revision \n " , BLEND_VERSION_ARG ) ;
2013-01-17 09:11:51 +00:00
# else
2013-11-15 11:11:59 +00:00
BLI_snprintf ( header , sizeof ( header ) , " # " BLEND_VERSION_FMT " , Commit date: %s %s, Hash %s \n " ,
BLEND_VERSION_ARG , build_commit_date , build_commit_time , build_hash ) ;
2013-01-17 09:11:51 +00:00
# endif
2013-01-10 16:37:48 +00:00
2013-01-11 01:30:44 +00:00
/* open the crash log */
errno = 0 ;
fp = BLI_fopen ( fname , " wb " ) ;
if ( fp = = NULL ) {
fprintf ( stderr , " Unable to save '%s': %s \n " ,
2013-01-12 14:28:23 +00:00
fname , errno ? strerror ( errno ) : " Unknown error opening file " ) ;
2013-01-10 16:37:48 +00:00
}
2013-01-11 01:30:44 +00:00
else {
2013-01-11 03:21:24 +00:00
if ( wm ) {
BKE_report_write_file_fp ( fp , & wm - > reports , header ) ;
}
2013-01-11 01:30:44 +00:00
blender_crash_handler_backtrace ( fp ) ;
fclose ( fp ) ;
}
2013-01-10 16:37:48 +00:00
/* really crash */
signal ( signum , SIG_DFL ) ;
2013-01-11 03:26:49 +00:00
# ifndef WIN32
2013-01-10 16:37:48 +00:00
kill ( getpid ( ) , signum ) ;
2013-01-11 03:26:49 +00:00
# else
2013-01-13 15:01:34 +00:00
TerminateProcess ( GetCurrentProcess ( ) , signum ) ;
2013-01-11 03:26:49 +00:00
# endif
2013-01-10 16:37:48 +00:00
}
2011-02-19 12:05:20 +00:00
static int set_factory_startup ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2011-01-19 09:13:24 +00:00
{
2012-03-28 05:09:50 +00:00
G . factory_startup = 1 ;
2011-01-19 09:13:24 +00:00
return 0 ;
}
2011-02-19 12:05:20 +00:00
static int set_env ( int argc , const char * * argv , void * UNUSED ( data ) )
2011-01-19 21:30:23 +00:00
{
/* "--env-system-scripts" --> "BLENDER_SYSTEM_SCRIPTS" */
2012-03-28 05:09:50 +00:00
char env [ 64 ] = " BLENDER " ;
char * ch_dst = env + 7 ; /* skip BLENDER */
const char * ch_src = argv [ 0 ] + 5 ; /* skip --env */
2011-01-19 21:30:23 +00:00
if ( argc < 2 ) {
printf ( " %s requires one argument \n " , argv [ 0 ] ) ;
exit ( 1 ) ;
}
2012-03-24 07:52:14 +00:00
for ( ; * ch_src ; ch_src + + , ch_dst + + ) {
2012-03-28 05:09:50 +00:00
* ch_dst = ( * ch_src = = ' - ' ) ? ' _ ' : ( * ch_src ) - 32 ; /* toupper() */
2011-01-19 21:30:23 +00:00
}
2012-03-28 05:09:50 +00:00
* ch_dst = ' \0 ' ;
2011-01-19 21:30:23 +00:00
BLI_setenv ( env , argv [ 1 ] ) ;
return 1 ;
}
2012-08-06 16:07:11 +00:00
static int playback_mode ( int argc , const char * * argv , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
/* not if -b was given first */
if ( G . background = = 0 ) {
2013-05-21 12:18:35 +00:00
# ifdef WITH_FFMPEG
/* Setup FFmpeg with current debug flags. */
IMB_ffmpeg_init ( ) ;
# endif
2012-09-15 01:52:28 +00:00
WM_main_playanim ( argc , argv ) ; /* not the same argc and argv as before */
2012-08-06 16:07:11 +00:00
exit ( 0 ) ; /* 2.4x didn't do this */
2010-02-01 01:43:31 +00:00
}
return - 2 ;
}
2011-02-19 12:05:20 +00:00
static int prefsize ( int argc , const char * * argv , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
int stax , stay , sizx , sizy ;
if ( argc < 5 ) {
2012-03-28 05:09:50 +00:00
fprintf ( stderr , " -p requires four arguments \n " ) ;
2010-02-01 01:43:31 +00:00
exit ( 1 ) ;
}
2012-03-28 05:09:50 +00:00
stax = atoi ( argv [ 1 ] ) ;
stay = atoi ( argv [ 2 ] ) ;
sizx = atoi ( argv [ 3 ] ) ;
sizy = atoi ( argv [ 4 ] ) ;
2010-02-01 01:43:31 +00:00
2012-08-11 21:35:24 +00:00
WM_init_state_size_set ( stax , stay , sizx , sizy ) ;
2010-02-01 01:43:31 +00:00
return 4 ;
}
Holiday coding log :)
Nice formatted version (pictures soon):
http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.66/Usability
Short list of main changes:
- Transparent region option (over main region), added code to blend in/out such panels.
- Min size window now 640 x 480
- Fixed DPI for ui - lots of cleanup and changes everywhere. Icon image need correct size still, layer-in-use icon needs remake.
- Macbook retina support, use command line --no-native-pixels to disable it
- Timeline Marker label was drawing wrong
- Trackpad and magic mouse: supports zoom (hold ctrl)
- Fix for splash position: removed ghost function and made window size update after creation immediate
- Fast undo buffer save now adds UI as well. Could be checked for regular file save even...
Quit.blend and temp file saving use this now.
- Dixed filename in window on reading quit.blend or temp saves, and they now add a warning in window title: "(Recovered)"
- New Userpref option "Keep Session" - this always saves quit.blend, and loads on start.
This allows keeping UI and data without actual saves, until you actually save.
When you load startup.blend and quit, it recognises the quit.blend as a startup (no file name in header)
- Added 3D view copy/paste buffers (selected objects). Shortcuts ctrl-c, ctrl-v (OSX, cmd-c, cmd-v).
Coded partial file saving for it. Could be used for other purposes. Todo: use OS clipboards.
- User preferences (themes, keymaps, user settings) now can be saved as a separate file.
Old option is called "Save Startup File" the new one "Save User Settings".
To visualise this difference, the 'save startup file' button has been removed from user preferences window. That option is available as CTRL+U and in File menu still.
- OSX: fixed bug that stopped giving mouse events outside window.
This also fixes "Continuous Grab" for OSX. (error since 2009)
2012-12-12 18:58:11 +00:00
static int native_pixels ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
{
2013-04-04 02:05:11 +00:00
WM_init_native_pixels ( false ) ;
Holiday coding log :)
Nice formatted version (pictures soon):
http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.66/Usability
Short list of main changes:
- Transparent region option (over main region), added code to blend in/out such panels.
- Min size window now 640 x 480
- Fixed DPI for ui - lots of cleanup and changes everywhere. Icon image need correct size still, layer-in-use icon needs remake.
- Macbook retina support, use command line --no-native-pixels to disable it
- Timeline Marker label was drawing wrong
- Trackpad and magic mouse: supports zoom (hold ctrl)
- Fix for splash position: removed ghost function and made window size update after creation immediate
- Fast undo buffer save now adds UI as well. Could be checked for regular file save even...
Quit.blend and temp file saving use this now.
- Dixed filename in window on reading quit.blend or temp saves, and they now add a warning in window title: "(Recovered)"
- New Userpref option "Keep Session" - this always saves quit.blend, and loads on start.
This allows keeping UI and data without actual saves, until you actually save.
When you load startup.blend and quit, it recognises the quit.blend as a startup (no file name in header)
- Added 3D view copy/paste buffers (selected objects). Shortcuts ctrl-c, ctrl-v (OSX, cmd-c, cmd-v).
Coded partial file saving for it. Could be used for other purposes. Todo: use OS clipboards.
- User preferences (themes, keymaps, user settings) now can be saved as a separate file.
Old option is called "Save Startup File" the new one "Save User Settings".
To visualise this difference, the 'save startup file' button has been removed from user preferences window. That option is available as CTRL+U and in File menu still.
- OSX: fixed bug that stopped giving mouse events outside window.
This also fixes "Continuous Grab" for OSX. (error since 2009)
2012-12-12 18:58:11 +00:00
return 0 ;
}
2011-02-19 12:05:20 +00:00
static int with_borders ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
2012-08-11 21:35:24 +00:00
WM_init_state_normal_set ( ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
2011-02-19 12:05:20 +00:00
static int without_borders ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
2012-08-11 21:35:24 +00:00
WM_init_state_fullscreen_set ( ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
2013-03-24 12:13:13 +00:00
extern bool wm_start_with_console ; /* wm_init_exit.c */
2011-04-08 12:49:38 +00:00
static int start_with_console ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
{
2013-03-24 12:13:13 +00:00
wm_start_with_console = true ;
2011-04-08 12:49:38 +00:00
return 0 ;
}
2011-02-19 12:05:20 +00:00
static int register_extension ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * data )
2010-02-01 01:43:31 +00:00
{
# ifdef WIN32
2011-03-29 13:00:03 +00:00
if ( data )
G . background = 1 ;
RegisterBlendExtension ( ) ;
2010-10-17 08:59:23 +00:00
# else
( void ) data ; /* unused */
2010-02-01 01:43:31 +00:00
# endif
return 0 ;
}
2011-02-19 12:05:20 +00:00
static int no_joystick ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * data )
2010-02-01 01:43:31 +00:00
{
2010-10-31 03:20:33 +00:00
# ifndef WITH_GAMEENGINE
2010-10-31 00:56:46 +00:00
( void ) data ;
# else
2010-02-01 01:43:31 +00:00
SYS_SystemHandle * syshandle = data ;
/**
2012-03-09 18:28:30 +00:00
* don ' t initialize joysticks if user doesn ' t want to use joysticks
* failed joystick initialization delays over 5 seconds , before game engine start
*/
2012-03-28 05:09:50 +00:00
SYS_WriteCommandLineInt ( * syshandle , " nojoystick " , 1 ) ;
2012-03-31 00:59:17 +00:00
if ( G . debug & G_DEBUG ) printf ( " disabling nojoystick \n " ) ;
2010-10-31 00:56:46 +00:00
# endif
2010-02-01 01:43:31 +00:00
return 0 ;
}
2011-02-19 12:05:20 +00:00
static int no_glsl ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
GPU_extensions_disable ( ) ;
return 0 ;
}
2011-02-19 12:05:20 +00:00
static int no_audio ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
sound_force_device ( 0 ) ;
return 0 ;
}
2011-02-19 12:05:20 +00:00
static int set_audio ( int argc , const char * * argv , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
if ( argc < 1 ) {
2011-11-15 23:03:35 +00:00
fprintf ( stderr , " -setaudio require one argument \n " ) ;
2010-02-01 01:43:31 +00:00
exit ( 1 ) ;
}
sound_force_device ( sound_define_from_str ( argv [ 1 ] ) ) ;
return 1 ;
}
2011-02-19 12:05:20 +00:00
static int set_output ( int argc , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
bContext * C = data ;
2012-03-28 05:09:50 +00:00
if ( argc > = 1 ) {
Scene * scene = CTX_data_scene ( C ) ;
2011-09-26 18:51:10 +00:00
if ( scene ) {
2011-06-10 10:13:50 +00:00
BLI_strncpy ( scene - > r . pic , argv [ 1 ] , sizeof ( scene - > r . pic ) ) ;
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: no blend loaded. cannot use '-o / --render-output'. \n " ) ;
2010-02-01 01:43:31 +00:00
}
return 1 ;
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: you must specify a path after '-o / --render-output'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
}
2011-02-19 12:05:20 +00:00
static int set_engine ( int argc , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
bContext * C = data ;
2011-09-11 13:46:58 +00:00
if ( argc > = 2 ) {
if ( ! strcmp ( argv [ 1 ] , " help " ) ) {
2010-02-01 01:43:31 +00:00
RenderEngineType * type = NULL ;
2011-09-11 13:46:58 +00:00
printf ( " Blender Engine Listing: \n " ) ;
2012-03-28 05:09:50 +00:00
for ( type = R_engines . first ; type ; type = type - > next ) {
2010-02-01 01:43:31 +00:00
printf ( " \t %s \n " , type - > idname ) ;
}
exit ( 0 ) ;
}
2011-09-11 13:46:58 +00:00
else {
2012-03-28 05:09:50 +00:00
Scene * scene = CTX_data_scene ( C ) ;
2011-09-26 18:51:10 +00:00
if ( scene ) {
2010-02-01 01:43:31 +00:00
RenderData * rd = & scene - > r ;
2011-04-12 15:55:38 +00:00
2012-03-24 06:38:07 +00:00
if ( BLI_findstring ( & R_engines , argv [ 1 ] , offsetof ( RenderEngineType , idname ) ) ) {
2011-09-15 12:26:48 +00:00
BLI_strncpy_utf8 ( rd - > engine , argv [ 1 ] , sizeof ( rd - > engine ) ) ;
2010-02-01 01:43:31 +00:00
}
}
2011-09-26 18:51:10 +00:00
else {
printf ( " \n Error: no blend loaded. order the arguments so '-E / --engine ' is after a blend is loaded. \n " ) ;
}
2010-02-01 01:43:31 +00:00
}
return 1 ;
}
2012-03-06 18:40:15 +00:00
else {
2011-09-11 13:46:58 +00:00
printf ( " \n Engine not specified, give 'help' for a list of available engines. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
}
2011-02-19 12:05:20 +00:00
static int set_image_type ( int argc , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
bContext * C = data ;
2012-05-11 17:33:48 +00:00
if ( argc > 1 ) {
2011-02-19 12:05:20 +00:00
const char * imtype = argv [ 1 ] ;
2012-03-28 05:09:50 +00:00
Scene * scene = CTX_data_scene ( C ) ;
2011-09-26 18:51:10 +00:00
if ( scene ) {
2012-03-28 05:09:50 +00:00
const char imtype_new = BKE_imtype_from_arg ( imtype ) ;
2011-11-21 20:19:58 +00:00
2011-11-24 05:18:26 +00:00
if ( imtype_new = = R_IMF_IMTYPE_INVALID ) {
2011-11-21 20:19:58 +00:00
printf ( " \n Error: Format from '-F / --render-format' not known or not compiled in this release. \n " ) ;
}
2011-11-24 05:18:26 +00:00
else {
2012-03-28 05:09:50 +00:00
scene - > r . im_format . imtype = imtype_new ;
2011-11-24 05:18:26 +00:00
}
2010-02-01 01:43:31 +00:00
}
2011-09-26 18:51:10 +00:00
else {
printf ( " \n Error: no blend loaded. order the arguments so '-F / --render-format' is after the blend is loaded. \n " ) ;
}
2010-02-01 01:43:31 +00:00
return 1 ;
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: you must specify a format after '-F / --render-foramt'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
}
2011-02-19 12:05:20 +00:00
static int set_threads ( int argc , const char * * argv , void * UNUSED ( data ) )
2010-02-01 01:43:31 +00:00
{
2012-05-11 17:33:48 +00:00
if ( argc > 1 ) {
2013-05-08 13:23:17 +00:00
int threads = atoi ( argv [ 1 ] ) ;
if ( threads > = 0 & & threads < = BLENDER_MAX_THREADS ) {
BLI_system_num_threads_override_set ( threads ) ;
2012-03-24 06:38:07 +00:00
}
else {
2013-05-08 13:23:17 +00:00
printf ( " Error, threads has to be in range 0-%d \n " , BLENDER_MAX_THREADS ) ;
2010-02-01 01:43:31 +00:00
}
return 1 ;
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: you must specify a number of threads between 0 and 8 '-t / --threads'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
}
2012-05-11 17:33:48 +00:00
static int set_verbosity ( int argc , const char * * argv , void * UNUSED ( data ) )
{
if ( argc > 1 ) {
int level = atoi ( argv [ 1 ] ) ;
2012-05-12 09:40:23 +00:00
# ifdef WITH_LIBMV
2012-05-11 17:33:48 +00:00
libmv_setLoggingVerbosity ( level ) ;
2012-05-12 09:40:23 +00:00
# else
( void ) level ;
# endif
2012-05-11 17:33:48 +00:00
return 1 ;
}
else {
printf ( " \n Error: you must specify a verbosity level. \n " ) ;
return 0 ;
}
}
2011-02-19 12:05:20 +00:00
static int set_extension ( int argc , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
bContext * C = data ;
if ( argc > = 1 ) {
2012-03-28 05:09:50 +00:00
Scene * scene = CTX_data_scene ( C ) ;
2011-09-26 18:51:10 +00:00
if ( scene ) {
2010-02-01 01:43:31 +00:00
if ( argv [ 1 ] [ 0 ] = = ' 0 ' ) {
scene - > r . scemode & = ~ R_EXTENSION ;
2012-03-24 06:38:07 +00:00
}
else if ( argv [ 1 ] [ 0 ] = = ' 1 ' ) {
2010-02-01 01:43:31 +00:00
scene - > r . scemode | = R_EXTENSION ;
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: Use '-x 1 / -x 0' To set the extension option or '--use-extension' \n " ) ;
2010-02-01 01:43:31 +00:00
}
2012-03-24 06:38:07 +00:00
}
else {
2010-02-01 01:43:31 +00:00
printf ( " \n Error: no blend loaded. order the arguments so '-o ' is after '-x '. \n " ) ;
}
return 1 ;
2012-03-24 06:38:07 +00:00
}
else {
2010-02-01 01:43:31 +00:00
printf ( " \n Error: you must specify a path after '- '. \n " ) ;
return 0 ;
}
}
2011-02-19 12:05:20 +00:00
static int set_ge_parameters ( int argc , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
int a = 0 ;
2010-10-31 03:20:33 +00:00
# ifdef WITH_GAMEENGINE
2012-03-28 05:09:50 +00:00
SYS_SystemHandle syshandle = * ( SYS_SystemHandle * ) data ;
2010-10-31 00:56:46 +00:00
# else
( void ) data ;
# endif
2012-03-06 18:40:15 +00:00
/**
2012-03-08 04:12:11 +00:00
* gameengine parameters are automatically put into system
2012-03-06 18:40:15 +00:00
* - g [ paramname = value ]
* - g [ boolparamname ]
* example :
* - g novertexarrays
* - g maxvertexarraysize = 512
*/
if ( argc > = 1 ) {
2011-02-19 12:05:20 +00:00
const char * paramname = argv [ a ] ;
2010-02-01 01:43:31 +00:00
/* check for single value versus assignment */
2012-03-28 05:09:50 +00:00
if ( a + 1 < argc & & ( * ( argv [ a + 1 ] ) = = ' = ' ) ) {
2010-02-01 01:43:31 +00:00
a + + ;
2012-03-28 05:09:50 +00:00
if ( a + 1 < argc ) {
2010-02-01 01:43:31 +00:00
a + + ;
/* assignment */
2010-10-31 03:20:33 +00:00
# ifdef WITH_GAMEENGINE
2012-03-28 05:09:50 +00:00
SYS_WriteCommandLineString ( syshandle , paramname , argv [ a ] ) ;
2010-10-31 00:56:46 +00:00
# endif
2012-03-06 18:40:15 +00:00
}
else {
2012-03-28 05:09:50 +00:00
printf ( " error: argument assignment (%s) without value. \n " , paramname ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
/* name arg eaten */
2012-03-24 06:38:07 +00:00
}
else {
2010-10-31 03:20:33 +00:00
# ifdef WITH_GAMEENGINE
2012-03-28 05:09:50 +00:00
SYS_WriteCommandLineInt ( syshandle , argv [ a ] , 1 ) ;
2010-10-31 00:56:46 +00:00
# endif
2010-02-01 01:43:31 +00:00
/* doMipMap */
2012-03-28 05:09:50 +00:00
if ( ! strcmp ( argv [ a ] , " nomipmap " ) ) {
2010-02-01 01:43:31 +00:00
GPU_set_mipmap ( 0 ) ; //doMipMap = 0;
}
/* linearMipMap */
2012-03-28 05:09:50 +00:00
if ( ! strcmp ( argv [ a ] , " linearmipmap " ) ) {
2010-02-01 01:43:31 +00:00
GPU_set_linear_mipmap ( 1 ) ; //linearMipMap = 1;
}
2013-02-02 04:58:03 +00:00
} /* if (*(argv[a + 1]) == '=') */
2010-02-01 01:43:31 +00:00
}
return a ;
}
2011-02-19 12:05:20 +00:00
static int render_frame ( int argc , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
bContext * C = data ;
2012-03-28 05:09:50 +00:00
Scene * scene = CTX_data_scene ( C ) ;
2011-09-26 18:51:10 +00:00
if ( scene ) {
2012-03-28 05:09:50 +00:00
Main * bmain = CTX_data_main ( C ) ;
2010-02-01 01:43:31 +00:00
if ( argc > 1 ) {
2010-03-27 15:35:34 +00:00
Render * re = RE_NewRender ( scene - > id . name ) ;
2010-06-25 11:56:12 +00:00
int frame ;
2010-02-01 01:43:31 +00:00
ReportList reports ;
2012-03-28 05:09:50 +00:00
switch ( * argv [ 1 ] ) {
case ' + ' :
frame = scene - > r . sfra + atoi ( argv [ 1 ] + 1 ) ;
break ;
case ' - ' :
frame = ( scene - > r . efra - atoi ( argv [ 1 ] + 1 ) ) + 1 ;
break ;
default :
frame = atoi ( argv [ 1 ] ) ;
break ;
2010-06-25 11:56:12 +00:00
}
2010-02-01 01:43:31 +00:00
BKE_reports_init ( & reports , RPT_PRINT ) ;
2012-02-19 05:11:24 +00:00
frame = CLAMPIS ( frame , MINAFRAME , MAXFRAME ) ;
2010-02-01 01:43:31 +00:00
2011-06-28 16:25:07 +00:00
RE_SetReports ( re , & reports ) ;
RE_BlenderAnim ( re , bmain , scene , NULL , scene - > lay , frame , frame , scene - > r . frame_step ) ;
RE_SetReports ( re , NULL ) ;
2010-02-01 01:43:31 +00:00
return 1 ;
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: frame number must follow '-f / --render-frame'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: no blend loaded. cannot use '-f / --render-frame'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
}
2011-02-19 12:05:20 +00:00
static int render_animation ( int UNUSED ( argc ) , const char * * UNUSED ( argv ) , void * data )
2010-02-01 01:43:31 +00:00
{
bContext * C = data ;
2012-03-28 05:09:50 +00:00
Scene * scene = CTX_data_scene ( C ) ;
2011-09-26 18:51:10 +00:00
if ( scene ) {
2012-03-28 05:09:50 +00:00
Main * bmain = CTX_data_main ( C ) ;
Render * re = RE_NewRender ( scene - > id . name ) ;
2010-02-01 01:43:31 +00:00
ReportList reports ;
BKE_reports_init ( & reports , RPT_PRINT ) ;
2011-06-28 16:25:07 +00:00
RE_SetReports ( re , & reports ) ;
RE_BlenderAnim ( re , bmain , scene , NULL , scene - > lay , scene - > r . sfra , scene - > r . efra , scene - > r . frame_step ) ;
RE_SetReports ( re , NULL ) ;
2012-03-06 18:40:15 +00:00
}
else {
2010-02-01 01:43:31 +00:00
printf ( " \n Error: no blend loaded. cannot use '-a'. \n " ) ;
}
return 0 ;
}
2011-02-19 12:05:20 +00:00
static int set_scene ( int argc , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
2012-03-24 06:38:07 +00:00
if ( argc > 1 ) {
2012-03-28 05:09:50 +00:00
bContext * C = data ;
2012-05-05 14:33:36 +00:00
Scene * scene = BKE_scene_set_name ( CTX_data_main ( C ) , argv [ 1 ] ) ;
2012-03-24 06:38:07 +00:00
if ( scene ) {
2011-09-26 18:51:10 +00:00
CTX_data_scene_set ( C , scene ) ;
2010-07-05 00:00:40 +00:00
}
2010-02-01 01:43:31 +00:00
return 1 ;
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: Scene name must follow '-S / --scene'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
}
2011-02-19 12:05:20 +00:00
static int set_start_frame ( int argc , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
bContext * C = data ;
2012-03-28 05:09:50 +00:00
Scene * scene = CTX_data_scene ( C ) ;
2011-09-26 18:51:10 +00:00
if ( scene ) {
2010-02-01 01:43:31 +00:00
if ( argc > 1 ) {
int frame = atoi ( argv [ 1 ] ) ;
2010-03-14 12:49:55 +00:00
( scene - > r . sfra ) = CLAMPIS ( frame , MINFRAME , MAXFRAME ) ;
2010-02-01 01:43:31 +00:00
return 1 ;
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: frame number must follow '-s / --frame-start'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: no blend loaded. cannot use '-s / --frame-start'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
}
2011-02-19 12:05:20 +00:00
static int set_end_frame ( int argc , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
bContext * C = data ;
2012-03-28 05:09:50 +00:00
Scene * scene = CTX_data_scene ( C ) ;
2011-09-26 18:51:10 +00:00
if ( scene ) {
2010-02-01 01:43:31 +00:00
if ( argc > 1 ) {
int frame = atoi ( argv [ 1 ] ) ;
2010-03-14 12:49:55 +00:00
( scene - > r . efra ) = CLAMPIS ( frame , MINFRAME , MAXFRAME ) ;
2010-02-01 01:43:31 +00:00
return 1 ;
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: frame number must follow '-e / --frame-end'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: no blend loaded. cannot use '-e / --frame-end'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
}
2011-02-19 12:05:20 +00:00
static int set_skip_frame ( int argc , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
bContext * C = data ;
2012-03-28 05:09:50 +00:00
Scene * scene = CTX_data_scene ( C ) ;
2011-09-26 18:51:10 +00:00
if ( scene ) {
2010-02-01 01:43:31 +00:00
if ( argc > 1 ) {
int frame = atoi ( argv [ 1 ] ) ;
2010-03-14 12:49:55 +00:00
( scene - > r . frame_step ) = CLAMPIS ( frame , 1 , MAXFRAME ) ;
2010-02-01 01:43:31 +00:00
return 1 ;
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: number of frames to step must follow '-j / --frame-jump'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
2012-03-24 06:38:07 +00:00
}
else {
2010-05-23 20:39:21 +00:00
printf ( " \n Error: no blend loaded. cannot use '-j / --frame-jump'. \n " ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
}
2010-05-30 14:05:58 +00:00
/* macro for ugly context setup/reset */
2010-10-31 04:11:39 +00:00
# ifdef WITH_PYTHON
2011-11-05 05:44:52 +00:00
# define BPY_CTX_SETUP(_cmd) \
2012-03-28 05:09:50 +00:00
{ \
wmWindowManager * wm = CTX_wm_manager ( C ) ; \
wmWindow * prevwin = CTX_wm_window ( C ) ; \
Scene * prevscene = CTX_data_scene ( C ) ; \
if ( wm - > windows . first ) { \
CTX_wm_window_set ( C , wm - > windows . first ) ; \
_cmd ; \
CTX_wm_window_set ( C , prevwin ) ; \
} \
else { \
fprintf ( stderr , " Python script \" %s \" " \
" running with missing context data. \n " , argv [ 1 ] ) ; \
_cmd ; \
} \
CTX_data_scene_set ( C , prevscene ) ; \
2013-02-11 03:01:50 +00:00
} ( void ) 0 \
2010-05-30 14:05:58 +00:00
2010-10-31 04:11:39 +00:00
# endif /* WITH_PYTHON */
2010-05-30 14:05:58 +00:00
2013-02-11 03:01:50 +00:00
static int run_python_file ( int argc , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
2010-10-31 04:11:39 +00:00
# ifdef WITH_PYTHON
2010-02-25 16:08:32 +00:00
bContext * C = data ;
2010-02-01 01:43:31 +00:00
/* workaround for scripts not getting a bpy.context.scene, causes internal errors elsewhere */
if ( argc > 1 ) {
2010-05-30 14:05:58 +00:00
/* Make the path absolute because its needed for relative linked blends to be found */
2011-11-26 13:11:55 +00:00
char filename [ FILE_MAX ] ;
2010-05-30 14:05:58 +00:00
BLI_strncpy ( filename , argv [ 1 ] , sizeof ( filename ) ) ;
BLI_path_cwd ( filename ) ;
2010-03-27 12:42:01 +00:00
2013-02-11 03:01:50 +00:00
BPY_CTX_SETUP ( BPY_filepath_exec ( C , filename , NULL ) ) ;
2010-03-27 12:42:01 +00:00
2010-02-01 01:43:31 +00:00
return 1 ;
2012-03-24 06:38:07 +00:00
}
else {
2013-02-11 03:01:50 +00:00
printf ( " \n Error: you must specify a filepath after '%s'. \n " , argv [ 0 ] ) ;
return 0 ;
}
# else
( void ) argc ; ( void ) argv ; ( void ) data ; /* unused */
printf ( " This blender was built without python support \n " ) ;
return 0 ;
# endif /* WITH_PYTHON */
}
static int run_python_text ( int argc , const char * * argv , void * data )
{
# ifdef WITH_PYTHON
bContext * C = data ;
/* workaround for scripts not getting a bpy.context.scene, causes internal errors elsewhere */
if ( argc > 1 ) {
/* Make the path absolute because its needed for relative linked blends to be found */
struct Text * text = ( struct Text * ) BKE_libblock_find_name ( ID_TXT , argv [ 1 ] ) ;
if ( text ) {
BPY_CTX_SETUP ( BPY_text_exec ( C , text , NULL , false ) ) ;
return 1 ;
}
else {
printf ( " \n Error: text block not found %s. \n " , argv [ 1 ] ) ;
return 1 ;
}
}
else {
printf ( " \n Error: you must specify a text block after '%s'. \n " , argv [ 0 ] ) ;
2010-02-01 01:43:31 +00:00
return 0 ;
}
# else
2010-10-23 16:03:31 +00:00
( void ) argc ; ( void ) argv ; ( void ) data ; /* unused */
2010-02-01 01:43:31 +00:00
printf ( " This blender was built without python support \n " ) ;
return 0 ;
2010-10-31 04:11:39 +00:00
# endif /* WITH_PYTHON */
2010-02-01 01:43:31 +00:00
}
2011-02-19 12:05:20 +00:00
static int run_python_console ( int UNUSED ( argc ) , const char * * argv , void * data )
2010-05-30 14:05:58 +00:00
{
2010-10-31 04:11:39 +00:00
# ifdef WITH_PYTHON
2011-01-05 02:08:54 +00:00
bContext * C = data ;
2010-05-30 14:05:58 +00:00
2013-02-11 03:01:50 +00:00
BPY_CTX_SETUP ( BPY_string_exec ( C , " __import__('code').interact() " ) ) ;
2010-05-30 14:05:58 +00:00
return 0 ;
# else
2010-10-23 16:03:31 +00:00
( void ) argv ; ( void ) data ; /* unused */
2010-05-30 14:05:58 +00:00
printf ( " This blender was built without python support \n " ) ;
return 0 ;
2010-10-31 04:11:39 +00:00
# endif /* WITH_PYTHON */
2010-05-30 14:05:58 +00:00
}
2011-02-19 12:05:20 +00:00
static int set_addons ( int argc , const char * * argv , void * data )
2011-01-26 16:30:12 +00:00
{
/* workaround for scripts not getting a bpy.context.scene, causes internal errors elsewhere */
if ( argc > 1 ) {
# ifdef WITH_PYTHON
2012-03-28 05:09:50 +00:00
const int slen = strlen ( argv [ 1 ] ) + 128 ;
char * str = malloc ( slen ) ;
bContext * C = data ;
2011-03-20 04:44:03 +00:00
BLI_snprintf ( str , slen , " [__import__('addon_utils').enable(i, default_set=False) for i in '%s'.split(',')] " , argv [ 1 ] ) ;
2011-01-26 16:30:12 +00:00
BPY_CTX_SETUP ( BPY_string_exec ( C , str ) ) ;
free ( str ) ;
# else
( void ) argv ; ( void ) data ; /* unused */
# endif /* WITH_PYTHON */
return 1 ;
}
else {
printf ( " \n Error: you must specify a comma separated list after '--addons'. \n " ) ;
return 0 ;
}
}
2011-02-19 12:05:20 +00:00
static int load_file ( int UNUSED ( argc ) , const char * * argv , void * data )
2010-02-01 01:43:31 +00:00
{
bContext * C = data ;
/* Make the path absolute because its needed for relative linked blends to be found */
2011-11-26 13:11:55 +00:00
char filename [ FILE_MAX ] ;
2012-01-05 11:02:27 +00:00
/* note, we could skip these, but so far we always tried to load these files */
if ( argv [ 0 ] [ 0 ] = = ' - ' ) {
fprintf ( stderr , " unknown argument, loading as file: %s \n " , argv [ 0 ] ) ;
}
2010-02-01 01:43:31 +00:00
BLI_strncpy ( filename , argv [ 0 ] , sizeof ( filename ) ) ;
2010-03-09 17:36:23 +00:00
BLI_path_cwd ( filename ) ;
2010-02-01 01:43:31 +00:00
if ( G . background ) {
2010-10-16 02:40:31 +00:00
int retval = BKE_read_file ( C , filename , NULL ) ;
2010-02-01 01:43:31 +00:00
2012-03-09 18:28:30 +00:00
/* we successfully loaded a blend file, get sure that
* pointcache works */
2011-01-07 06:50:29 +00:00
if ( retval ! = BKE_READ_FILE_FAIL ) {
2012-03-28 05:09:50 +00:00
wmWindowManager * wm = CTX_wm_manager ( C ) ;
2010-11-24 14:40:03 +00:00
/* special case, 2.4x files */
2012-03-28 05:09:50 +00:00
if ( wm = = NULL & & CTX_data_main ( C ) - > wm . first = = NULL ) {
2010-11-24 14:40:03 +00:00
extern void wm_add_default ( bContext * C ) ;
/* wm_add_default() needs the screen to be set. */
CTX_wm_screen_set ( C , CTX_data_main ( C ) - > screen . first ) ;
wm_add_default ( C ) ;
}
2010-02-01 01:43:31 +00:00
CTX_wm_manager_set ( C , NULL ) ; /* remove wm to force check */
WM_check ( C ) ;
G . relbase_valid = 1 ;
2012-03-28 05:09:50 +00:00
if ( CTX_wm_manager ( C ) = = NULL ) CTX_wm_manager_set ( C , wm ) ; /* reset wm */
2011-01-28 15:24:02 +00:00
2011-03-27 23:11:22 +00:00
DAG_on_visible_update ( CTX_data_main ( C ) , TRUE ) ;
2010-02-01 01:43:31 +00:00
}
2011-11-15 23:03:35 +00:00
else {
/* failed to load file, stop processing arguments */
return - 1 ;
}
2010-02-01 01:43:31 +00:00
2012-08-11 21:35:24 +00:00
/* WM_file_read() runs normally but since we're in background mode do here */
2010-10-31 04:11:39 +00:00
# ifdef WITH_PYTHON
2010-04-27 21:01:24 +00:00
/* run any texts that were loaded in and flagged as modules */
2013-06-09 23:31:53 +00:00
BPY_python_reset ( C ) ;
2010-04-27 21:01:24 +00:00
# endif
2010-02-01 01:43:31 +00:00
/* happens for the UI on file reading too (huh? (ton))*/
2012-03-28 05:09:50 +00:00
// XXX BKE_reset_undo();
// BKE_write_undo("original"); /* save current state */
2012-03-24 06:38:07 +00:00
}
else {
2010-02-01 01:43:31 +00:00
/* we are not running in background mode here, but start blender in UI mode with
2012-03-09 18:28:30 +00:00
* a file - this should do everything a ' load file ' does */
2010-10-04 01:18:47 +00:00
ReportList reports ;
BKE_reports_init ( & reports , RPT_PRINT ) ;
2013-06-18 18:11:52 +00:00
WM_file_autoexec_init ( filename ) ;
2012-08-11 21:35:24 +00:00
WM_file_read ( C , filename , & reports ) ;
2010-10-04 01:18:47 +00:00
BKE_reports_clear ( & reports ) ;
2010-02-01 01:43:31 +00:00
}
G . file_loaded = 1 ;
return 0 ;
}
2011-02-13 10:52:18 +00:00
static void setupArguments ( bContext * C , bArgs * ba , SYS_SystemHandle * syshandle )
2010-02-01 01:43:31 +00:00
{
2010-05-24 18:53:45 +00:00
static char output_doc [ ] = " <path> "
" \n \t Set the render path and file name. "
" \n \t Use // at the start of the path to "
" \n \t \t render relative to the blend file. "
" \n \t The # characters are replaced by the frame number, and used to define zero padding. "
" \n \t \t ani_##_test.png becomes ani_01_test.png "
" \n \t \t test-######.png becomes test-000001.png "
" \n \t \t When the filename does not contain #, The suffix #### is added to the filename "
" \n \t The frame number will be added at the end of the filename. "
" \n \t \t eg: blender -b foobar.blend -o //render_ -F PNG -x 1 -a "
" \n \t \t //render_ becomes //render_####, writing frames as //render_0001.png// " ;
static char format_doc [ ] = " <format> "
" \n \t Set the render format, Valid options are... "
" \n \t \t TGA IRIS JPEG MOVIE IRIZ RAWTGA "
" \n \t \t AVIRAW AVIJPEG PNG BMP FRAMESERVER "
" \n \t (formats that can be compiled into blender, not available on all systems) "
" \n \t \t HDR TIFF EXR MULTILAYER MPEG AVICODEC QUICKTIME CINEON DPX DDS " ;
static char playback_doc [ ] = " <options> <file(s)> "
" \n \t Playback <file(s)>, only operates this way when not running in background. "
" \n \t \t -p <sx> <sy> \t Open with lower left corner at <sx>, <sy> "
" \n \t \t -m \t \t Read from disk (Don't buffer) "
" \n \t \t -f <fps> <fps-base> \t \t Specify FPS to start with "
2012-11-17 01:15:28 +00:00
" \n \t \t -j <frame> \t Set frame step to <frame> "
" \n \t \t -s <frame> \t Play from <frame> "
2012-11-26 00:59:11 +00:00
" \n \t \t -e <frame> \t Play until <frame> " ;
2010-05-24 18:53:45 +00:00
static char game_doc [ ] = " Game Engine specific options "
" \n \t -g fixedtime \t \t Run on 50 hertz without dropping frames "
2010-11-08 14:08:22 +00:00
" \n \t -g vertexarrays \t \t Use Vertex Arrays for rendering (usually faster) "
2010-05-24 18:53:45 +00:00
" \n \t -g nomipmap \t \t No Texture Mipmapping "
2010-11-08 14:08:22 +00:00
" \n \t -g linearmipmap \t \t Linear Texture Mipmapping instead of Nearest (default) " ;
2010-05-24 18:53:45 +00:00
static char debug_doc [ ] = " \n \t Turn debugging on \n "
" \n \t * Prints every operator call and their arguments "
" \n \t * Disables mouse grab (to interact with a debugger in some cases) "
2011-05-28 13:11:24 +00:00
" \n \t * Keeps python sys.stdin rather than setting it to None " ;
2010-05-24 18:53:45 +00:00
//BLI_argsAdd(ba, pass, short_arg, long_arg, doc, cb, C);
2010-02-01 01:43:31 +00:00
/* end argument processing after -- */
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , - 1 , " -- " , NULL , " \n \t Ends option processing, following arguments passed unchanged. Access via python's sys.argv " , end_arguments , NULL ) ;
2010-02-01 01:43:31 +00:00
/* first pass: background mode, disable python and commands that exit after usage */
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , 1 , " -h " , " --help " , " \n \t Print this help text and exit " , print_help , ba ) ;
/* Windows only */
BLI_argsAdd ( ba , 1 , " /? " , NULL , " \n \t Print this help text and exit (windows only) " , print_help , ba ) ;
2010-02-01 01:43:31 +00:00
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , 1 , " -v " , " --version " , " \n \t Print Blender version and exit " , print_version , NULL ) ;
2011-04-28 06:20:47 +00:00
/* only to give help message */
# ifndef WITH_PYTHON_SECURITY /* default */
2012-03-28 05:09:50 +00:00
# define PY_ENABLE_AUTO ", (default)"
# define PY_DISABLE_AUTO ""
2011-04-28 06:20:47 +00:00
# else
2012-03-28 05:09:50 +00:00
# define PY_ENABLE_AUTO ""
# define PY_DISABLE_AUTO ", (compiled as non-standard default)"
2011-04-28 06:20:47 +00:00
# endif
2010-02-01 01:43:31 +00:00
2011-04-28 06:20:47 +00:00
BLI_argsAdd ( ba , 1 , " -y " , " --enable-autoexec " , " \n \t Enable automatic python script execution " PY_ENABLE_AUTO , enable_python , NULL ) ;
2012-05-29 09:42:11 +00:00
BLI_argsAdd ( ba , 1 , " -Y " , " --disable-autoexec " , " \n \t Disable automatic python script execution (pydrivers & startup scripts) " PY_DISABLE_AUTO , disable_python , NULL ) ;
2010-02-01 01:43:31 +00:00
2013-01-10 16:37:48 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --disable-crash-handler " , " \n \t Disable the crash handler " , disable_crash_handler , NULL ) ;
2011-04-28 06:20:47 +00:00
# undef PY_ENABLE_AUTO
# undef PY_DISABLE_AUTO
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , 1 , " -b " , " --background " , " <file> \n \t Load <file> in background (often used for UI-less rendering) " , background_mode , NULL ) ;
2010-02-03 17:48:39 +00:00
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , 1 , " -a " , NULL , playback_doc , playback_mode , NULL ) ;
2010-02-01 01:43:31 +00:00
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , 1 , " -d " , " --debug " , debug_doc , debug_mode , ba ) ;
2012-06-20 13:40:43 +00:00
2012-03-30 10:37:49 +00:00
# ifdef WITH_FFMPEG
2012-03-31 00:59:17 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --debug-ffmpeg " , " \n \t Enable debug messages from FFmpeg library " , debug_mode_generic , ( void * ) G_DEBUG_FFMPEG ) ;
2012-03-30 10:37:49 +00:00
# endif
2013-01-03 23:27:20 +00:00
# ifdef WITH_FREESTYLE
BLI_argsAdd ( ba , 1 , NULL , " --debug-freestyle " , " \n \t Enable debug/profiling messages from Freestyle rendering " , debug_mode_generic , ( void * ) G_DEBUG_FREESTYLE ) ;
# endif
2012-05-02 14:23:00 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --debug-python " , " \n \t Enable debug messages for python " , debug_mode_generic , ( void * ) G_DEBUG_PYTHON ) ;
2012-03-31 00:59:17 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --debug-events " , " \n \t Enable debug messages for the event system " , debug_mode_generic , ( void * ) G_DEBUG_EVENTS ) ;
2012-10-27 15:05:12 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --debug-handlers " , " \n \t Enable debug messages for event handling " , debug_mode_generic , ( void * ) G_DEBUG_HANDLERS ) ;
2012-03-31 00:59:17 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --debug-wm " , " \n \t Enable debug messages for the window manager " , debug_mode_generic , ( void * ) G_DEBUG_WM ) ;
BLI_argsAdd ( ba , 1 , NULL , " --debug-all " , " \n \t Enable all debug messages (excludes libmv) " , debug_mode_generic , ( void * ) G_DEBUG_ALL ) ;
2011-01-19 09:13:24 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --debug-fpe " , " \n \t Enable floating point exceptions " , set_fpe , NULL ) ;
2012-03-30 10:37:49 +00:00
# ifdef WITH_LIBMV
BLI_argsAdd ( ba , 1 , NULL , " --debug-libmv " , " \n \t Enable debug messages from libmv library " , debug_mode_libmv , NULL ) ;
# endif
2013-10-10 11:58:01 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --debug-memory " , " \n \t Enable fully guarded memory allocation and debugging " , debug_mode_memory , NULL ) ;
2012-03-30 10:37:49 +00:00
2012-06-20 13:40:43 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --debug-value " , " <value> \n \t Set debug value of <value> on startup \n " , set_debug_value , NULL ) ;
2012-06-29 14:32:25 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --debug-jobs " , " \n \t Enable time profiling for background jobs. " , debug_mode_generic , ( void * ) G_DEBUG_JOBS ) ;
2012-06-20 13:40:43 +00:00
2012-05-11 17:33:48 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --verbose " , " <verbose> \n \t Set logging verbosity level. " , set_verbosity , NULL ) ;
2012-03-28 05:09:50 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --factory-startup " , " \n \t Skip reading the " STRINGIFY ( BLENDER_STARTUP_FILE ) " in the users home directory " , set_factory_startup , NULL ) ;
2010-02-01 01:43:31 +00:00
2011-01-19 21:30:23 +00:00
/* TODO, add user env vars? */
2012-03-28 05:09:50 +00:00
BLI_argsAdd ( ba , 1 , NULL , " --env-system-datafiles " , " \n \t Set the " STRINGIFY_ARG ( BLENDER_SYSTEM_DATAFILES ) " environment variable " , set_env , NULL ) ;
BLI_argsAdd ( ba , 1 , NULL , " --env-system-scripts " , " \n \t Set the " STRINGIFY_ARG ( BLENDER_SYSTEM_SCRIPTS ) " environment variable " , set_env , NULL ) ;
BLI_argsAdd ( ba , 1 , NULL , " --env-system-python " , " \n \t Set the " STRINGIFY_ARG ( BLENDER_SYSTEM_PYTHON ) " environment variable " , set_env , NULL ) ;
2010-02-01 01:43:31 +00:00
/* second pass: custom window stuff */
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , 2 , " -p " , " --window-geometry " , " <sx> <sy> <w> <h> \n \t Open with lower left corner at <sx>, <sy> and width and height as <w>, <h> " , prefsize , NULL ) ;
BLI_argsAdd ( ba , 2 , " -w " , " --window-border " , " \n \t Force opening with borders (default) " , with_borders , NULL ) ;
2010-11-08 14:08:22 +00:00
BLI_argsAdd ( ba , 2 , " -W " , " --window-borderless " , " \n \t Force opening without borders " , without_borders , NULL ) ;
2013-02-14 05:02:20 +00:00
BLI_argsAdd ( ba , 2 , " -con " , " --start-console " , " \n \t Start with the console window open (ignored if -b is set), (Windows only) " , start_with_console , NULL ) ;
2011-03-29 13:00:03 +00:00
BLI_argsAdd ( ba , 2 , " -R " , NULL , " \n \t Register .blend extension, then exit (Windows only) " , register_extension , NULL ) ;
BLI_argsAdd ( ba , 2 , " -r " , NULL , " \n \t Silently register .blend extension, then exit (Windows only) " , register_extension , ba ) ;
Holiday coding log :)
Nice formatted version (pictures soon):
http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.66/Usability
Short list of main changes:
- Transparent region option (over main region), added code to blend in/out such panels.
- Min size window now 640 x 480
- Fixed DPI for ui - lots of cleanup and changes everywhere. Icon image need correct size still, layer-in-use icon needs remake.
- Macbook retina support, use command line --no-native-pixels to disable it
- Timeline Marker label was drawing wrong
- Trackpad and magic mouse: supports zoom (hold ctrl)
- Fix for splash position: removed ghost function and made window size update after creation immediate
- Fast undo buffer save now adds UI as well. Could be checked for regular file save even...
Quit.blend and temp file saving use this now.
- Dixed filename in window on reading quit.blend or temp saves, and they now add a warning in window title: "(Recovered)"
- New Userpref option "Keep Session" - this always saves quit.blend, and loads on start.
This allows keeping UI and data without actual saves, until you actually save.
When you load startup.blend and quit, it recognises the quit.blend as a startup (no file name in header)
- Added 3D view copy/paste buffers (selected objects). Shortcuts ctrl-c, ctrl-v (OSX, cmd-c, cmd-v).
Coded partial file saving for it. Could be used for other purposes. Todo: use OS clipboards.
- User preferences (themes, keymaps, user settings) now can be saved as a separate file.
Old option is called "Save Startup File" the new one "Save User Settings".
To visualise this difference, the 'save startup file' button has been removed from user preferences window. That option is available as CTRL+U and in File menu still.
- OSX: fixed bug that stopped giving mouse events outside window.
This also fixes "Continuous Grab" for OSX. (error since 2009)
2012-12-12 18:58:11 +00:00
BLI_argsAdd ( ba , 2 , NULL , " --no-native-pixels " , " \n \t Do not use native pixel size, for high resolution displays (MacBook 'Retina') " , native_pixels , ba ) ;
2010-02-01 01:43:31 +00:00
/* third pass: disabling things and forcing settings */
2010-05-24 18:53:45 +00:00
BLI_argsAddCase ( ba , 3 , " -nojoystick " , 1 , NULL , 0 , " \n \t Disable joystick support " , no_joystick , syshandle ) ;
BLI_argsAddCase ( ba , 3 , " -noglsl " , 1 , NULL , 0 , " \n \t Disable GLSL shading " , no_glsl , NULL ) ;
BLI_argsAddCase ( ba , 3 , " -noaudio " , 1 , NULL , 0 , " \n \t Force sound system to None " , no_audio , NULL ) ;
BLI_argsAddCase ( ba , 3 , " -setaudio " , 1 , NULL , 0 , " \n \t Force sound system to a specific device \n \t NULL SDL OPENAL JACK " , set_audio , NULL ) ;
2010-02-01 01:43:31 +00:00
/* fourth pass: processing arguments */
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , 4 , " -g " , NULL , game_doc , set_ge_parameters , syshandle ) ;
2010-06-25 11:56:12 +00:00
BLI_argsAdd ( ba , 4 , " -f " , " --render-frame " , " <frame> \n \t Render frame <frame> and save it. \n \t +<frame> start frame relative, -<frame> end frame relative. " , render_frame , C ) ;
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , 4 , " -a " , " --render-anim " , " \n \t Render frames from start to end (inclusive) " , render_animation , C ) ;
2010-07-05 00:00:40 +00:00
BLI_argsAdd ( ba , 4 , " -S " , " --scene " , " <name> \n \t Set the active scene <name> for rendering " , set_scene , C ) ;
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , 4 , " -s " , " --frame-start " , " <frame> \n \t Set start to frame <frame> (use before the -a argument) " , set_start_frame , C ) ;
BLI_argsAdd ( ba , 4 , " -e " , " --frame-end " , " <frame> \n \t Set end to frame <frame> (use before the -a argument) " , set_end_frame , C ) ;
BLI_argsAdd ( ba , 4 , " -j " , " --frame-jump " , " <frames> \n \t Set number of frames to step forward after each rendered frame " , set_skip_frame , C ) ;
2013-02-11 03:01:50 +00:00
BLI_argsAdd ( ba , 4 , " -P " , " --python " , " <filename> \n \t Run the given Python script file " , run_python_file , C ) ;
BLI_argsAdd ( ba , 4 , NULL , " --python-text " , " <name> \n \t Run the given Python script text block " , run_python_text , C ) ;
2010-05-30 14:05:58 +00:00
BLI_argsAdd ( ba , 4 , NULL , " --python-console " , " \n \t Run blender with an interactive console " , run_python_console , C ) ;
2011-01-26 16:30:12 +00:00
BLI_argsAdd ( ba , 4 , NULL , " --addons " , " \n \t Comma separated list of addons (no spaces) " , set_addons , C ) ;
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , 4 , " -o " , " --render-output " , output_doc , set_output , C ) ;
BLI_argsAdd ( ba , 4 , " -E " , " --engine " , " <engine> \n \t Specify the render engine \n \t use -E help to list available engines " , set_engine , C ) ;
BLI_argsAdd ( ba , 4 , " -F " , " --render-format " , format_doc , set_image_type , C ) ;
2013-05-08 13:23:17 +00:00
BLI_argsAdd ( ba , 4 , " -t " , " --threads " , " <threads> \n \t Use amount of <threads> for rendering and other operations \n \t [1- " STRINGIFY ( BLENDER_MAX_THREADS ) " ], 0 for systems processor count. " , set_threads , NULL ) ;
2010-05-24 18:53:45 +00:00
BLI_argsAdd ( ba , 4 , " -x " , " --use-extension " , " <bool> \n \t Set option to add the file extension to the end of the file " , set_extension , C ) ;
2010-02-01 01:43:31 +00:00
}
2012-06-15 21:19:05 +00:00
# endif /* WITH_PYTHON_MODULE */
2010-02-01 01:43:31 +00:00
2011-02-20 23:39:29 +00:00
# ifdef WITH_PYTHON_MODULE
/* allow python module to call main */
2012-05-21 09:00:35 +00:00
# define main main_python_enter
2012-03-28 05:09:50 +00:00
static void * evil_C = NULL ;
2012-01-16 14:13:41 +00:00
2012-05-21 09:00:35 +00:00
# ifdef __APPLE__
/* environ is not available in mac shared libraries */
# include <crt_externs.h>
2012-01-16 14:13:41 +00:00
char * * environ = NULL ;
2012-05-21 09:00:35 +00:00
# endif
2011-02-20 23:39:29 +00:00
# endif
2012-03-20 02:17:37 +00:00
# ifdef WIN32
2012-04-12 02:15:33 +00:00
int main ( int argc , const char * * UNUSED ( argv_c ) ) /* Do not mess with const */
2012-03-20 02:17:37 +00:00
# else
2011-02-20 23:39:29 +00:00
int main ( int argc , const char * * argv )
2012-03-20 02:17:37 +00:00
# endif
2002-10-12 11:37:38 +00:00
{
2013-10-10 11:58:01 +00:00
bContext * C ;
2012-06-15 21:19:05 +00:00
SYS_SystemHandle syshandle ;
# ifndef WITH_PYTHON_MODULE
2010-02-01 01:43:31 +00:00
bArgs * ba ;
2012-06-15 21:19:05 +00:00
# endif
2002-10-12 11:37:38 +00:00
2013-10-10 11:58:01 +00:00
# ifdef WIN32 /* Win32 Unicode Args */
2013-10-31 23:52:44 +00:00
/* NOTE: cannot use guardedalloc malloc here, as it's not yet initialized
2013-10-10 11:58:01 +00:00
* ( it depends on the args passed in , which is what we ' re getting here ! )
*/
2012-03-28 05:09:50 +00:00
wchar_t * * argv_16 = CommandLineToArgvW ( GetCommandLineW ( ) , & argc ) ;
2013-10-10 11:58:01 +00:00
char * * argv = malloc ( argc * sizeof ( char * ) ) ;
2012-03-20 02:17:37 +00:00
int argci = 0 ;
2013-10-10 11:58:01 +00:00
2012-04-12 02:15:33 +00:00
for ( argci = 0 ; argci < argc ; argci + + ) {
2012-03-28 05:09:50 +00:00
argv [ argci ] = alloc_utf_8_from_16 ( argv_16 [ argci ] , 0 ) ;
2012-03-20 02:17:37 +00:00
}
2013-10-10 11:58:01 +00:00
2012-03-20 02:17:37 +00:00
LocalFree ( argv_16 ) ;
2012-05-19 13:55:54 +00:00
# endif
2012-03-20 02:17:37 +00:00
2013-10-10 11:58:01 +00:00
/* NOTE: Special exception for guarded allocator type switch:
* we need to perform switch from lock - free to fully
* guarded allocator before any allocation happened .
*/
{
int i ;
for ( i = 0 ; i < argc ; i + + ) {
if ( STREQ ( argv [ i ] , " --debug " ) | | STREQ ( argv [ i ] , " -d " ) | |
STREQ ( argv [ i ] , " --debug-memory " ) )
{
printf ( " Switching to fully guarded memory allocator. \n " ) ;
MEM_use_guarded_allocator ( ) ;
break ;
}
else if ( STREQ ( argv [ i ] , " -- " ) ) {
break ;
}
}
}
2013-11-15 11:11:59 +00:00
# ifdef BUILD_DATE
{
time_t temp_time = build_commit_timestamp ;
struct tm * tm = gmtime ( & temp_time ) ;
2013-11-17 15:39:26 +00:00
if ( LIKELY ( tm ) ) {
strftime ( build_commit_date , sizeof ( build_commit_date ) , " %Y-%m-%d " , tm ) ;
strftime ( build_commit_time , sizeof ( build_commit_time ) , " %H:%M " , tm ) ;
}
else {
const char * unknown = " date-unknown " ;
BLI_strncpy ( build_commit_date , unknown , sizeof ( build_commit_date ) ) ;
BLI_strncpy ( build_commit_time , unknown , sizeof ( build_commit_time ) ) ;
}
2013-11-15 11:11:59 +00:00
}
# endif
2013-10-10 11:58:01 +00:00
C = CTX_create ( ) ;
2011-02-20 23:39:29 +00:00
# ifdef WITH_PYTHON_MODULE
2012-01-16 14:13:41 +00:00
# ifdef __APPLE__
environ = * _NSGetEnviron ( ) ;
# endif
2011-02-20 23:39:29 +00:00
# undef main
2012-03-28 05:09:50 +00:00
evil_C = C ;
2011-02-20 23:39:29 +00:00
# endif
2012-03-20 02:17:37 +00:00
2008-01-18 21:39:47 +00:00
# ifdef WITH_BINRELOC
2012-03-28 05:09:50 +00:00
br_init ( NULL ) ;
2008-01-18 15:10:17 +00:00
# endif
2011-11-07 12:55:18 +00:00
# ifdef WITH_LIBMV
libmv_initLogging ( argv [ 0 ] ) ;
# endif
2002-10-12 11:37:38 +00:00
setCallbacks ( ) ;
2012-01-16 14:13:41 +00:00
# if defined(__APPLE__) && !defined(WITH_PYTHON_MODULE)
2012-03-28 05:09:50 +00:00
/* patch to ignore argument finder gives us (pid?) */
if ( argc = = 2 & & strncmp ( argv [ 1 ] , " -psn_ " , 5 ) = = 0 ) {
2002-10-12 11:37:38 +00:00
extern int GHOST_HACK_getFirstFile ( char buf [ ] ) ;
static char firstfilebuf [ 512 ] ;
2004-01-04 22:10:36 +00:00
2012-03-28 05:09:50 +00:00
argc = 1 ;
2004-01-04 22:10:36 +00:00
2002-10-12 11:37:38 +00:00
if ( GHOST_HACK_getFirstFile ( firstfilebuf ) ) {
2012-03-28 05:09:50 +00:00
argc = 2 ;
argv [ 1 ] = firstfilebuf ;
2002-10-12 11:37:38 +00:00
}
}
2004-01-04 22:10:36 +00:00
2002-10-12 11:37:38 +00:00
# endif
# ifdef __FreeBSD__
fpsetmask ( 0 ) ;
# endif
2012-03-28 05:09:50 +00:00
/* initialize path to executable */
2011-10-21 17:37:38 +00:00
BLI_init_program_path ( argv [ 0 ] ) ;
2010-03-14 17:18:36 +00:00
2010-04-13 12:51:03 +00:00
BLI_threadapi_init ( ) ;
2012-03-28 05:09:50 +00:00
initglobals ( ) ; /* blender.c */
2002-10-12 11:37:38 +00:00
Merge image related changes from the render branch. This includes the image
tile cache code in imbuf, but it is not hooked up to the render engine.
Imbuf module: some small refactoring and removing a lot of unused or old code
(about 6.5k lines).
* Added a ImFileType struct with callbacks to make adding an file format type,
or making changes to the API easier.
* Move imbuf init/exit code into IMB_init()/IMB_exit() functions.
* Increased mipmap levels from 10 to 20, you run into this limit already with
a 2k image.
* Removed hamx, amiga, anim5 format support.
* Removed colormap saving, only simple colormap code now for reading tga.
* Removed gen_dynlibtiff.py, editing this is almost as much work as just
editing the code directly.
* Functions removed that were only used for sequencer plugin API:
IMB_anim_nextpic, IMB_clever_double, IMB_antialias, IMB_gamwarp,
IMB_scalefieldImBuf, IMB_scalefastfieldImBuf, IMB_onethird, IMB_halflace,
IMB_dit0, IMB_dit2, IMB_cspace
* Write metadata info into OpenEXR images. Can be viewed with the command
line utility 'exrheader'
For the image tile cache code, see this page:
http://wiki.blender.org/index.php/Dev:2.5/Source/Imaging/ImageTileCache
2010-05-07 15:18:04 +00:00
IMB_init ( ) ;
2012-11-15 15:59:58 +00:00
BKE_images_init ( ) ;
2013-08-19 09:05:34 +00:00
BKE_modifier_init ( ) ;
Merge image related changes from the render branch. This includes the image
tile cache code in imbuf, but it is not hooked up to the render engine.
Imbuf module: some small refactoring and removing a lot of unused or old code
(about 6.5k lines).
* Added a ImFileType struct with callbacks to make adding an file format type,
or making changes to the API easier.
* Move imbuf init/exit code into IMB_init()/IMB_exit() functions.
* Increased mipmap levels from 10 to 20, you run into this limit already with
a 2k image.
* Removed hamx, amiga, anim5 format support.
* Removed colormap saving, only simple colormap code now for reading tga.
* Removed gen_dynlibtiff.py, editing this is almost as much work as just
editing the code directly.
* Functions removed that were only used for sequencer plugin API:
IMB_anim_nextpic, IMB_clever_double, IMB_antialias, IMB_gamwarp,
IMB_scalefieldImBuf, IMB_scalefastfieldImBuf, IMB_onethird, IMB_halflace,
IMB_dit0, IMB_dit2, IMB_cspace
* Write metadata info into OpenEXR images. Can be viewed with the command
line utility 'exrheader'
For the image tile cache code, see this page:
http://wiki.blender.org/index.php/Dev:2.5/Source/Imaging/ImageTileCache
2010-05-07 15:18:04 +00:00
2013-03-24 12:13:13 +00:00
BKE_brush_system_init ( ) ;
2012-05-05 00:23:55 +00:00
BLI_callback_global_init ( ) ;
2011-06-24 16:54:30 +00:00
2010-10-31 03:20:33 +00:00
# ifdef WITH_GAMEENGINE
2002-10-12 11:37:38 +00:00
syshandle = SYS_GetSystem ( ) ;
2010-10-31 00:56:46 +00:00
# else
2012-03-28 05:09:50 +00:00
syshandle = 0 ;
2010-10-31 00:56:46 +00:00
# endif
2002-10-12 11:37:38 +00:00
2003-04-30 13:22:26 +00:00
/* first test for background */
2012-06-15 21:19:05 +00:00
# ifndef WITH_PYTHON_MODULE
2012-04-14 11:58:52 +00:00
ba = BLI_argsInit ( argc , ( const char * * ) argv ) ; /* skip binary path */
2010-02-01 01:43:31 +00:00
setupArguments ( C , ba , & syshandle ) ;
2003-12-24 16:44:24 +00:00
2010-02-01 01:43:31 +00:00
BLI_argsParse ( ba , 1 , NULL , NULL ) ;
2002-10-12 11:37:38 +00:00
2013-01-10 16:37:48 +00:00
if ( use_crash_handler ) {
/* after parsing args */
signal ( SIGSEGV , blender_crash_handler ) ;
}
2013-02-06 13:07:45 +00:00
# else
2013-02-07 02:50:35 +00:00
G . factory_startup = true ; /* using preferences or user startup makes no sense for py-as-module */
2013-02-06 13:07:45 +00:00
( void ) syshandle ;
# endif
2012-08-06 16:07:11 +00:00
2013-04-29 16:03:21 +00:00
# ifdef WITH_FFMPEG
IMB_ffmpeg_init ( ) ;
# endif
2012-08-06 16:07:11 +00:00
/* after level 1 args, this is so playanim skips RNA init */
RNA_init ( ) ;
RE_engines_init ( ) ;
init_nodesystem ( ) ;
/* end second init */
2011-06-04 14:12:55 +00:00
# if defined(WITH_PYTHON_MODULE) || defined(WITH_HEADLESS)
2013-02-01 08:24:18 +00:00
G . background = true ; /* python module mode ALWAYS runs in background mode (for now) */
2011-02-20 23:39:29 +00:00
# else
2003-07-19 20:14:07 +00:00
/* for all platforms, even windos has it! */
2013-02-01 08:24:18 +00:00
if ( G . background ) {
signal ( SIGINT , blender_esc ) ; /* ctrl c out bg render */
}
2011-02-20 23:39:29 +00:00
# endif
2012-12-11 22:00:22 +00:00
2007-04-12 06:21:31 +00:00
/* background render uses this font too */
2012-08-11 15:24:31 +00:00
BKE_vfont_builtin_register ( datatoc_bfont_pfb , datatoc_bfont_pfb_size ) ;
2010-04-24 16:35:16 +00:00
2012-03-18 07:38:51 +00:00
/* Initialize ffmpeg if built in, also needed for bg mode if videos are
2012-03-09 18:28:30 +00:00
* rendered via ffmpeg */
2010-04-24 16:35:16 +00:00
sound_init_once ( ) ;
Giant commit!
A full detailed description of this will be done later... is several days
of work. Here's a summary:
Render:
- Full cleanup of render code, removing *all* globals and bad level calls
all over blender. Render module is now not called abusive anymore
- API-fied calls to rendering
- Full recode of internal render pipeline. Is now rendering tiles by
default, prepared for much smarter 'bucket' render later.
- Each thread now can render a full part
- Renders were tested with 4 threads, goes fine, apart from some lookup
tables in softshadow and AO still
- Rendering is prepared to do multiple layers and passes
- No single 32 bits trick in render code anymore, all 100% floats now.
Writing images/movies
- moved writing images to blender kernel (bye bye 'schrijfplaatje'!)
- made a new Movie handle system, also in kernel. This will enable much
easier use of movies in Blender
PreviewRender:
- Using new render API, previewrender (in buttons) now uses regular render
code to generate images.
- new datafile 'preview.blend.c' has the preview scenes in it
- previews get rendered in exact displayed size (1 pixel = 1 pixel)
3D Preview render
- new; press Pkey in 3d window, for a panel that continuously renders
(pkey is for games, i know... but we dont do that in orange now!)
- this render works nearly identical to buttons-preview render, so it stops
rendering on any event (mouse, keyboard, etc)
- on moving/scaling the panel, the render code doesn't recreate all geometry
- same for shifting/panning view
- all other operations (now) regenerate the full render database still.
- this is WIP... but big fun, especially for simple scenes!
Compositor
- Using same node system as now in use for shaders, you can composit images
- works pretty straightforward... needs much more options/tools and integration
with rendering still
- is not threaded yet, nor is so smart to only recalculate changes... will be
done soon!
- the "Render Result" node will get all layers/passes as output sockets
- The "Output" node renders to a builtin image, which you can view in the Image
window. (yes, output nodes to render-result, and to files, is on the list!)
The Bad News
- "Unified Render" is removed. It might come back in some stage, but this
system should be built from scratch. I can't really understand this code...
I expect it is not much needed, especially with advanced layer/passes
control
- Panorama render, Field render, Motion blur, is not coded yet... (I had to
recode every single feature in render, so...!)
- Lens Flare is also not back... needs total revision, might become composit
effect though (using zbuffer for visibility)
- Part render is gone! (well, thats obvious, its default now).
- The render window is only restored with limited functionality... I am going
to check first the option to render to a Image window, so Blender can become
a true single-window application. :)
For example, the 'Spare render buffer' (jkey) doesnt work.
- Render with border, now default creates a smaller image
- No zbuffers are written yet... on the todo!
- Scons files and MSVC will need work to get compiling again
OK... thats what I can quickly recall. Now go compiling!
2006-01-23 22:05:47 +00:00
init_def_material ( ) ;
2004-01-04 22:10:36 +00:00
2012-03-28 05:09:50 +00:00
if ( G . background = = 0 ) {
2012-06-15 21:19:05 +00:00
# ifndef WITH_PYTHON_MODULE
2010-02-01 01:43:31 +00:00
BLI_argsParse ( ba , 2 , NULL , NULL ) ;
BLI_argsParse ( ba , 3 , NULL , NULL ) ;
2012-06-15 21:19:05 +00:00
# endif
2012-04-14 11:58:52 +00:00
WM_init ( C , argc , ( const char * * ) argv ) ;
2011-01-19 09:13:24 +00:00
2010-03-16 17:23:20 +00:00
/* this is properly initialized with user defs, but this is default */
2011-10-21 17:37:38 +00:00
/* call after loading the startup.blend so we can read U.tempdir */
BLI_init_temporary_dir ( U . tempdir ) ;
2002-10-12 11:37:38 +00:00
}
else {
2012-06-15 21:19:05 +00:00
# ifndef WITH_PYTHON_MODULE
2010-02-01 01:43:31 +00:00
BLI_argsParse ( ba , 3 , NULL , NULL ) ;
2012-06-15 21:19:05 +00:00
# endif
2009-11-11 04:08:09 +00:00
2012-04-14 11:58:52 +00:00
WM_init ( C , argc , ( const char * * ) argv ) ;
2009-11-11 04:08:09 +00:00
2011-10-21 17:37:38 +00:00
/* don't use user preferences temp dir */
BLI_init_temporary_dir ( NULL ) ;
2002-10-12 11:37:38 +00:00
}
2010-10-31 04:11:39 +00:00
# ifdef WITH_PYTHON
New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
Thanks to them for the new contributions!
(I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'. Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work. G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A). Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode. It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender. Loading after the program is up has no such problems. When I finish I'll post examples of demo mode scripts.
2004-07-03 05:17:04 +00:00
/**
2009-09-18 22:25:49 +00:00
* NOTE : the U . pythondir string is NULL until WM_init ( ) is executed ,
New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
Thanks to them for the new contributions!
(I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'. Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work. G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A). Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode. It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender. Loading after the program is up has no such problems. When I finish I'll post examples of demo mode scripts.
2004-07-03 05:17:04 +00:00
* so we provide the BPY_ function below to append the user defined
2012-03-03 11:45:08 +00:00
* python - dir to Python ' s sys . path at this point . Simply putting
* WM_init ( ) before # BPY_python_start ( ) crashes Blender at startup .
New scripts:
- hotkeys, obdatacopier and renameobjectbyblock, all from Jean-Michel Soler (jms);
- bevel_center by Loic Berthe, suggested for inclusion by jms;
- doc_browser, by Daniel Dunbar (Zr)
Thanks to them for the new contributions!
(I included doc_browser at 'Misc' because only users interested in script writing would actually use it, but it could also be under 'Help'. Opinions?)
BPython related:
- Added scriptlink methods to object, lamp, camera and world.
- Object: added object.makeTrack and object.clearTrack (old track method).
- sys: made sys.exists(path) return 0 for not found; 1 for file, 2 for dir and -1 for neither.
- doc updates and fixes.
- made ONLOAD event work. G.f's SCENESCRIPT bit was being zeroed in set_app_data.
- Blender: updated functions Load and Save to support the builtin importers and exporters besides .blend (dxf, videoscape, vrml 1.0, stl, ...)
- Draw: added mouse wheel events.
- Scene: added scene.play to play back animations (like ALT+A and SHIFT+ALT+A). Makes a good counter, too, when the 'win' attribute is set to a space that doesn't "animate".
The scene.play() addition and the fix to ONLOAD scriptlinks is part of the work for a Blender demo mode. It already works, but I'll still add support for Radiosity calculations and fix a thing in main(): it executes onload scripts too early (BIF_Init), giving funny results in alt+a animations and renderings when firing up Blender. Loading after the program is up has no such problems. When I finish I'll post examples of demo mode scripts.
2004-07-03 05:17:04 +00:00
*/
2010-03-16 17:37:34 +00:00
2012-07-06 23:56:59 +00:00
/* TODO - U.pythondir */
2010-11-04 13:13:31 +00:00
# else
printf ( " \n * WARNING * - Blender compiled without Python! \n this is not intended for typical usage \n \n " ) ;
2008-10-28 18:47:13 +00:00
# endif
2009-09-18 22:25:49 +00:00
CTX_py_init_set ( C , 1 ) ;
2009-11-13 09:28:05 +00:00
WM_keymap_init ( C ) ;
2009-09-18 22:25:49 +00:00
2012-12-20 07:57:26 +00:00
# ifdef WITH_FREESTYLE
2009-11-10 00:03:31 +00:00
/* initialize Freestyle */
FRS_initialize ( ) ;
FRS_set_context ( C ) ;
2012-12-20 07:57:26 +00:00
# endif
2009-11-10 00:03:31 +00:00
2003-09-09 21:26:34 +00:00
/* OK we are ready for it */
2012-06-15 21:19:05 +00:00
# ifndef WITH_PYTHON_MODULE
2010-02-01 01:43:31 +00:00
BLI_argsParse ( ba , 4 , load_file , C ) ;
2013-04-13 12:03:20 +00:00
if ( G . background = = 0 ) {
if ( ! G . file_loaded )
if ( U . uiflag2 & USER_KEEP_SESSION )
WM_recover_last_session ( C , NULL ) ;
}
2012-06-15 21:19:05 +00:00
# endif
2002-10-12 11:37:38 +00:00
2012-06-15 21:19:05 +00:00
# ifndef WITH_PYTHON_MODULE
2010-02-01 01:43:31 +00:00
BLI_argsFree ( ba ) ;
2012-06-15 21:19:05 +00:00
# endif
2010-01-27 11:18:55 +00:00
2012-03-20 02:17:37 +00:00
# ifdef WIN32
2012-05-01 20:08:23 +00:00
while ( argci ) {
2012-03-20 02:17:37 +00:00
free ( argv [ - - argci ] ) ;
}
2013-10-10 11:58:01 +00:00
free ( argv ) ;
2012-03-20 02:17:37 +00:00
argv = NULL ;
# endif
2011-02-20 23:39:29 +00:00
# ifdef WITH_PYTHON_MODULE
return 0 ; /* keep blender in background mode running */
# endif
2012-03-06 18:40:15 +00:00
if ( G . background ) {
Giant commit!
A full detailed description of this will be done later... is several days
of work. Here's a summary:
Render:
- Full cleanup of render code, removing *all* globals and bad level calls
all over blender. Render module is now not called abusive anymore
- API-fied calls to rendering
- Full recode of internal render pipeline. Is now rendering tiles by
default, prepared for much smarter 'bucket' render later.
- Each thread now can render a full part
- Renders were tested with 4 threads, goes fine, apart from some lookup
tables in softshadow and AO still
- Rendering is prepared to do multiple layers and passes
- No single 32 bits trick in render code anymore, all 100% floats now.
Writing images/movies
- moved writing images to blender kernel (bye bye 'schrijfplaatje'!)
- made a new Movie handle system, also in kernel. This will enable much
easier use of movies in Blender
PreviewRender:
- Using new render API, previewrender (in buttons) now uses regular render
code to generate images.
- new datafile 'preview.blend.c' has the preview scenes in it
- previews get rendered in exact displayed size (1 pixel = 1 pixel)
3D Preview render
- new; press Pkey in 3d window, for a panel that continuously renders
(pkey is for games, i know... but we dont do that in orange now!)
- this render works nearly identical to buttons-preview render, so it stops
rendering on any event (mouse, keyboard, etc)
- on moving/scaling the panel, the render code doesn't recreate all geometry
- same for shifting/panning view
- all other operations (now) regenerate the full render database still.
- this is WIP... but big fun, especially for simple scenes!
Compositor
- Using same node system as now in use for shaders, you can composit images
- works pretty straightforward... needs much more options/tools and integration
with rendering still
- is not threaded yet, nor is so smart to only recalculate changes... will be
done soon!
- the "Render Result" node will get all layers/passes as output sockets
- The "Output" node renders to a builtin image, which you can view in the Image
window. (yes, output nodes to render-result, and to files, is on the list!)
The Bad News
- "Unified Render" is removed. It might come back in some stage, but this
system should be built from scratch. I can't really understand this code...
I expect it is not much needed, especially with advanced layer/passes
control
- Panorama render, Field render, Motion blur, is not coded yet... (I had to
recode every single feature in render, so...!)
- Lens Flare is also not back... needs total revision, might become composit
effect though (using zbuffer for visibility)
- Part render is gone! (well, thats obvious, its default now).
- The render window is only restored with limited functionality... I am going
to check first the option to render to a Image window, so Blender can become
a true single-window application. :)
For example, the 'Spare render buffer' (jkey) doesnt work.
- Render with border, now default creates a smaller image
- No zbuffers are written yet... on the todo!
- Scons files and MSVC will need work to get compiling again
OK... thats what I can quickly recall. Now go compiling!
2006-01-23 22:05:47 +00:00
/* actually incorrect, but works for now (ton) */
2009-09-18 22:25:49 +00:00
WM_exit ( C ) ;
2002-10-12 11:37:38 +00:00
}
2010-03-05 10:37:55 +00:00
else {
2013-06-10 00:42:16 +00:00
if ( G . fileflags & G_FILE_AUTOPLAY ) {
if ( G . f & G_SCRIPT_AUTOEXEC ) {
if ( WM_init_game ( C ) ) {
return 0 ;
}
}
else {
if ( ! ( G . f & G_SCRIPT_AUTOEXEC_FAIL_QUIET ) ) {
G . f | = G_SCRIPT_AUTOEXEC_FAIL ;
BLI_snprintf ( G . autoexec_fail , sizeof ( G . autoexec_fail ) , " Game AutoStart " ) ;
}
}
2010-08-16 12:14:09 +00:00
}
2013-06-10 00:42:16 +00:00
if ( ! G . file_loaded ) {
2010-03-05 10:37:55 +00:00
WM_init_splash ( C ) ;
2012-03-07 04:53:43 +00:00
}
2010-03-05 10:37:55 +00:00
}
2009-09-18 22:25:49 +00:00
WM_main ( C ) ;
2009-11-23 13:58:55 +00:00
2002-10-12 11:37:38 +00:00
return 0 ;
2012-12-29 01:54:58 +00:00
} /* end of int main(argc, argv) */
2002-10-12 11:37:38 +00:00
2011-07-10 18:54:02 +00:00
# ifdef WITH_PYTHON_MODULE
void main_python_exit ( void )
{
WM_exit ( ( bContext * ) evil_C ) ;
2012-03-28 05:09:50 +00:00
evil_C = NULL ;
2011-07-10 18:54:02 +00:00
}
# endif
2010-02-16 16:47:41 +00:00
static void mem_error_cb ( const char * errorStr )
2005-07-22 16:40:26 +00:00
{
2009-09-18 22:25:49 +00:00
fputs ( errorStr , stderr ) ;
2007-07-11 18:45:39 +00:00
fflush ( stderr ) ;
2005-07-22 16:40:26 +00:00
}
2008-09-29 17:08:11 +00:00
static void setCallbacks ( void )
2002-10-12 11:37:38 +00:00
{
/* Error output from the alloc routines: */
2005-07-22 16:40:26 +00:00
MEM_set_error_callback ( mem_error_cb ) ;
2002-10-12 11:37:38 +00:00
}