2004-01-04 22:10:36 +00:00
|
|
|
/*
|
2002-10-12 11:37:38 +00:00
|
|
|
* $Id$
|
|
|
|
*
|
2008-01-07 19:13:47 +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-01-07 19:13:47 +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-01-07 19:13:47 +00:00
|
|
|
* ***** END GPL LICENSE BLOCK *****
|
2002-10-12 11:37:38 +00:00
|
|
|
*/
|
2010-02-08 13:55:31 +00:00
|
|
|
|
|
|
|
#if defined(__linux__) && defined(__GNUC__)
|
|
|
|
#define _GNU_SOURCE
|
|
|
|
#include <fenv.h>
|
|
|
|
#endif
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
#include <stdlib.h>
|
2003-10-10 13:36:38 +00:00
|
|
|
#include <string.h>
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2008-12-14 17:32:24 +00:00
|
|
|
/* for setuid / getuid */
|
|
|
|
#ifdef __sgi
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#endif
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
/* This little block needed for linking to Blender... */
|
|
|
|
|
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
|
|
|
|
#ifdef WIN32
|
|
|
|
#include "BLI_winstuff.h"
|
|
|
|
#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"
|
2010-02-01 01:43:31 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
#include "GEN_messaging.h"
|
|
|
|
|
|
|
|
#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"
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
#include "BLI_blenlib.h"
|
|
|
|
|
|
|
|
#include "BKE_utildefines.h"
|
|
|
|
#include "BKE_blender.h"
|
2008-12-18 02:56:48 +00:00
|
|
|
#include "BKE_context.h"
|
2003-11-25 18:14:00 +00:00
|
|
|
#include "BKE_font.h"
|
2002-10-12 11:37:38 +00:00
|
|
|
#include "BKE_global.h"
|
|
|
|
#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"
|
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"
|
2008-12-29 13:38:08 +00:00
|
|
|
#include "BKE_report.h"
|
2009-12-07 20:39:57 +00:00
|
|
|
#include "BKE_sound.h"
|
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
|
|
|
#include "IMB_imbuf.h" // for IMB_init
|
2003-09-09 21:26:34 +00:00
|
|
|
|
2008-10-28 18:47:13 +00:00
|
|
|
#ifndef DISABLE_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
|
|
|
|
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"
|
|
|
|
|
2008-01-01 19:20:49 +00:00
|
|
|
//XXX #include "playanim_ext.h"
|
2008-12-21 11:05:43 +00:00
|
|
|
#include "ED_datafiles.h"
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2007-12-24 18:58:12 +00:00
|
|
|
#include "WM_api.h"
|
|
|
|
|
2009-06-19 23:05:21 +00:00
|
|
|
#include "RNA_define.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
|
|
|
#include "GPU_draw.h"
|
2008-10-12 18:32:26 +00:00
|
|
|
#include "GPU_extensions.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
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
/* for passing information between creator and gameengine */
|
|
|
|
#include "SYS_System.h"
|
|
|
|
|
|
|
|
#include <signal.h>
|
2003-07-19 20:14:07 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
#ifdef __FreeBSD__
|
2003-10-05 19:37:16 +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
|
2008-01-18 15:10:17 +00:00
|
|
|
#include "binreloc.h"
|
|
|
|
#endif
|
|
|
|
|
2002-10-12 11:37:38 +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[];
|
|
|
|
extern char build_rev[];
|
|
|
|
extern char build_platform[];
|
|
|
|
extern char build_type[];
|
2006-04-17 19:20:02 +00:00
|
|
|
#endif
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
/* Local Function prototypes */
|
2010-02-01 01:43:31 +00:00
|
|
|
static int print_help(int argc, char **argv, void *data);
|
|
|
|
static int print_version(int argc, char **argv, void *data);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
/* for the callbacks: */
|
|
|
|
|
|
|
|
extern int pluginapi_force_ref(void); /* from blenpluginapi:pluginapi.c */
|
|
|
|
|
2003-06-18 03:48:55 +00:00
|
|
|
char bprogname[FILE_MAXDIR+FILE_MAXFILE]; /* from blenpluginapi:pluginapi.c */
|
2008-02-13 13:55:22 +00:00
|
|
|
char btempdir[FILE_MAXDIR+FILE_MAXFILE];
|
2004-07-27 20:40:42 +00:00
|
|
|
|
2009-09-21 03:16:26 +00:00
|
|
|
/* unix path support.
|
|
|
|
* defined by the compiler. eg "/usr/share/blender/2.5" "/opt/blender/2.5" */
|
|
|
|
#ifndef BLENDERPATH
|
|
|
|
#define BLENDERPATH ""
|
|
|
|
#endif
|
|
|
|
|
|
|
|
char blender_path[FILE_MAXDIR+FILE_MAXFILE] = BLENDERPATH;
|
|
|
|
|
2003-06-18 03:48:55 +00:00
|
|
|
/* Initialise 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
|
|
|
|
2010-02-03 15:50:08 +00:00
|
|
|
/* on linux set breakpoints here when running in debug mode, useful to catch floating point errors */
|
|
|
|
#if defined(__sgi) || defined(__linux__)
|
2002-10-12 11:37:38 +00:00
|
|
|
static void fpe_handler(int sig)
|
|
|
|
{
|
|
|
|
// 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 */
|
|
|
|
static void blender_esc(int sig)
|
|
|
|
{
|
|
|
|
static int count = 0;
|
|
|
|
|
|
|
|
G.afbreek = 1; /* forces render loop to read queue, not sure if its needed */
|
|
|
|
|
|
|
|
if (sig == 2) {
|
|
|
|
if (count) {
|
|
|
|
printf("\nBlender killed\n");
|
|
|
|
exit(2);
|
|
|
|
}
|
|
|
|
printf("\nSent an internal break event. Press ^C again to kill Blender\n");
|
|
|
|
count++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-03-14 17:18:36 +00:00
|
|
|
/* buildinfo can have quotes */
|
merge own commits into render branch into trunk since 27560
27562, 27570, 27571, 27574, 27576, 27577, 27579, 27590, 27591, 27594, 27595, 27596, 27599, 27605, 27611, 27612, 27613, 27614, 27623
2010-03-20 16:41:01 +00:00
|
|
|
#ifdef BUILD_DATE
|
2010-03-14 17:18:36 +00:00
|
|
|
static void strip_quotes(char *str)
|
|
|
|
{
|
|
|
|
if(str[0] == '"') {
|
|
|
|
int len= strlen(str) - 1;
|
|
|
|
memmove(str, str+1, len);
|
|
|
|
if(str[len-1] == '"') {
|
|
|
|
str[len-1]= '\0';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
merge own commits into render branch into trunk since 27560
27562, 27570, 27571, 27574, 27576, 27577, 27579, 27590, 27591, 27594, 27595, 27596, 27599, 27605, 27611, 27612, 27613, 27614, 27623
2010-03-20 16:41:01 +00:00
|
|
|
#endif
|
2010-03-14 17:18:36 +00:00
|
|
|
|
2010-02-01 01:43:31 +00:00
|
|
|
static int print_version(int argc, char **argv, void *data)
|
2003-12-24 16:44:24 +00:00
|
|
|
{
|
2006-04-17 19:20:02 +00:00
|
|
|
#ifdef BUILD_DATE
|
2008-12-19 19:11:02 +00:00
|
|
|
printf ("Blender %d.%02d (sub %d) Build\n", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION);
|
2006-03-19 16:25:32 +00:00
|
|
|
printf ("\tbuild date: %s\n", build_date);
|
|
|
|
printf ("\tbuild time: %s\n", build_time);
|
2007-11-15 12:16:03 +00:00
|
|
|
printf ("\tbuild revision: %s\n", build_rev);
|
2006-03-19 16:25:32 +00:00
|
|
|
printf ("\tbuild platform: %s\n", build_platform);
|
|
|
|
printf ("\tbuild type: %s\n", build_type);
|
2006-04-17 19:20:02 +00:00
|
|
|
#else
|
2008-12-19 19:11:02 +00:00
|
|
|
printf ("Blender %d.%02d (sub %d) Build\n", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION);
|
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
|
|
|
|
2010-02-01 01:43:31 +00:00
|
|
|
static int print_help(int argc, char **argv, void *data)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
2008-12-19 19:11:02 +00:00
|
|
|
printf ("Blender %d.%02d (sub %d) Build\n", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION);
|
2008-03-03 08:55:45 +00:00
|
|
|
printf ("Usage: blender [args ...] [file] [args ...]\n");
|
2003-07-03 13:53:11 +00:00
|
|
|
printf ("\nRender options:\n");
|
2010-03-14 18:08:12 +00:00
|
|
|
printf (" -b <file>\tLoad <file> in background (often used for background rendering)\n");
|
2008-01-03 14:53:44 +00:00
|
|
|
printf (" -a render frames from start to end (inclusive), only works when used after -b\n");
|
2004-01-04 22:10:36 +00:00
|
|
|
printf (" -S <name>\tSet scene <name>\n");
|
2003-07-03 13:53:11 +00:00
|
|
|
printf (" -f <frame>\tRender frame <frame> and save it\n");
|
2008-03-03 08:55:45 +00:00
|
|
|
printf (" -s <frame>\tSet start to frame <frame> (use before the -a argument)\n");
|
|
|
|
printf (" -e <frame>\tSet end to frame <frame> (use before the -a argument)\n");
|
2006-03-19 16:25:32 +00:00
|
|
|
printf (" -o <path>\tSet the render path and file name.\n");
|
|
|
|
printf (" Use // at the start of the path to\n");
|
|
|
|
printf (" render relative to the blend file.\n");
|
2008-04-12 10:55:10 +00:00
|
|
|
printf (" The # characters are replaced by the frame number, and used to define zero padding.\n");
|
|
|
|
printf (" ani_##_test.png becomes ani_01_test.png\n");
|
|
|
|
printf (" test-######.png becomes test-000001.png\n");
|
|
|
|
printf (" When the filename has no #, The suffix #### is added to the filename\n");
|
2007-05-20 21:30:29 +00:00
|
|
|
printf (" The frame number will be added at the end of the filename.\n");
|
2008-01-03 14:53:44 +00:00
|
|
|
printf (" eg: blender -b foobar.blend -o //render_ -F PNG -x 1 -a\n");
|
2009-08-17 20:04:28 +00:00
|
|
|
printf (" -E <engine>\tSpecify the render engine.\n");
|
|
|
|
printf (" use -E help to list available engines.\n");
|
2008-01-03 14:53:44 +00:00
|
|
|
printf ("\nFormat options:\n");
|
|
|
|
printf (" -F <format>\tSet the render format, Valid options are...\n");
|
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
|
|
|
printf (" \tTGA IRIS JPEG MOVIE IRIZ RAWTGA\n");
|
2006-03-20 16:24:00 +00:00
|
|
|
printf (" \tAVIRAW AVIJPEG PNG BMP FRAMESERVER\n");
|
|
|
|
printf (" (formats that can be compiled into blender, not available on all systems)\n");
|
2008-02-05 19:31:21 +00:00
|
|
|
printf (" \tHDR TIFF EXR MULTILAYER MPEG AVICODEC QUICKTIME CINEON DPX DDS\n");
|
2006-03-19 16:25:32 +00:00
|
|
|
printf (" -x <bool>\tSet option to add the file extension to the end of the file.\n");
|
2008-06-23 16:47:15 +00:00
|
|
|
printf (" -t <threads>\tUse amount of <threads> for rendering (background mode only).\n");
|
2008-02-19 22:23:21 +00:00
|
|
|
printf (" [1-8], 0 for systems processor count.\n");
|
2008-01-03 14:53:44 +00:00
|
|
|
printf ("\nAnimation playback options:\n");
|
2008-12-14 17:32:24 +00:00
|
|
|
printf (" -a <options> <file(s)>\tPlayback <file(s)>, only operates this way when -b is not used.\n");
|
2003-07-03 13:53:11 +00:00
|
|
|
printf (" -p <sx> <sy>\tOpen with lower left corner at <sx>, <sy>\n");
|
|
|
|
printf (" -m\t\tRead from disk (Don't buffer)\n");
|
2007-12-23 17:27:06 +00:00
|
|
|
printf (" -f <fps> <fps-base>\t\tSpecify FPS to start with\n");
|
2008-09-19 21:57:15 +00:00
|
|
|
printf (" -j <frame>\tSet frame step to <frame>\n");
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-07-03 13:53:11 +00:00
|
|
|
printf ("\nWindow options:\n");
|
2007-04-12 06:21:31 +00:00
|
|
|
printf (" -w\t\tForce opening with borders (default)\n");
|
2003-07-03 13:53:11 +00:00
|
|
|
printf (" -W\t\tForce opening without borders\n");
|
|
|
|
printf (" -p <sx> <sy> <w> <h>\tOpen with lower left corner at <sx>, <sy>\n");
|
|
|
|
printf (" \tand width and height <w>, <h>\n");
|
|
|
|
printf ("\nGame Engine specific options:\n");
|
|
|
|
printf (" -g fixedtime\t\tRun on 50 hertz without dropping frames\n");
|
|
|
|
printf (" -g vertexarrays\tUse Vertex Arrays for rendering (usually faster)\n");
|
|
|
|
printf (" -g nomipmap\t\tNo Texture Mipmapping\n");
|
|
|
|
printf (" -g linearmipmap\tLinear Texture Mipmapping instead of Nearest (default)\n");
|
2004-01-04 22:10:36 +00:00
|
|
|
|
2003-07-03 13:53:11 +00:00
|
|
|
printf ("\nMisc options:\n");
|
|
|
|
printf (" -d\t\tTurn debugging on\n");
|
2010-03-08 12:29:58 +00:00
|
|
|
printf (" \t\t * prints every operator call and their arguments\n");
|
|
|
|
printf (" \t\t * disables mouse grab (to interact with a debugger in some cases)\n");
|
|
|
|
printf (" \t\t * keeps python sys.stdin rather then setting it to None\n");
|
2008-09-28 03:07:13 +00:00
|
|
|
printf (" -nojoystick\tDisable joystick support\n");
|
2008-10-12 18:32:26 +00:00
|
|
|
printf (" -noglsl\tDisable GLSL shading\n");
|
2009-12-07 20:39:57 +00:00
|
|
|
printf (" -noaudio\tForce sound system to None\n");
|
2010-01-31 18:32:19 +00:00
|
|
|
printf (" -setaudio\tForce sound system to a specific device\n");
|
|
|
|
printf (" \tNULL SDL OPENAL JACK\n");
|
2003-07-03 13:53:11 +00:00
|
|
|
printf (" -h\t\tPrint this help text\n");
|
2009-07-22 10:12:00 +00:00
|
|
|
printf (" -y\t\tDisable automatic python script execution (pydrivers, pyconstraints, pynodes)\n");
|
2010-04-28 08:02:51 +00:00
|
|
|
printf (" -Y\t\tEnable automatic python script execution\n");
|
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
|
|
|
printf (" -P <filename>\tRun the given Python script (filename or Blender Text)\n");
|
2002-10-12 11:37:38 +00:00
|
|
|
#ifdef WIN32
|
2003-07-03 13:53:11 +00:00
|
|
|
printf (" -R\t\tRegister .blend extension\n");
|
2002-10-12 11:37:38 +00:00
|
|
|
#endif
|
2003-12-24 16:44:24 +00:00
|
|
|
printf (" -v\t\tPrint Blender version and exit\n");
|
2007-08-18 00:02:50 +00:00
|
|
|
printf (" --\t\tEnds option processing. Following arguments are \n");
|
|
|
|
printf (" \t\t passed unchanged. Access via Python's sys.argv\n");
|
2008-04-17 21:14:55 +00:00
|
|
|
printf ("\nEnvironment Variables:\n");
|
2008-04-12 22:17:23 +00:00
|
|
|
printf (" $HOME\t\t\tStore files such as .blender/ .B.blend .Bfs .Blog here.\n");
|
2009-09-21 03:16:26 +00:00
|
|
|
printf (" $BLENDERPATH\tSystem directory to use for data files and scripts.\n");
|
|
|
|
printf (" \tFor this build of blender the default BLENDERPATH is...\n");
|
|
|
|
printf (" \t\"%s\"\n", blender_path);
|
|
|
|
printf (" \tseting the $BLENDERPATH will override this\n");
|
2008-04-12 22:17:23 +00:00
|
|
|
#ifdef WIN32
|
|
|
|
printf (" $TEMP\t\tStore temporary files here.\n");
|
|
|
|
#else
|
|
|
|
printf (" $TMP or $TMPDIR\tStore temporary files here.\n");
|
|
|
|
printf (" $BF_TIFF_LIB\t\tUse an alternative libtiff.so for loading tiff image files.\n");
|
2008-10-19 06:12:11 +00:00
|
|
|
#endif
|
|
|
|
#ifndef DISABLE_SDL
|
|
|
|
printf (" $SDL_AUDIODRIVER\tLibSDL audio driver - alsa, esd, alsa, dma.\n");
|
2008-04-12 22:17:23 +00:00
|
|
|
#endif
|
|
|
|
printf (" $IMAGEEDITOR\t\tImage editor executable, launch with the IKey from the file selector.\n");
|
|
|
|
printf (" $WINEDITOR\t\tText editor executable, launch with the EKey from the file selector.\n");
|
|
|
|
printf (" $PYTHONHOME\t\tPath to the python directory, eg. /usr/lib/python.\n");
|
2008-03-03 13:34:31 +00:00
|
|
|
printf ("\nNote: Arguments must be separated by white space. eg:\n");
|
2008-03-03 08:55:45 +00:00
|
|
|
printf (" \"blender -ba test.blend\"\n");
|
|
|
|
printf (" ...will ignore the 'a'\n");
|
|
|
|
printf (" \"blender -b test.blend -f8\"\n");
|
|
|
|
printf (" ...will ignore 8 because there is no space between the -f and the frame value\n");
|
|
|
|
printf ("Note: Arguments are executed in the order they are given. eg:\n");
|
|
|
|
printf (" \"blender -b test.blend -f 1 -o /tmp\"\n");
|
|
|
|
printf (" ...may not render to /tmp because '-f 1' renders before the output path is set\n");
|
|
|
|
printf (" \"blender -b -o /tmp test.blend -f 1\"\n");
|
|
|
|
printf (" ...may not render to /tmp because loading the blend file overwrites the output path that was set\n");
|
|
|
|
printf (" \"blender -b test.blend -o /tmp -f 1\" works as expected.\n\n");
|
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
|
|
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
double PIL_check_seconds_timer(void);
|
2004-08-01 22:28:56 +00:00
|
|
|
|
Merge of trunk into blender 2.5:
svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r12987:17416
Issues:
* GHOST/X11 had conflicting changes. Some code was added in 2.5, which was
later added in trunk also, but reverted partially, specifically revision
16683. I have left out this reversion in the 2.5 branch since I think it is
needed there.
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16683
* Scons had various conflicting changes, I decided to go with trunk version
for everything except priorities and some library renaming.
* In creator.c, there were various fixes and fixes for fixes related to the -w
-W and -p options. In 2.5 -w and -W is not coded yet, and -p is done
differently. Since this is changed so much, and I don't think those fixes
would be needed in 2.5, I've left them out.
* Also in creator.c: there was code for a python bugfix where the screen was not
initialized when running with -P. The code that initializes the screen there
I had to disable, that can't work in 2.5 anymore but left it commented as a
reminder.
Further I had to disable some new function calls. using src/ and python/, as
was done already in this branch, disabled function calls:
* bpath.c: error reporting
* BME_conversions.c: editmesh conversion functions.
* SHD_dynamic: disabled almost completely, there is no python/.
* KX_PythonInit.cpp and Ketsji/ build files: Mathutils is not there, disabled.
* text.c: clipboard copy call.
* object.c: OB_SUPPORT_MATERIAL.
* DerivedMesh.c and subsurf_ccg, stipple_quarttone.
Still to be done:
* Go over files and functions that were moved to a different location but could
still use changes that were done in trunk.
2008-11-12 21:16:53 +00:00
|
|
|
/* XXX This was here to fix a crash when running python scripts
|
|
|
|
* with -P that used the screen.
|
|
|
|
*
|
|
|
|
* static void main_init_screen( void )
|
2008-04-17 14:10:40 +00:00
|
|
|
{
|
|
|
|
setscreen(G.curscreen);
|
|
|
|
|
|
|
|
if(G.main->scene.first==0) {
|
|
|
|
set_scene( add_scene("1") );
|
|
|
|
}
|
Merge of trunk into blender 2.5:
svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r12987:17416
Issues:
* GHOST/X11 had conflicting changes. Some code was added in 2.5, which was
later added in trunk also, but reverted partially, specifically revision
16683. I have left out this reversion in the 2.5 branch since I think it is
needed there.
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16683
* Scons had various conflicting changes, I decided to go with trunk version
for everything except priorities and some library renaming.
* In creator.c, there were various fixes and fixes for fixes related to the -w
-W and -p options. In 2.5 -w and -W is not coded yet, and -p is done
differently. Since this is changed so much, and I don't think those fixes
would be needed in 2.5, I've left them out.
* Also in creator.c: there was code for a python bugfix where the screen was not
initialized when running with -P. The code that initializes the screen there
I had to disable, that can't work in 2.5 anymore but left it commented as a
reminder.
Further I had to disable some new function calls. using src/ and python/, as
was done already in this branch, disabled function calls:
* bpath.c: error reporting
* BME_conversions.c: editmesh conversion functions.
* SHD_dynamic: disabled almost completely, there is no python/.
* KX_PythonInit.cpp and Ketsji/ build files: Mathutils is not there, disabled.
* text.c: clipboard copy call.
* object.c: OB_SUPPORT_MATERIAL.
* DerivedMesh.c and subsurf_ccg, stipple_quarttone.
Still to be done:
* Go over files and functions that were moved to a different location but could
still use changes that were done in trunk.
2008-11-12 21:16:53 +00:00
|
|
|
}*/
|
2008-04-17 14:10:40 +00:00
|
|
|
|
2010-02-01 01:43:31 +00:00
|
|
|
static int end_arguments(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
2010-04-28 08:02:51 +00:00
|
|
|
static int enable_python(int argc, char **argv, void *data)
|
2010-02-01 01:43:31 +00:00
|
|
|
{
|
2010-04-28 08:02:51 +00:00
|
|
|
G.f |= G_SCRIPT_AUTOEXEC;
|
2010-02-01 01:43:31 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2010-04-28 08:02:51 +00:00
|
|
|
static int disable_python(int argc, char **argv, void *data)
|
2010-02-01 01:43:31 +00:00
|
|
|
{
|
2010-04-28 08:02:51 +00:00
|
|
|
G.f &= ~G_SCRIPT_AUTOEXEC;
|
2010-02-01 01:43:31 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int background_mode(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
G.background = 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int debug_mode(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
G.f |= G_DEBUG; /* std output printf's */
|
|
|
|
printf ("Blender %d.%02d (sub %d) Build\n", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION);
|
|
|
|
MEM_set_memory_debug();
|
|
|
|
|
|
|
|
#ifdef NAN_BUILDINFO
|
|
|
|
printf("Build: %s %s %s %s\n", build_date, build_time, build_platform, build_type);
|
|
|
|
#endif // NAN_BUILDINFO
|
|
|
|
|
|
|
|
BLI_argsPrint(data);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2010-02-03 17:48:39 +00:00
|
|
|
static int set_fpe(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
#if defined(__sgi) || defined(__linux__)
|
|
|
|
/* zealous but makes float issues a heck of a lot easier to find!
|
|
|
|
* set breakpoints on fpe_handler */
|
|
|
|
signal(SIGFPE, fpe_handler);
|
|
|
|
|
2010-02-08 13:55:31 +00:00
|
|
|
#if defined(__linux__) && defined(__GNUC__)
|
2010-02-03 17:48:39 +00:00
|
|
|
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW );
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2010-02-01 01:43:31 +00:00
|
|
|
static int playback_mode(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
/* not if -b was given first */
|
|
|
|
if (G.background == 0) {
|
|
|
|
|
|
|
|
// XXX playanim(argc, argv); /* not the same argc and argv as before */
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return -2;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int prefsize(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
int stax, stay, sizx, sizy;
|
|
|
|
|
|
|
|
if (argc < 5) {
|
|
|
|
printf ("-p requires four arguments\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
stax= atoi(argv[1]);
|
|
|
|
stay= atoi(argv[2]);
|
|
|
|
sizx= atoi(argv[3]);
|
|
|
|
sizy= atoi(argv[4]);
|
|
|
|
|
|
|
|
WM_setprefsize(stax, stay, sizx, sizy);
|
|
|
|
|
|
|
|
return 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int with_borders(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
/* with borders XXX OLD CRUFT!*/
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int without_borders(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
/* borderless, win + linux XXX OLD CRUFT */
|
|
|
|
/* XXX, fixme mein, borderless on OSX */
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int register_extension(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
#ifdef WIN32
|
|
|
|
char *path = BLI_argsArgv(data)[0];
|
|
|
|
RegisterBlendExtension(path);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int no_joystick(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
SYS_SystemHandle *syshandle = data;
|
|
|
|
|
|
|
|
/**
|
|
|
|
don't initialize joysticks if user doesn't want to use joysticks
|
|
|
|
failed joystick initialization delays over 5 seconds, before game engine start
|
|
|
|
*/
|
|
|
|
SYS_WriteCommandLineInt(*syshandle, "nojoystick",1);
|
|
|
|
if (G.f & G_DEBUG) printf("disabling nojoystick\n");
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int no_glsl(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
GPU_extensions_disable();
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int no_audio(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
sound_force_device(0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int set_audio(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
if (argc < 1) {
|
|
|
|
printf("-setaudio require one argument\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
sound_force_device(sound_define_from_str(argv[1]));
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int set_output(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
bContext *C = data;
|
|
|
|
if (argc >= 1){
|
|
|
|
if (CTX_data_scene(C)) {
|
|
|
|
Scene *scene= CTX_data_scene(C);
|
|
|
|
BLI_strncpy(scene->r.pic, argv[1], FILE_MAXDIR);
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-o'.\n");
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
printf("\nError: you must specify a path after '-o '.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static int set_engine(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
bContext *C = data;
|
|
|
|
if (argc >= 1)
|
|
|
|
{
|
|
|
|
if (!strcmp(argv[1],"help"))
|
|
|
|
{
|
|
|
|
RenderEngineType *type = NULL;
|
|
|
|
|
|
|
|
for( type = R_engines.first; type; type = type->next )
|
|
|
|
{
|
|
|
|
printf("\t%s\n", type->idname);
|
|
|
|
}
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (CTX_data_scene(C)==NULL)
|
|
|
|
{
|
|
|
|
printf("\nError: no blend loaded. order the arguments so '-E ' is after a blend is loaded.\n");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Scene *scene= CTX_data_scene(C);
|
|
|
|
RenderData *rd = &scene->r;
|
|
|
|
RenderEngineType *type = NULL;
|
|
|
|
|
|
|
|
for( type = R_engines.first; type; type = type->next )
|
|
|
|
{
|
|
|
|
if (!strcmp(argv[1],type->idname))
|
|
|
|
{
|
|
|
|
BLI_strncpy(rd->engine, type->idname, sizeof(rd->engine));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
printf("\nEngine not specified.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static int set_image_type(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
bContext *C = data;
|
|
|
|
if (argc >= 1){
|
|
|
|
char *imtype = argv[1];
|
|
|
|
if (CTX_data_scene(C)==NULL) {
|
|
|
|
printf("\nError: no blend loaded. order the arguments so '-F ' is after the blend is loaded.\n");
|
|
|
|
} else {
|
|
|
|
Scene *scene= CTX_data_scene(C);
|
|
|
|
if (!strcmp(imtype,"TGA")) scene->r.imtype = R_TARGA;
|
|
|
|
else if (!strcmp(imtype,"IRIS")) scene->r.imtype = R_IRIS;
|
|
|
|
#ifdef WITH_DDS
|
|
|
|
else if (!strcmp(imtype,"DDS")) scene->r.imtype = R_DDS;
|
|
|
|
#endif
|
|
|
|
else if (!strcmp(imtype,"JPEG")) scene->r.imtype = R_JPEG90;
|
|
|
|
else if (!strcmp(imtype,"IRIZ")) scene->r.imtype = R_IRIZ;
|
|
|
|
else if (!strcmp(imtype,"RAWTGA")) scene->r.imtype = R_RAWTGA;
|
|
|
|
else if (!strcmp(imtype,"AVIRAW")) scene->r.imtype = R_AVIRAW;
|
|
|
|
else if (!strcmp(imtype,"AVIJPEG")) scene->r.imtype = R_AVIJPEG;
|
|
|
|
else if (!strcmp(imtype,"PNG")) scene->r.imtype = R_PNG;
|
|
|
|
else if (!strcmp(imtype,"AVICODEC")) scene->r.imtype = R_AVICODEC;
|
|
|
|
else if (!strcmp(imtype,"QUICKTIME")) scene->r.imtype = R_QUICKTIME;
|
|
|
|
else if (!strcmp(imtype,"BMP")) scene->r.imtype = R_BMP;
|
|
|
|
else if (!strcmp(imtype,"HDR")) scene->r.imtype = R_RADHDR;
|
|
|
|
else if (!strcmp(imtype,"TIFF")) scene->r.imtype = R_TIFF;
|
|
|
|
#ifdef WITH_OPENEXR
|
|
|
|
else if (!strcmp(imtype,"EXR")) scene->r.imtype = R_OPENEXR;
|
|
|
|
else if (!strcmp(imtype,"MULTILAYER")) scene->r.imtype = R_MULTILAYER;
|
|
|
|
#endif
|
|
|
|
else if (!strcmp(imtype,"MPEG")) scene->r.imtype = R_FFMPEG;
|
|
|
|
else if (!strcmp(imtype,"FRAMESERVER")) scene->r.imtype = R_FRAMESERVER;
|
|
|
|
else if (!strcmp(imtype,"CINEON")) scene->r.imtype = R_CINEON;
|
|
|
|
else if (!strcmp(imtype,"DPX")) scene->r.imtype = R_DPX;
|
|
|
|
#if WITH_OPENJPEG
|
|
|
|
else if (!strcmp(imtype,"JP2")) scene->r.imtype = R_JP2;
|
|
|
|
#endif
|
|
|
|
else printf("\nError: Format from '-F' not known or not compiled in this release.\n");
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
} else {
|
2010-02-06 16:38:53 +00:00
|
|
|
printf("\nError: you must specify a format after '-F '.\n");
|
2010-02-01 01:43:31 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static int set_threads(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
if (argc >= 1) {
|
|
|
|
if(G.background) {
|
|
|
|
RE_set_max_threads(atoi(argv[1]));
|
|
|
|
} else {
|
|
|
|
printf("Warning: threads can only be set in background mode\n");
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
printf("\nError: you must specify a number of threads between 0 and 8 '-t '.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static int set_extension(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
bContext *C = data;
|
|
|
|
if (argc >= 1) {
|
|
|
|
if (CTX_data_scene(C)) {
|
|
|
|
Scene *scene= CTX_data_scene(C);
|
|
|
|
if (argv[1][0] == '0') {
|
|
|
|
scene->r.scemode &= ~R_EXTENSION;
|
|
|
|
} else if (argv[1][0] == '1') {
|
|
|
|
scene->r.scemode |= R_EXTENSION;
|
|
|
|
} else {
|
|
|
|
printf("\nError: Use '-x 1' or '-x 0' To set the extension option.\n");
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. order the arguments so '-o ' is after '-x '.\n");
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
printf("\nError: you must specify a path after '- '.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static int set_ge_parameters(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
SYS_SystemHandle syshandle = *(SYS_SystemHandle*)data;
|
|
|
|
int a = 0;
|
|
|
|
/**
|
|
|
|
gameengine parameters are automaticly put into system
|
|
|
|
-g [paramname = value]
|
|
|
|
-g [boolparamname]
|
|
|
|
example:
|
|
|
|
-g novertexarrays
|
|
|
|
-g maxvertexarraysize = 512
|
|
|
|
*/
|
|
|
|
|
|
|
|
if(argc >= 1)
|
|
|
|
{
|
|
|
|
char* paramname = argv[a];
|
|
|
|
/* check for single value versus assignment */
|
|
|
|
if (a+1 < argc && (*(argv[a+1]) == '='))
|
|
|
|
{
|
|
|
|
a++;
|
|
|
|
if (a+1 < argc)
|
|
|
|
{
|
|
|
|
a++;
|
|
|
|
/* assignment */
|
|
|
|
SYS_WriteCommandLineString(syshandle,paramname,argv[a]);
|
|
|
|
} else
|
|
|
|
{
|
|
|
|
printf("error: argument assignment (%s) without value.\n",paramname);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
/* name arg eaten */
|
|
|
|
|
|
|
|
} else {
|
|
|
|
SYS_WriteCommandLineInt(syshandle,argv[a],1);
|
|
|
|
|
|
|
|
/* doMipMap */
|
|
|
|
if (!strcmp(argv[a],"nomipmap"))
|
|
|
|
{
|
|
|
|
GPU_set_mipmap(0); //doMipMap = 0;
|
|
|
|
}
|
|
|
|
/* linearMipMap */
|
|
|
|
if (!strcmp(argv[a],"linearmipmap"))
|
|
|
|
{
|
|
|
|
GPU_set_linear_mipmap(1); //linearMipMap = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} /* if (*(argv[a+1]) == '=') */
|
|
|
|
}
|
|
|
|
|
|
|
|
return a;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int render_frame(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
bContext *C = data;
|
|
|
|
if (CTX_data_scene(C)) {
|
|
|
|
Scene *scene= CTX_data_scene(C);
|
|
|
|
|
|
|
|
if (argc > 1) {
|
|
|
|
int frame = atoi(argv[1]);
|
2010-03-27 15:35:34 +00:00
|
|
|
Render *re = RE_NewRender(scene->id.name);
|
2010-02-01 01:43:31 +00:00
|
|
|
ReportList reports;
|
|
|
|
|
|
|
|
BKE_reports_init(&reports, RPT_PRINT);
|
|
|
|
|
|
|
|
frame = MIN2(MAXFRAME, MAX2(MINAFRAME, frame));
|
|
|
|
|
2010-03-14 20:24:11 +00:00
|
|
|
RE_BlenderAnim(re, scene, scene->lay, frame, frame, scene->r.frame_step, &reports);
|
2010-02-01 01:43:31 +00:00
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
printf("\nError: frame number must follow '-f'.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-f'.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static int render_animation(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
bContext *C = data;
|
|
|
|
if (CTX_data_scene(C)) {
|
|
|
|
Scene *scene= CTX_data_scene(C);
|
2010-03-27 15:35:34 +00:00
|
|
|
Render *re= RE_NewRender(scene->id.name);
|
2010-02-01 01:43:31 +00:00
|
|
|
ReportList reports;
|
|
|
|
BKE_reports_init(&reports, RPT_PRINT);
|
2010-03-14 20:24:11 +00:00
|
|
|
RE_BlenderAnim(re, scene, scene->lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, &reports);
|
2010-02-01 01:43:31 +00:00
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-a'.\n");
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int set_scene(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
if(argc > 1) {
|
|
|
|
set_scene_name(argv[1]);
|
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
printf("\nError: Scene name must follow '-S'.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static int set_start_frame(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
bContext *C = data;
|
|
|
|
if (CTX_data_scene(C)) {
|
|
|
|
Scene *scene= CTX_data_scene(C);
|
|
|
|
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;
|
|
|
|
} else {
|
|
|
|
printf("\nError: frame number must follow '-s'.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-s'.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static int set_end_frame(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
bContext *C = data;
|
|
|
|
if (CTX_data_scene(C)) {
|
|
|
|
Scene *scene= CTX_data_scene(C);
|
|
|
|
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;
|
|
|
|
} else {
|
|
|
|
printf("\nError: frame number must follow '-e'.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-e'.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static int set_skip_frame(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
bContext *C = data;
|
|
|
|
if (CTX_data_scene(C)) {
|
|
|
|
Scene *scene= CTX_data_scene(C);
|
|
|
|
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;
|
|
|
|
} else {
|
2010-03-14 12:49:55 +00:00
|
|
|
printf("\nError: number of frames to step must follow '-j'.\n");
|
2010-02-01 01:43:31 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-j'.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static int run_python(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
#ifndef DISABLE_PYTHON
|
2010-02-25 16:08:32 +00:00
|
|
|
bContext *C = data;
|
|
|
|
|
|
|
|
/* Make the path absolute because its needed for relative linked blends to be found */
|
|
|
|
char filename[FILE_MAXDIR + FILE_MAXFILE];
|
|
|
|
BLI_strncpy(filename, argv[1], sizeof(filename));
|
2010-03-09 17:36:23 +00:00
|
|
|
BLI_path_cwd(filename);
|
2010-02-25 16:08:32 +00:00
|
|
|
|
2010-02-01 01:43:31 +00:00
|
|
|
/* workaround for scripts not getting a bpy.context.scene, causes internal errors elsewhere */
|
|
|
|
if (argc > 1) {
|
|
|
|
/* XXX, temp setting the WM is ugly, splash also does this :S */
|
|
|
|
wmWindowManager *wm= CTX_wm_manager(C);
|
|
|
|
wmWindow *prevwin= CTX_wm_window(C);
|
2010-03-27 12:42:01 +00:00
|
|
|
Scene *prevscene= CTX_data_scene(C);
|
2010-02-01 01:43:31 +00:00
|
|
|
|
|
|
|
if(wm->windows.first) {
|
|
|
|
CTX_wm_window_set(C, wm->windows.first);
|
|
|
|
|
2010-02-25 16:08:32 +00:00
|
|
|
BPY_run_python_script(C, filename, NULL, NULL); // use reports?
|
2010-02-01 01:43:31 +00:00
|
|
|
|
|
|
|
CTX_wm_window_set(C, prevwin);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
fprintf(stderr, "Python script \"%s\" running with missing context data.\n", argv[1]);
|
2010-02-25 16:08:32 +00:00
|
|
|
BPY_run_python_script(C, filename, NULL, NULL); // use reports?
|
2010-02-01 01:43:31 +00:00
|
|
|
}
|
2010-03-27 12:42:01 +00:00
|
|
|
|
|
|
|
CTX_data_scene_set(C, prevscene);
|
|
|
|
|
2010-02-01 01:43:31 +00:00
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
printf("\nError: you must specify a Python script after '-P '.\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
printf("This blender was built without python support\n");
|
|
|
|
return 0;
|
|
|
|
#endif /* DISABLE_PYTHON */
|
|
|
|
}
|
|
|
|
|
|
|
|
static int load_file(int argc, char **argv, void *data)
|
|
|
|
{
|
|
|
|
bContext *C = data;
|
|
|
|
|
|
|
|
/* Make the path absolute because its needed for relative linked blends to be found */
|
|
|
|
char filename[FILE_MAXDIR + FILE_MAXFILE];
|
|
|
|
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-02-25 16:08:32 +00:00
|
|
|
int retval = BKE_read_file(C, filename, NULL, NULL);
|
2010-02-01 01:43:31 +00:00
|
|
|
|
|
|
|
/*we successfully loaded a blend file, get sure that
|
|
|
|
pointcache works */
|
|
|
|
if (retval!=0) {
|
2010-04-08 14:39:16 +00:00
|
|
|
wmWindowManager *wm= CTX_wm_manager(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;
|
2010-04-08 14:39:16 +00:00
|
|
|
if (CTX_wm_manager(C) == NULL) CTX_wm_manager_set(C, wm); /* reset wm */
|
2010-02-01 01:43:31 +00:00
|
|
|
}
|
|
|
|
|
2010-04-27 21:01:24 +00:00
|
|
|
/* WM_read_file() runs normally but since we're in background mode do here */
|
|
|
|
#ifndef DISABLE_PYTHON
|
|
|
|
/* run any texts that were loaded in and flagged as modules */
|
|
|
|
BPY_load_user_modules(C);
|
|
|
|
#endif
|
|
|
|
|
2010-02-01 01:43:31 +00:00
|
|
|
/* happens for the UI on file reading too (huh? (ton))*/
|
|
|
|
// XXX BKE_reset_undo();
|
|
|
|
// BKE_write_undo("original"); /* save current state */
|
|
|
|
} else {
|
|
|
|
/* we are not running in background mode here, but start blender in UI mode with
|
|
|
|
a file - this should do everything a 'load file' does */
|
|
|
|
WM_read_file(C, filename, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
G.file_loaded = 1;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
|
|
|
|
{
|
|
|
|
//BLI_argsAdd(ba, arg, pass, BA_ArgCallback cb, C);
|
|
|
|
|
|
|
|
/* end argument processing after -- */
|
|
|
|
BLI_argsAdd(ba, "--", -1, end_arguments, NULL);
|
|
|
|
|
|
|
|
/* first pass: background mode, disable python and commands that exit after usage */
|
|
|
|
BLI_argsAdd(ba, "--help", 1, print_help, NULL);
|
|
|
|
BLI_argsAdd(ba, "-h", 1, print_help, NULL);
|
|
|
|
BLI_argsAdd(ba, "/?", 1, print_help, NULL);
|
|
|
|
|
|
|
|
BLI_argsAdd(ba, "--version", 1, print_version, NULL);
|
|
|
|
BLI_argsAdd(ba, "-v", 1, print_version, NULL);
|
|
|
|
|
2010-04-28 08:02:51 +00:00
|
|
|
BLI_argsAdd(ba, "-Y", 1, enable_python, NULL);
|
2010-02-01 01:43:31 +00:00
|
|
|
BLI_argsAdd(ba, "-y", 1, disable_python, NULL);
|
|
|
|
|
2010-02-03 17:48:39 +00:00
|
|
|
BLI_argsAdd(ba, "-fpe", 1, set_fpe, NULL);
|
|
|
|
|
2010-02-01 01:43:31 +00:00
|
|
|
BLI_argsAdd(ba, "-B", 1, background_mode, NULL);
|
|
|
|
BLI_argsAdd(ba, "-b", 1, background_mode, NULL);
|
|
|
|
BLI_argsAdd(ba, "-a", 1, playback_mode, NULL);
|
|
|
|
|
|
|
|
BLI_argsAdd(ba, "-d", 1, debug_mode, ba);
|
|
|
|
|
|
|
|
/* second pass: custom window stuff */
|
|
|
|
BLI_argsAdd(ba, "-p", 2, prefsize, NULL);
|
|
|
|
BLI_argsAdd(ba, "-w", 2, with_borders, NULL);
|
|
|
|
BLI_argsAdd(ba, "-W", 2, without_borders, NULL);
|
|
|
|
BLI_argsAdd(ba, "-R", 2, register_extension, ba);
|
|
|
|
|
|
|
|
/* third pass: disabling things and forcing settings */
|
|
|
|
BLI_argsAddCase(ba, "-nojoystick", 3, no_joystick, syshandle);
|
|
|
|
BLI_argsAddCase(ba, "-noglsl", 3, no_glsl, NULL);
|
|
|
|
BLI_argsAddCase(ba, "-noaudio", 3, no_audio, NULL);
|
|
|
|
BLI_argsAddCase(ba, "-setaudio", 3, set_audio, NULL);
|
|
|
|
|
|
|
|
/* fourth pass: processing arguments */
|
|
|
|
BLI_argsAdd(ba, "-g", 4, set_ge_parameters, syshandle);
|
|
|
|
BLI_argsAdd(ba, "-f", 4, render_frame, C);
|
|
|
|
BLI_argsAdd(ba, "-a", 4, render_animation, C);
|
|
|
|
BLI_argsAdd(ba, "-S", 4, set_scene, NULL);
|
|
|
|
BLI_argsAdd(ba, "-s", 4, set_start_frame, C);
|
|
|
|
BLI_argsAdd(ba, "-e", 4, set_end_frame, C);
|
|
|
|
BLI_argsAdd(ba, "-j", 4, set_skip_frame, C);
|
|
|
|
BLI_argsAdd(ba, "-P", 4, run_python, C);
|
|
|
|
BLI_argsAdd(ba, "-o", 4, set_output, C);
|
|
|
|
BLI_argsAdd(ba, "-E", 4, set_engine, C);
|
|
|
|
BLI_argsAdd(ba, "-F", 4, set_image_type, C);
|
|
|
|
BLI_argsAdd(ba, "-t", 4, set_threads, NULL);
|
|
|
|
BLI_argsAdd(ba, "-x", 4, set_extension, C);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2004-01-04 22:10:36 +00:00
|
|
|
int main(int argc, char **argv)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
|
|
|
SYS_SystemHandle syshandle;
|
2008-12-18 02:56:48 +00:00
|
|
|
bContext *C= CTX_create();
|
2010-02-01 01:43:31 +00:00
|
|
|
bArgs *ba;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2008-01-18 21:39:47 +00:00
|
|
|
#ifdef WITH_BINRELOC
|
2008-01-18 15:10:17 +00:00
|
|
|
br_init( NULL );
|
|
|
|
#endif
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
setCallbacks();
|
|
|
|
#ifdef __APPLE__
|
|
|
|
/* patch to ignore argument finder gives us (pid?) */
|
|
|
|
if (argc==2 && strncmp(argv[1], "-psn_", 5)==0) {
|
|
|
|
extern int GHOST_HACK_getFirstFile(char buf[]);
|
|
|
|
static char firstfilebuf[512];
|
2004-01-04 22:10:36 +00:00
|
|
|
|
2002-10-12 11:37:38 +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)) {
|
|
|
|
argc= 2;
|
|
|
|
argv[1]= firstfilebuf;
|
|
|
|
}
|
|
|
|
}
|
2004-01-04 22:10:36 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef __FreeBSD__
|
|
|
|
fpsetmask(0);
|
|
|
|
#endif
|
|
|
|
|
2003-06-18 03:48:55 +00:00
|
|
|
// copy path to executable in bprogname. playanim and creting runtimes
|
|
|
|
// need this.
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
BLI_where_am_i(bprogname, argv[0]);
|
2008-02-13 13:55:22 +00:00
|
|
|
|
2009-09-21 03:16:26 +00:00
|
|
|
{ /* override the hard coded blender path */
|
|
|
|
char *blender_path_env = getenv("BLENDERPATH");
|
|
|
|
if(blender_path_env)
|
|
|
|
BLI_strncpy(blender_path, blender_path_env, sizeof(blender_path));
|
|
|
|
}
|
2010-03-14 17:18:36 +00:00
|
|
|
|
|
|
|
#ifdef BUILD_DATE
|
|
|
|
strip_quotes(build_date);
|
|
|
|
strip_quotes(build_time);
|
|
|
|
strip_quotes(build_rev);
|
|
|
|
strip_quotes(build_platform);
|
|
|
|
strip_quotes(build_type);
|
|
|
|
#endif
|
|
|
|
|
2010-04-13 12:51:03 +00:00
|
|
|
BLI_threadapi_init();
|
|
|
|
|
2009-06-19 23:05:21 +00:00
|
|
|
RNA_init();
|
2.5: Render/Game Engine
An engine to use for output can now be selected an influences what
shows in the buttons window, only showing relevant data. The idea
behind this is to make it more clear what is supported where, make
the system more pluggable for external render/game engines, and save
space hiding stuff that is not relevant anyway.
* Top header now has an engine menu, to choose between the blender
render engine, game engine, and other future external engines.
* If the game engine is enabled, the buttons window should show
only properties that work in the game engine, and similarly for
the render engine.
* Moved panels from the logic space and game tabs to the physics,
scene and world tabs instead, and removed the game tab.
* Materials and textures tabs should eventually become game
specific too, to better show what is supported.
2009-07-23 21:50:40 +00:00
|
|
|
RE_engines_init();
|
2009-06-19 23:05:21 +00:00
|
|
|
|
2003-06-18 03:48:55 +00:00
|
|
|
/* Hack - force inclusion of the plugin api functions,
|
|
|
|
* see blenpluginapi:pluginapi.c
|
2002-10-12 11:37:38 +00:00
|
|
|
*/
|
|
|
|
pluginapi_force_ref();
|
2009-06-19 23:05:21 +00:00
|
|
|
|
2007-03-26 15:07:38 +00:00
|
|
|
init_nodesystem();
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
initglobals(); /* blender.c */
|
|
|
|
|
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();
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
syshandle = SYS_GetSystem();
|
|
|
|
GEN_init_messaging_system();
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* first test for background */
|
2010-02-01 01:43:31 +00:00
|
|
|
ba = BLI_argsInit(argc, argv); /* skip binary path */
|
|
|
|
setupArguments(C, ba, &syshandle);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2010-02-01 01:43:31 +00:00
|
|
|
BLI_argsParse(ba, 1, NULL, NULL);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
#ifdef __sgi
|
2003-04-30 13:22:26 +00:00
|
|
|
setuid(getuid()); /* end superuser */
|
2002-10-12 11:37:38 +00:00
|
|
|
#endif
|
|
|
|
|
2010-02-02 14:50:43 +00:00
|
|
|
|
2003-07-19 20:14:07 +00:00
|
|
|
/* for all platforms, even windos has it! */
|
|
|
|
if(G.background) signal(SIGINT, blender_esc); /* ctrl c out bg render */
|
2008-10-19 06:12:11 +00:00
|
|
|
|
2007-04-12 06:21:31 +00:00
|
|
|
/* background render uses this font too */
|
2008-12-21 11:05:43 +00:00
|
|
|
BKE_font_register_builtin(datatoc_Bfont, datatoc_Bfont_size);
|
2010-04-24 16:35:16 +00:00
|
|
|
|
|
|
|
/* Initialiaze ffmpeg if built in, also needed for bg mode if videos are
|
|
|
|
rendered via ffmpeg */
|
|
|
|
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
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
if(G.background==0) {
|
2010-02-01 01:43:31 +00:00
|
|
|
BLI_argsParse(ba, 2, NULL, NULL);
|
|
|
|
BLI_argsParse(ba, 3, NULL, NULL);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2010-01-10 20:01:13 +00:00
|
|
|
WM_init(C, argc, argv);
|
2008-02-13 13:55:22 +00:00
|
|
|
|
2010-03-16 17:23:20 +00:00
|
|
|
/* this is properly initialized with user defs, but this is default */
|
2008-02-13 13:55:22 +00:00
|
|
|
BLI_where_is_temp( btempdir, 1 ); /* call after loading the .B.blend so we can read U.tempdir */
|
2003-06-28 10:35:14 +00:00
|
|
|
|
2008-10-19 06:12:11 +00:00
|
|
|
#ifndef DISABLE_SDL
|
2009-07-21 09:26:28 +00:00
|
|
|
BLI_setenv("SDL_VIDEODRIVER", "dummy");
|
2010-04-24 16:35:16 +00:00
|
|
|
/* I think this is not necessary anymore (04-24-2010 neXyon)
|
2008-10-19 06:12:11 +00:00
|
|
|
#ifdef __linux__
|
2010-04-24 16:35:16 +00:00
|
|
|
// On linux the default SDL driver dma often would not play
|
|
|
|
// use alsa if none is set
|
2009-07-21 09:26:28 +00:00
|
|
|
setenv("SDL_AUDIODRIVER", "alsa", 0);
|
2008-10-19 06:12:11 +00:00
|
|
|
#endif
|
2010-04-24 16:35:16 +00:00
|
|
|
*/
|
2008-10-19 06:12:11 +00:00
|
|
|
#endif
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
else {
|
2010-02-01 01:43:31 +00:00
|
|
|
BLI_argsParse(ba, 3, NULL, NULL);
|
2009-11-11 04:08:09 +00:00
|
|
|
|
2010-01-10 20:01:13 +00:00
|
|
|
WM_init(C, argc, argv);
|
2009-11-11 04:08:09 +00:00
|
|
|
|
2008-02-13 13:55:22 +00:00
|
|
|
BLI_where_is_temp( btempdir, 0 ); /* call after loading the .B.blend so we can read U.tempdir */
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2008-10-28 18:47:13 +00:00
|
|
|
#ifndef DISABLE_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
|
|
|
/**
|
2007-12-24 18:58:12 +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
|
|
|
|
* pythondir to Python's sys.path at this point. Simply putting
|
2007-12-24 18:58:12 +00:00
|
|
|
* WM_init() before BPY_start_python() 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
|
|
|
* Update: now this function also inits the bpymenus, which also depend
|
|
|
|
* on U.pythondir.
|
|
|
|
*/
|
2010-03-16 17:37:34 +00:00
|
|
|
|
2009-11-13 09:28:05 +00:00
|
|
|
// TODO - U.pythondir
|
2009-04-11 02:18:24 +00:00
|
|
|
|
2008-10-28 18:47:13 +00:00
|
|
|
#endif
|
|
|
|
|
2009-07-18 19:42:13 +00:00
|
|
|
CTX_py_init_set(C, 1);
|
2009-11-13 09:28:05 +00:00
|
|
|
WM_keymap_init(C);
|
2009-07-18 19:42:13 +00:00
|
|
|
|
2003-09-09 21:26:34 +00:00
|
|
|
/* OK we are ready for it */
|
2010-02-01 01:43:31 +00:00
|
|
|
BLI_argsParse(ba, 4, load_file, C);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2010-02-01 01:43:31 +00:00
|
|
|
BLI_argsFree(ba);
|
2009-11-23 13:58:55 +00:00
|
|
|
|
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
|
|
|
if(G.background) {
|
|
|
|
/* actually incorrect, but works for now (ton) */
|
2007-12-24 18:58:12 +00:00
|
|
|
WM_exit(C);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
2010-03-05 10:37:55 +00:00
|
|
|
else {
|
2010-03-26 11:35:57 +00:00
|
|
|
if((G.fileflags & G_FILE_AUTOPLAY) && (G.f & G_SCRIPT_AUTOEXEC))
|
2010-03-05 10:37:55 +00:00
|
|
|
WM_init_game(C);
|
|
|
|
|
|
|
|
else if(!G.file_loaded)
|
|
|
|
WM_init_splash(C);
|
|
|
|
}
|
2004-01-04 22:10:36 +00:00
|
|
|
|
2007-12-24 18:58:12 +00:00
|
|
|
WM_main(C);
|
2009-11-23 13:58:55 +00:00
|
|
|
|
|
|
|
|
Merge of trunk into blender 2.5:
svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r12987:17416
Issues:
* GHOST/X11 had conflicting changes. Some code was added in 2.5, which was
later added in trunk also, but reverted partially, specifically revision
16683. I have left out this reversion in the 2.5 branch since I think it is
needed there.
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16683
* Scons had various conflicting changes, I decided to go with trunk version
for everything except priorities and some library renaming.
* In creator.c, there were various fixes and fixes for fixes related to the -w
-W and -p options. In 2.5 -w and -W is not coded yet, and -p is done
differently. Since this is changed so much, and I don't think those fixes
would be needed in 2.5, I've left them out.
* Also in creator.c: there was code for a python bugfix where the screen was not
initialized when running with -P. The code that initializes the screen there
I had to disable, that can't work in 2.5 anymore but left it commented as a
reminder.
Further I had to disable some new function calls. using src/ and python/, as
was done already in this branch, disabled function calls:
* bpath.c: error reporting
* BME_conversions.c: editmesh conversion functions.
* SHD_dynamic: disabled almost completely, there is no python/.
* KX_PythonInit.cpp and Ketsji/ build files: Mathutils is not there, disabled.
* text.c: clipboard copy call.
* object.c: OB_SUPPORT_MATERIAL.
* DerivedMesh.c and subsurf_ccg, stipple_quarttone.
Still to be done:
* Go over files and functions that were moved to a different location but could
still use changes that were done in trunk.
2008-11-12 21:16:53 +00:00
|
|
|
/*XXX if (scr_init==0) {
|
2008-04-17 14:10:40 +00:00
|
|
|
main_init_screen();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2008-04-27 11:37:57 +00:00
|
|
|
|
Merge of trunk into blender 2.5:
svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r12987:17416
Issues:
* GHOST/X11 had conflicting changes. Some code was added in 2.5, which was
later added in trunk also, but reverted partially, specifically revision
16683. I have left out this reversion in the 2.5 branch since I think it is
needed there.
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16683
* Scons had various conflicting changes, I decided to go with trunk version
for everything except priorities and some library renaming.
* In creator.c, there were various fixes and fixes for fixes related to the -w
-W and -p options. In 2.5 -w and -W is not coded yet, and -p is done
differently. Since this is changed so much, and I don't think those fixes
would be needed in 2.5, I've left them out.
* Also in creator.c: there was code for a python bugfix where the screen was not
initialized when running with -P. The code that initializes the screen there
I had to disable, that can't work in 2.5 anymore but left it commented as a
reminder.
Further I had to disable some new function calls. using src/ and python/, as
was done already in this branch, disabled function calls:
* bpath.c: error reporting
* BME_conversions.c: editmesh conversion functions.
* SHD_dynamic: disabled almost completely, there is no python/.
* KX_PythonInit.cpp and Ketsji/ build files: Mathutils is not there, disabled.
* text.c: clipboard copy call.
* object.c: OB_SUPPORT_MATERIAL.
* DerivedMesh.c and subsurf_ccg, stipple_quarttone.
Still to be done:
* Go over files and functions that were moved to a different location but could
still use changes that were done in trunk.
2008-11-12 21:16:53 +00:00
|
|
|
screenmain();*/ /* main display loop */
|
2007-11-11 15:18:53 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
return 0;
|
|
|
|
} /* end of int main(argc,argv) */
|
|
|
|
|
|
|
|
static void error_cb(char *err)
|
|
|
|
{
|
2007-12-24 18:58:12 +00:00
|
|
|
|
|
|
|
printf("%s\n", err); /* XXX do this in WM too */
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
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-06-09 18:08:45 +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
|
|
|
|
2004-01-04 22:10:36 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
/* BLI_blenlib: */
|
2004-01-04 22:10:36 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
BLI_setErrorCallBack(error_cb); /* */
|
2007-12-24 18:58:12 +00:00
|
|
|
// XXX BLI_setInterruptCallBack(blender_test_break);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
}
|