2004-01-04 22:10:36 +00:00
|
|
|
/*
|
2002-10-12 11:37:38 +00:00
|
|
|
* $Id$
|
|
|
|
*
|
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,
|
|
|
|
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*
|
|
|
|
* 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
|
|
|
*/
|
|
|
|
#include <stdlib.h>
|
2003-10-10 13:36:38 +00:00
|
|
|
#include <string.h>
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2008-11-24 14:15:05 +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
|
|
|
|
|
|
|
|
#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"
|
2006-03-19 16:25:32 +00:00
|
|
|
#include "blendef.h" /* for MAXFRAME */
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
#include "BKE_utildefines.h"
|
|
|
|
#include "BKE_blender.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"
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
#include "BIF_gl.h"
|
|
|
|
#include "BIF_graphics.h"
|
|
|
|
#include "BIF_mainqueue.h"
|
|
|
|
#include "BIF_graphics.h"
|
|
|
|
#include "BIF_editsound.h"
|
|
|
|
#include "BIF_usiblender.h"
|
|
|
|
#include "BIF_drawscene.h" /* set_scene() */
|
|
|
|
#include "BIF_screen.h" /* waitcursor and more */
|
|
|
|
#include "BIF_usiblender.h"
|
|
|
|
#include "BIF_toolbox.h"
|
|
|
|
|
|
|
|
#include "BLO_writefile.h"
|
|
|
|
#include "BLO_readfile.h"
|
|
|
|
|
2003-09-18 11:41:50 +00:00
|
|
|
#include "IMB_imbuf.h" // for quicktime_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"
|
|
|
|
|
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
|
|
|
#include "playanim_ext.h"
|
|
|
|
#include "mydevice.h"
|
|
|
|
#include "nla.h"
|
2003-11-25 18:14:00 +00:00
|
|
|
#include "datatoc.h"
|
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
|
2002-10-12 11:37:38 +00:00
|
|
|
extern char * build_date;
|
|
|
|
extern char * build_time;
|
|
|
|
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 */
|
2008-09-29 17:08:11 +00:00
|
|
|
static void print_help(void);
|
|
|
|
static void print_version(void);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2004-07-27 20:40:42 +00:00
|
|
|
|
2004-11-28 12:14:27 +00:00
|
|
|
/* defined in ghostwinlay and winlay, we can't include carbon here, conflict with DNA */
|
|
|
|
#ifdef __APPLE__
|
2005-03-09 19:45:59 +00:00
|
|
|
extern int checkAppleVideoCard(void);
|
2004-08-01 22:28:56 +00:00
|
|
|
extern void getMacAvailableBounds(short *top, short *left, short *bottom, short *right);
|
2004-11-28 12:14:27 +00:00
|
|
|
extern void winlay_get_screensize(int *width_r, int *height_r);
|
|
|
|
extern void winlay_process_events(int wait_for_event);
|
2004-07-27 20:40:42 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
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
|
|
|
|
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
|
|
|
|
2005-04-27 11:52:50 +00:00
|
|
|
#if defined(__sgi) || defined(__alpha__)
|
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++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2003-12-24 16:44:24 +00:00
|
|
|
static void print_version(void)
|
|
|
|
{
|
2006-04-17 19:20:02 +00:00
|
|
|
#ifdef BUILD_DATE
|
2007-03-25 13:50:51 +00:00
|
|
|
printf ("Blender %d.%02d (sub %d) Build\n", G.version/100, G.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
|
2007-03-25 13:50:51 +00:00
|
|
|
printf ("Blender %d.%02d (sub %d) Build\n", G.version/100, G.version%100, BLENDER_SUBVERSION);
|
2006-04-17 19:20:02 +00:00
|
|
|
#endif
|
2003-12-24 16:44:24 +00:00
|
|
|
}
|
2003-07-19 20:14:07 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
static void print_help(void)
|
|
|
|
{
|
2007-03-25 13:50:51 +00:00
|
|
|
printf ("Blender %d.%02d (sub %d) Build\n", G.version/100, G.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");
|
2008-02-03 19:03:18 +00:00
|
|
|
printf (" -b <file>\tRender <file> in background (doesn't load the user defaults .B.blend file)\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");
|
|
|
|
printf ("\nFormat options:\n");
|
|
|
|
printf (" -F <format>\tSet the render format, Valid options are...\n");
|
2008-01-03 10:27:29 +00:00
|
|
|
printf (" \tTGA IRIS HAMX 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-09 04:02:18 +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 noaudio\t\tNo audio in Game Engine\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");
|
|
|
|
printf (" -noaudio\tDisable audio on systems that support audio\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");
|
2003-07-03 13:53:11 +00:00
|
|
|
printf (" -h\t\tPrint this help text\n");
|
2008-06-01 16:13:04 +00:00
|
|
|
printf (" -y\t\tDisable automatic python script execution (scriptlinks, pydrivers, pyconstraints, pynodes)\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");
|
|
|
|
#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");
|
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);
|
2003-03-24 15:05:51 +00:00
|
|
|
extern void winlay_get_screensize(int *width_r, int *height_r);
|
2004-08-01 22:28:56 +00:00
|
|
|
|
2008-04-17 14:10:40 +00:00
|
|
|
static void main_init_screen( void )
|
|
|
|
{
|
|
|
|
setscreen(G.curscreen);
|
|
|
|
|
|
|
|
if(G.main->scene.first==0) {
|
|
|
|
set_scene( add_scene("1") );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-04 22:10:36 +00:00
|
|
|
int main(int argc, char **argv)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
2008-09-16 02:58:33 +00:00
|
|
|
int a, i, stax, stay, sizx, sizy, scr_init = 0;
|
2002-10-12 11:37:38 +00:00
|
|
|
SYS_SystemHandle syshandle;
|
|
|
|
|
2007-01-19 05:23:58 +00:00
|
|
|
#if defined(WIN32) || defined (__linux__)
|
|
|
|
int audio = 1;
|
|
|
|
#else
|
|
|
|
int audio = 0;
|
|
|
|
#endif
|
|
|
|
|
2008-01-18 15:10:17 +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];
|
2003-05-13 14:52:51 +00:00
|
|
|
int scr_x,scr_y;
|
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
|
|
|
|
2004-11-28 12:14:27 +00:00
|
|
|
/* first let us check if we are hardware accelerated and with VRAM > 16 Mo */
|
2004-07-27 20:40:42 +00:00
|
|
|
|
|
|
|
if (checkAppleVideoCard()) {
|
2004-08-01 22:28:56 +00:00
|
|
|
short top, left, bottom, right;
|
|
|
|
|
|
|
|
winlay_get_screensize(&scr_x, &scr_y);
|
|
|
|
getMacAvailableBounds(&top, &left, &bottom, &right);
|
2007-04-17 18:15:31 +00:00
|
|
|
setprefsize(left +10,scr_y - bottom +10,right-left -20,bottom - 64, 0);
|
2004-07-27 20:40:42 +00:00
|
|
|
|
|
|
|
} else {
|
2008-09-16 02:58:33 +00:00
|
|
|
winlay_get_screensize(&scr_x, &scr_y);
|
2004-08-01 22:28:56 +00:00
|
|
|
|
2008-09-16 02:58:33 +00:00
|
|
|
/* 40 + 684 + (headers) 22 + 22 = 768, the powerbook screen height */
|
|
|
|
setprefsize(120, 40, 850, 684, 0);
|
2004-07-27 20:40:42 +00:00
|
|
|
}
|
|
|
|
|
2003-05-13 14:52:51 +00:00
|
|
|
winlay_process_events(0);
|
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
|
|
|
|
#ifdef __linux__
|
|
|
|
#ifdef __alpha__
|
|
|
|
signal (SIGFPE, fpe_handler);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined(__sgi)
|
|
|
|
signal (SIGFPE, fpe_handler);
|
|
|
|
#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
|
|
|
|
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();
|
|
|
|
|
2007-03-26 15:07:38 +00:00
|
|
|
init_nodesystem();
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
initglobals(); /* blender.c */
|
|
|
|
|
|
|
|
syshandle = SYS_GetSystem();
|
|
|
|
GEN_init_messaging_system();
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* first test for background */
|
2004-07-16 03:08:43 +00:00
|
|
|
|
BPython:
- Made Blender.event var (previously only used by script links) hold ascii value -- where it applies -- of current event during events callback registered with Draw.Register(gui, events, button_events). Useful for gui scripts like Campbell's Python console. No problem using this var to hold the value, since in gui scripts it was not used (always None).
- Updated Window and Window.Theme with new theme vars and the Time space.
- Script links:
-- Added "Render" event for script links (runs twice, second time as "PostEvent", for clean-up actions). Now FrameChanged links don't run when a single pic is rendered.
-- Added "Enable Script Links" button in the script buttons tab. Now this bit gets saved in .blends along with the rest of G.f, so users can define per .blend if they are on or off by default. "blender -y" also disables all slinks as happened before with OnLoad ones only.
-- Other small changes in the script buttons tab:
When a link is added (button "new"), it becomes the active one for the window, no need to press a button to reach it.
Also, a pupmenu showing all available texts is shown when "new" is pressed, so users can choose a text w/o having to type. Cancel the popup to leave the string button empty (link exists, but has no script assigned). A pulldown would be better UI-wise, but it's kinda weird to show both scripts and normal texts (Blender doesn't differentiate them) in a script links pulldown. With a popup we can show only texts ending in ".py" (not done in this commit, need opinions) and if the script has no or another extension, case of many in old and current .blend's, there's still the string box for writing its name.
-- Implemented Ton's space handler script links:
Right now only for the 3d View, but it's trivial to add for others. There are two types: EVENT, to receive 3d View events from a chosen window and DRAW, to draw on the window. Ton's idea was to give scripts a controlled way to integrate better within Blender.
Here's how it works:
- scripts must have a proper header, like:
# SPACEHANDLER.VIEW3D.EVENT
and then they are shown in 3d View's View menu, "Space Handler Scripts" submenu. Check (mark, click on it) a script to make it active.
EVENT handlers should consult the Blender.event var to get the current event, which can be compared with values from the Draw module:
import Blender
from Blender import Draw
evt = Blender.event
if evt == Draw.AKEY:
print "a"
elif evt == Draw.LEFTMOUSE:
print "left mouse button"
else:
return # ignore, pass event back to Blender
Blender.event = None # tell Blender not to process itself the event
DRAW handlers are free to draw to their owner 3D View. OpenGL attributes and modelview and projection matrices are pushed before running the handler and poped when it finishes.
To communicate between EVENT and DRAW handler scripts we have the Blender.Registry module, as always.
Still need to code some nice example, which should also serve to test properly space handlers. Simple tests went fine.
- doc updates about the additions.
=======
Note: the UI part of the space handlers and script links is of course open for changes, I just tried to make it understandable. Probably we won't use the scriptlinks icon for "None Available" (check 3d View -> View -> Space Handler Scripts), though it hints at what space handlers are. The tooltips may not be accepted either, since other menus don't use them. Opinions welcomed.
2005-05-08 21:20:34 +00:00
|
|
|
G.f |= G_DOSCRIPTLINKS; /* script links enabled by default */
|
2004-07-16 03:08:43 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
for(a=1; a<argc; a++) {
|
|
|
|
|
|
|
|
/* Handle unix and windows style help requests */
|
|
|
|
if ((!strcmp(argv[a], "--help")) || (!strcmp(argv[a], "/?"))){
|
|
|
|
print_help();
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
2007-08-18 00:02:50 +00:00
|
|
|
/* end argument processing after -- */
|
|
|
|
if (!strcmp( argv[a], "--")){
|
|
|
|
a = argc;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2003-12-24 16:44:24 +00:00
|
|
|
/* Handle long version request */
|
|
|
|
if (!strcmp(argv[a], "--version")){
|
|
|
|
print_version();
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
/* Handle -* switches */
|
|
|
|
else if(argv[a][0] == '-') {
|
|
|
|
switch(argv[a][1]) {
|
2008-01-03 14:53:44 +00:00
|
|
|
case 'a': /* -b was not given, play an animation */
|
2008-10-08 18:15:19 +00:00
|
|
|
|
|
|
|
/* exception here, see below, it probably needs happens after qt init? */
|
|
|
|
libtiff_init();
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
playanim(argc-1, argv+1);
|
|
|
|
exit(0);
|
|
|
|
break;
|
|
|
|
case 'b':
|
|
|
|
case 'B':
|
|
|
|
G.background = 1;
|
|
|
|
a= argc;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'y':
|
BPython:
- Made Blender.event var (previously only used by script links) hold ascii value -- where it applies -- of current event during events callback registered with Draw.Register(gui, events, button_events). Useful for gui scripts like Campbell's Python console. No problem using this var to hold the value, since in gui scripts it was not used (always None).
- Updated Window and Window.Theme with new theme vars and the Time space.
- Script links:
-- Added "Render" event for script links (runs twice, second time as "PostEvent", for clean-up actions). Now FrameChanged links don't run when a single pic is rendered.
-- Added "Enable Script Links" button in the script buttons tab. Now this bit gets saved in .blends along with the rest of G.f, so users can define per .blend if they are on or off by default. "blender -y" also disables all slinks as happened before with OnLoad ones only.
-- Other small changes in the script buttons tab:
When a link is added (button "new"), it becomes the active one for the window, no need to press a button to reach it.
Also, a pupmenu showing all available texts is shown when "new" is pressed, so users can choose a text w/o having to type. Cancel the popup to leave the string button empty (link exists, but has no script assigned). A pulldown would be better UI-wise, but it's kinda weird to show both scripts and normal texts (Blender doesn't differentiate them) in a script links pulldown. With a popup we can show only texts ending in ".py" (not done in this commit, need opinions) and if the script has no or another extension, case of many in old and current .blend's, there's still the string box for writing its name.
-- Implemented Ton's space handler script links:
Right now only for the 3d View, but it's trivial to add for others. There are two types: EVENT, to receive 3d View events from a chosen window and DRAW, to draw on the window. Ton's idea was to give scripts a controlled way to integrate better within Blender.
Here's how it works:
- scripts must have a proper header, like:
# SPACEHANDLER.VIEW3D.EVENT
and then they are shown in 3d View's View menu, "Space Handler Scripts" submenu. Check (mark, click on it) a script to make it active.
EVENT handlers should consult the Blender.event var to get the current event, which can be compared with values from the Draw module:
import Blender
from Blender import Draw
evt = Blender.event
if evt == Draw.AKEY:
print "a"
elif evt == Draw.LEFTMOUSE:
print "left mouse button"
else:
return # ignore, pass event back to Blender
Blender.event = None # tell Blender not to process itself the event
DRAW handlers are free to draw to their owner 3D View. OpenGL attributes and modelview and projection matrices are pushed before running the handler and poped when it finishes.
To communicate between EVENT and DRAW handler scripts we have the Blender.Registry module, as always.
Still need to code some nice example, which should also serve to test properly space handlers. Simple tests went fine.
- doc updates about the additions.
=======
Note: the UI part of the space handlers and script links is of course open for changes, I just tried to make it understandable. Probably we won't use the scriptlinks icon for "None Available" (check 3d View -> View -> Space Handler Scripts), though it hints at what space handlers are. The tooltips may not be accepted either, since other menus don't use them. Opinions welcomed.
2005-05-08 21:20:34 +00:00
|
|
|
G.f &= ~G_DOSCRIPTLINKS;
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 'Y':
|
BPython:
- Made Blender.event var (previously only used by script links) hold ascii value -- where it applies -- of current event during events callback registered with Draw.Register(gui, events, button_events). Useful for gui scripts like Campbell's Python console. No problem using this var to hold the value, since in gui scripts it was not used (always None).
- Updated Window and Window.Theme with new theme vars and the Time space.
- Script links:
-- Added "Render" event for script links (runs twice, second time as "PostEvent", for clean-up actions). Now FrameChanged links don't run when a single pic is rendered.
-- Added "Enable Script Links" button in the script buttons tab. Now this bit gets saved in .blends along with the rest of G.f, so users can define per .blend if they are on or off by default. "blender -y" also disables all slinks as happened before with OnLoad ones only.
-- Other small changes in the script buttons tab:
When a link is added (button "new"), it becomes the active one for the window, no need to press a button to reach it.
Also, a pupmenu showing all available texts is shown when "new" is pressed, so users can choose a text w/o having to type. Cancel the popup to leave the string button empty (link exists, but has no script assigned). A pulldown would be better UI-wise, but it's kinda weird to show both scripts and normal texts (Blender doesn't differentiate them) in a script links pulldown. With a popup we can show only texts ending in ".py" (not done in this commit, need opinions) and if the script has no or another extension, case of many in old and current .blend's, there's still the string box for writing its name.
-- Implemented Ton's space handler script links:
Right now only for the 3d View, but it's trivial to add for others. There are two types: EVENT, to receive 3d View events from a chosen window and DRAW, to draw on the window. Ton's idea was to give scripts a controlled way to integrate better within Blender.
Here's how it works:
- scripts must have a proper header, like:
# SPACEHANDLER.VIEW3D.EVENT
and then they are shown in 3d View's View menu, "Space Handler Scripts" submenu. Check (mark, click on it) a script to make it active.
EVENT handlers should consult the Blender.event var to get the current event, which can be compared with values from the Draw module:
import Blender
from Blender import Draw
evt = Blender.event
if evt == Draw.AKEY:
print "a"
elif evt == Draw.LEFTMOUSE:
print "left mouse button"
else:
return # ignore, pass event back to Blender
Blender.event = None # tell Blender not to process itself the event
DRAW handlers are free to draw to their owner 3D View. OpenGL attributes and modelview and projection matrices are pushed before running the handler and poped when it finishes.
To communicate between EVENT and DRAW handler scripts we have the Blender.Registry module, as always.
Still need to code some nice example, which should also serve to test properly space handlers. Simple tests went fine.
- doc updates about the additions.
=======
Note: the UI part of the space handlers and script links is of course open for changes, I just tried to make it understandable. Probably we won't use the scriptlinks icon for "None Available" (check 3d View -> View -> Space Handler Scripts), though it hints at what space handlers are. The tooltips may not be accepted either, since other menus don't use them. Opinions welcomed.
2005-05-08 21:20:34 +00:00
|
|
|
printf ("-y was used to disable script links because,\n");
|
2002-10-12 11:37:38 +00:00
|
|
|
printf ("\t-p being taken, Ton was of the opinion that Y\n");
|
|
|
|
printf ("\tlooked like a split (disabled) snake, and also\n");
|
|
|
|
printf ("\twas similar to a python's tongue (unproven).\n\n");
|
|
|
|
|
|
|
|
printf ("\tZr agreed because it gave him a reason to add a\n");
|
|
|
|
printf ("\tcompletely useless text into Blender.\n\n");
|
|
|
|
|
|
|
|
printf ("\tADDENDUM! Ton, in defense, found this picture of\n");
|
|
|
|
printf ("\tan Australian python, exhibiting her (his/its) forked\n");
|
|
|
|
printf ("\tY tongue. It could be part of an H Zr retorted!\n\n");
|
|
|
|
printf ("\thttp://www.users.bigpond.com/snake.man/\n");
|
|
|
|
|
|
|
|
exit(252);
|
|
|
|
|
|
|
|
case 'h':
|
|
|
|
print_help();
|
|
|
|
exit(0);
|
2003-12-24 16:44:24 +00:00
|
|
|
case 'v':
|
|
|
|
print_version();
|
|
|
|
exit(0);
|
2002-10-12 11:37:38 +00:00
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef __sgi
|
2003-04-30 13:22:26 +00:00
|
|
|
setuid(getuid()); /* end superuser */
|
2002-10-12 11:37:38 +00:00
|
|
|
#endif
|
|
|
|
|
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 */
|
2003-11-25 18:14:00 +00:00
|
|
|
BKE_font_register_builtin(datatoc_Bfont, datatoc_Bfont_size);
|
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) {
|
2008-09-16 02:58:33 +00:00
|
|
|
winlay_get_screensize(&sizx, &sizy);
|
|
|
|
stax=0;
|
|
|
|
stay=0;
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
for(a=1; a<argc; a++) {
|
|
|
|
if(argv[a][0] == '-') {
|
|
|
|
switch(argv[a][1]) {
|
|
|
|
case 'p': /* prefsize */
|
|
|
|
if (argc-a < 5) {
|
|
|
|
printf ("-p requires four arguments\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
a++;
|
|
|
|
stax= atoi(argv[a]);
|
|
|
|
a++;
|
|
|
|
stay= atoi(argv[a]);
|
|
|
|
a++;
|
|
|
|
sizx= atoi(argv[a]);
|
|
|
|
a++;
|
|
|
|
sizy= atoi(argv[a]);
|
2008-05-06 18:57:24 +00:00
|
|
|
G.windowstate = G_WINDOWSTATE_BORDER;
|
2004-01-04 22:10:36 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
case 'd':
|
|
|
|
G.f |= G_DEBUG; /* std output printf's */
|
2007-03-25 13:50:51 +00:00
|
|
|
printf ("Blender %d.%02d (sub %d) Build\n", G.version/100, G.version%100, BLENDER_SUBVERSION);
|
2006-11-29 19:31:45 +00:00
|
|
|
MEM_set_memory_debug();
|
2002-10-12 11:37:38 +00:00
|
|
|
#ifdef NAN_BUILDINFO
|
|
|
|
printf("Build: %s %s %s %s\n", build_date, build_time, build_platform, build_type);
|
|
|
|
|
|
|
|
#endif // NAN_BUILDINFO
|
|
|
|
for (i = 0; i < argc; i++) {
|
|
|
|
printf("argv[%d] = %s\n", i, argv[i]);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'w':
|
2003-05-08 20:53:38 +00:00
|
|
|
G.windowstate = G_WINDOWSTATE_BORDER;
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
case 'W':
|
2008-03-05 21:11:24 +00:00
|
|
|
/* XXX, fixme mein, borderless on OSX */
|
2003-05-08 20:53:38 +00:00
|
|
|
G.windowstate = G_WINDOWSTATE_FULLSCREEN;
|
2003-06-04 21:22:57 +00:00
|
|
|
break;
|
|
|
|
case 'R':
|
2007-04-12 06:21:31 +00:00
|
|
|
/* Registering filetypes only makes sense on windows... */
|
2003-06-04 21:22:57 +00:00
|
|
|
#ifdef WIN32
|
|
|
|
RegisterBlendExtension(argv[0]);
|
2003-05-08 20:53:38 +00:00
|
|
|
#endif
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
case 'n':
|
|
|
|
case 'N':
|
2005-04-02 15:36:57 +00:00
|
|
|
if (BLI_strcasecmp(argv[a], "-noaudio") == 0|| BLI_strcasecmp(argv[a], "-nosound") == 0) {
|
2002-10-12 11:37:38 +00:00
|
|
|
/**
|
2003-06-18 03:48:55 +00:00
|
|
|
notify the gameengine that no audio is wanted, even if the user didn't give
|
|
|
|
the flag -g noaudio.
|
2007-04-12 06:21:31 +00:00
|
|
|
*/
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
SYS_WriteCommandLineInt(syshandle,"noaudio",1);
|
|
|
|
audio = 0;
|
|
|
|
if (G.f & G_DEBUG) printf("setting audio to: %d\n", audio);
|
|
|
|
}
|
2008-09-28 03:07:13 +00:00
|
|
|
if (BLI_strcasecmp(argv[a], "-nojoystick") == 0) {
|
|
|
|
/**
|
|
|
|
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");
|
|
|
|
}
|
2008-10-12 18:32:26 +00:00
|
|
|
if (BLI_strcasecmp(argv[a], "-noglsl") == 0)
|
|
|
|
GPU_extensions_disable();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-03-04 18:38:18 +00:00
|
|
|
if ( (G.windowstate == G_WINDOWSTATE_BORDER) || (G.windowstate == G_WINDOWSTATE_FULLSCREEN))
|
|
|
|
setprefsize(stax, stay, sizx, sizy, 0);
|
2008-10-28 18:47:13 +00:00
|
|
|
#ifndef DISABLE_PYTHON
|
BPython:
- Blender.Window: added function GetPerspMatrix() (Tom Musgrave's patch, thanks);
- added Chris Want's patch to tell argc, argv to the Python interpreter (thanks, Hos);
- Blender.Image: added image.glFree() to free textures bound by the recently added
image.glLoad() (both suggested by Campbell Barton -- thanks, with these Blender can
be used to load textures for scripts);
- Blender.Sound: removed for now at least a few get/set methods of vars that can't be
accessed via interface;
- renamed Get/makeActive to Get/setCurrent in Blender.World (actually added alias for
now), same in Blender.Sound: renamed makeActive to setCurrent. Stephen Swaney
pointed this some weeks ago, we should stick to one naming convention.
- added documentation for Sound and Window.Theme modules and the other added
functions, made other small updates.
- Blender.Object: made 'worldspace' become the default output of .getMatrix and .mat/.matrix:
after reading a discussion on blender.org's Python forum where eeshlo mentioned the
pre 2.34 default was worldspace, I took a better look at Blender's relevant code,
confirmed, talked to Theeth about this and as he suggested am changing the default
back to 'worldspace'.
2004-10-20 05:51:24 +00:00
|
|
|
BPY_start_python(argc, argv);
|
2008-10-28 18:47:13 +00:00
|
|
|
#endif
|
2003-05-26 19:20:56 +00:00
|
|
|
/**
|
|
|
|
* NOTE: sound_init_audio() *must be* after start_python,
|
|
|
|
* at least on FreeBSD.
|
2004-04-21 14:15:37 +00:00
|
|
|
* added note (ton): i removed it altogether
|
2003-05-26 19:20:56 +00:00
|
|
|
*/
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2008-02-13 13:55:22 +00:00
|
|
|
BIF_init(); /* loads .B.blend */
|
|
|
|
|
|
|
|
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
|
|
|
|
#ifdef __linux__
|
|
|
|
/* On linux the default SDL driver dma often would not play
|
|
|
|
* use alsa if none is set */
|
|
|
|
if ( getenv("SDL_AUDIODRIVER") == NULL) {
|
|
|
|
setenv("SDL_AUDIODRIVER", "alsa", 1);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
else {
|
2008-10-28 18:47:13 +00:00
|
|
|
#ifndef DISABLE_PYTHON
|
BPython:
- Blender.Window: added function GetPerspMatrix() (Tom Musgrave's patch, thanks);
- added Chris Want's patch to tell argc, argv to the Python interpreter (thanks, Hos);
- Blender.Image: added image.glFree() to free textures bound by the recently added
image.glLoad() (both suggested by Campbell Barton -- thanks, with these Blender can
be used to load textures for scripts);
- Blender.Sound: removed for now at least a few get/set methods of vars that can't be
accessed via interface;
- renamed Get/makeActive to Get/setCurrent in Blender.World (actually added alias for
now), same in Blender.Sound: renamed makeActive to setCurrent. Stephen Swaney
pointed this some weeks ago, we should stick to one naming convention.
- added documentation for Sound and Window.Theme modules and the other added
functions, made other small updates.
- Blender.Object: made 'worldspace' become the default output of .getMatrix and .mat/.matrix:
after reading a discussion on blender.org's Python forum where eeshlo mentioned the
pre 2.34 default was worldspace, I took a better look at Blender's relevant code,
confirmed, talked to Theeth about this and as he suggested am changing the default
back to 'worldspace'.
2004-10-20 05:51:24 +00:00
|
|
|
BPY_start_python(argc, argv);
|
2008-10-28 18:47:13 +00:00
|
|
|
#endif
|
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 */
|
|
|
|
|
2004-04-21 13:38:54 +00:00
|
|
|
// (ton) Commented out. I have no idea whats thisfor... will mail around!
|
|
|
|
// SYS_WriteCommandLineInt(syshandle,"noaudio",1);
|
|
|
|
// audio = 0;
|
|
|
|
// sound_init_audio();
|
|
|
|
// if (G.f & G_DEBUG) printf("setting audio to: %d\n", audio);
|
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
|
|
|
/**
|
|
|
|
* NOTE: the U.pythondir string is NULL until BIF_init() is executed,
|
|
|
|
* so we provide the BPY_ function below to append the user defined
|
|
|
|
* pythondir to Python's sys.path at this point. Simply putting
|
|
|
|
* BIF_init() before BPY_start_python() crashes Blender at startup.
|
|
|
|
* Update: now this function also inits the bpymenus, which also depend
|
|
|
|
* on U.pythondir.
|
|
|
|
*/
|
|
|
|
BPY_post_start_python();
|
2008-10-28 18:47:13 +00:00
|
|
|
#endif
|
|
|
|
|
2003-04-28 02:15:46 +00:00
|
|
|
#ifdef WITH_QUICKTIME
|
|
|
|
|
2003-09-18 11:41:50 +00:00
|
|
|
quicktime_init();
|
2003-09-09 21:26:34 +00:00
|
|
|
|
|
|
|
#endif /* WITH_QUICKTIME */
|
2004-01-04 22:10:36 +00:00
|
|
|
|
2005-11-22 18:50:03 +00:00
|
|
|
/* dynamically load libtiff, if available */
|
|
|
|
libtiff_init();
|
2006-01-05 13:46:27 +00:00
|
|
|
if (!G.have_libtiff && (G.f & G_DEBUG)) {
|
2005-11-22 18:50:03 +00:00
|
|
|
printf("Unable to load: libtiff.\n");
|
|
|
|
printf("Try setting the BF_TIFF_LIB environment variable if you want this support.\n");
|
|
|
|
printf("Example: setenv BF_TIFF_LIB /usr/lib/libtiff.so\n");
|
|
|
|
}
|
|
|
|
|
2003-09-09 21:26:34 +00:00
|
|
|
/* OK we are ready for it */
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
for(a=1; a<argc; a++) {
|
|
|
|
if (G.afbreek==1) break;
|
|
|
|
|
|
|
|
if(argv[a][0] == '-') {
|
|
|
|
switch(argv[a][1]) {
|
2007-08-18 00:02:50 +00:00
|
|
|
case '-': /* -- ends argument processing */
|
|
|
|
a = argc;
|
|
|
|
break;
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
case 'p': /* prefsize */
|
|
|
|
a+= 4;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 'g':
|
|
|
|
{
|
|
|
|
/**
|
2003-06-18 03:48:55 +00:00
|
|
|
gameengine parameters are automaticly put into system
|
|
|
|
-g [paramname = value]
|
|
|
|
-g [boolparamname]
|
|
|
|
example:
|
|
|
|
-g novertexarrays
|
|
|
|
-g maxvertexarraysize = 512
|
|
|
|
*/
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2004-01-04 22:10:36 +00:00
|
|
|
if(++a < argc)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
/* name arg eaten */
|
2004-01-04 22:10:36 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
} else
|
|
|
|
{
|
|
|
|
SYS_WriteCommandLineInt(syshandle,argv[a],1);
|
2004-01-04 22:10:36 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
/* doMipMap */
|
|
|
|
if (!strcmp(argv[a],"nomipmap"))
|
|
|
|
{
|
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
|
|
|
GPU_set_mipmap(0); //doMipMap = 0;
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
/* linearMipMap */
|
|
|
|
if (!strcmp(argv[a],"linearmipmap"))
|
|
|
|
{
|
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
|
|
|
GPU_set_linear_mipmap(1); //linearMipMap = 1;
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2004-01-04 22:10:36 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
} /* if (*(argv[a+1]) == '=') */
|
|
|
|
} /* if(++a < argc) */
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 'f':
|
|
|
|
a++;
|
2006-03-19 16:25:32 +00:00
|
|
|
if (G.scene) {
|
|
|
|
if (a < argc) {
|
|
|
|
int frame= MIN2(MAXFRAME, MAX2(1, atoi(argv[a])));
|
|
|
|
Render *re= RE_NewRender(G.scene->id.name);
|
2008-10-28 18:47:13 +00:00
|
|
|
#ifndef DISABLE_PYTHON
|
2008-09-18 22:33:49 +00:00
|
|
|
if (G.f & G_DOSCRIPTLINKS)
|
|
|
|
BPY_do_all_scripts(SCRIPT_RENDER, 0);
|
2008-10-28 18:47:13 +00:00
|
|
|
#endif
|
2008-09-19 21:57:15 +00:00
|
|
|
RE_BlenderAnim(re, G.scene, frame, frame, G.scene->frame_step);
|
2008-10-28 18:47:13 +00:00
|
|
|
#ifndef DISABLE_PYTHON
|
2008-09-18 22:33:49 +00:00
|
|
|
BPY_do_all_scripts(SCRIPT_POSTRENDER, 0);
|
2008-10-28 18:47:13 +00:00
|
|
|
#endif
|
2006-03-19 16:25:32 +00:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-f'.\n");
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'a':
|
|
|
|
if (G.scene) {
|
2006-03-08 17:27:20 +00:00
|
|
|
Render *re= RE_NewRender(G.scene->id.name);
|
2008-10-28 18:47:13 +00:00
|
|
|
#ifndef DISABLE_PYTHON
|
2008-07-26 22:00:26 +00:00
|
|
|
if (G.f & G_DOSCRIPTLINKS)
|
2008-09-18 22:33:49 +00:00
|
|
|
BPY_do_all_scripts(SCRIPT_RENDER, 1);
|
2008-10-28 18:47:13 +00:00
|
|
|
#endif
|
2008-09-19 21:57:15 +00:00
|
|
|
RE_BlenderAnim(re, G.scene, G.scene->r.sfra, G.scene->r.efra, G.scene->frame_step);
|
2008-10-28 18:47:13 +00:00
|
|
|
#ifndef DISABLE_PYTHON
|
2008-07-26 22:00:26 +00:00
|
|
|
if (G.f & G_DOSCRIPTLINKS)
|
2008-09-18 22:33:49 +00:00
|
|
|
BPY_do_all_scripts(SCRIPT_POSTRENDER, 1);
|
2008-10-28 18:47:13 +00:00
|
|
|
#endif
|
2006-03-19 16:25:32 +00:00
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-a'.\n");
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'S':
|
|
|
|
if(++a < argc) {
|
|
|
|
set_scene_name(argv[a]);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 's':
|
|
|
|
a++;
|
|
|
|
if(G.scene) {
|
2006-03-19 16:25:32 +00:00
|
|
|
int frame= MIN2(MAXFRAME, MAX2(1, atoi(argv[a])));
|
|
|
|
if (a < argc) (G.scene->r.sfra) = frame;
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-s'.\n");
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'e':
|
|
|
|
a++;
|
|
|
|
if(G.scene) {
|
2006-03-19 16:25:32 +00:00
|
|
|
int frame= MIN2(MAXFRAME, MAX2(1, atoi(argv[a])));
|
|
|
|
if (a < argc) (G.scene->r.efra) = frame;
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-e'.\n");
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
break;
|
2008-09-19 21:57:15 +00:00
|
|
|
case 'j':
|
|
|
|
a++;
|
|
|
|
if(G.scene) {
|
|
|
|
int fstep= MIN2(MAXFRAME, MAX2(1, atoi(argv[a])));
|
|
|
|
if (a < argc) (G.scene->frame_step) = fstep;
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-j'.\n");
|
|
|
|
}
|
|
|
|
break;
|
BPython:
- tentative fix for scripts with CR/LF endings and split lines:
in 2.32, the ac3d and vrml2 exporters, for example, had lines
split with '\\\\' and so gave syntax errors when executed on Win
platforms, because the scripts bundled with Win binaries had dos
line endings.
- Chris Keith has written code to execute Python scripts from the
command-line, with '-P ' switch: "blender -P filename":
a Blender.Quit function was also added, so Blender can quit after
running the script (end the script with Blender.Quit()), but there's
still work to be done in this part, including adding more functions,
to load / save .blend files and to run scripts. More testing and
discussions are necessary.
Thanks Chris, for both your contributions and your patience, since I
wasn't available to check / commit this for a while.
2004-03-31 04:18:39 +00:00
|
|
|
case 'P':
|
2008-10-28 18:47:13 +00:00
|
|
|
#ifndef DISABLE_PYTHON
|
BPython:
- tentative fix for scripts with CR/LF endings and split lines:
in 2.32, the ac3d and vrml2 exporters, for example, had lines
split with '\\\\' and so gave syntax errors when executed on Win
platforms, because the scripts bundled with Win binaries had dos
line endings.
- Chris Keith has written code to execute Python scripts from the
command-line, with '-P ' switch: "blender -P filename":
a Blender.Quit function was also added, so Blender can quit after
running the script (end the script with Blender.Quit()), but there's
still work to be done in this part, including adding more functions,
to load / save .blend files and to run scripts. More testing and
discussions are necessary.
Thanks Chris, for both your contributions and your patience, since I
wasn't available to check / commit this for a while.
2004-03-31 04:18:39 +00:00
|
|
|
a++;
|
2008-04-17 14:10:40 +00:00
|
|
|
if (a < argc) {
|
|
|
|
/* If we're not running in background mode, then give python a valid screen */
|
|
|
|
if ((G.background==0) && (scr_init==0)) {
|
|
|
|
main_init_screen();
|
|
|
|
scr_init = 1;
|
|
|
|
}
|
|
|
|
BPY_run_python_script (argv[a]);
|
|
|
|
}
|
BPython:
- tentative fix for scripts with CR/LF endings and split lines:
in 2.32, the ac3d and vrml2 exporters, for example, had lines
split with '\\\\' and so gave syntax errors when executed on Win
platforms, because the scripts bundled with Win binaries had dos
line endings.
- Chris Keith has written code to execute Python scripts from the
command-line, with '-P ' switch: "blender -P filename":
a Blender.Quit function was also added, so Blender can quit after
running the script (end the script with Blender.Quit()), but there's
still work to be done in this part, including adding more functions,
to load / save .blend files and to run scripts. More testing and
discussions are necessary.
Thanks Chris, for both your contributions and your patience, since I
wasn't available to check / commit this for a while.
2004-03-31 04:18:39 +00:00
|
|
|
else printf("\nError: you must specify a Python script after '-P '.\n");
|
2008-10-28 18:47:13 +00:00
|
|
|
#else
|
|
|
|
printf("This blender was built without python support\n");
|
|
|
|
#endif /* DISABLE_PYTHON */
|
BPython:
- tentative fix for scripts with CR/LF endings and split lines:
in 2.32, the ac3d and vrml2 exporters, for example, had lines
split with '\\\\' and so gave syntax errors when executed on Win
platforms, because the scripts bundled with Win binaries had dos
line endings.
- Chris Keith has written code to execute Python scripts from the
command-line, with '-P ' switch: "blender -P filename":
a Blender.Quit function was also added, so Blender can quit after
running the script (end the script with Blender.Quit()), but there's
still work to be done in this part, including adding more functions,
to load / save .blend files and to run scripts. More testing and
discussions are necessary.
Thanks Chris, for both your contributions and your patience, since I
wasn't available to check / commit this for a while.
2004-03-31 04:18:39 +00:00
|
|
|
break;
|
2006-03-19 16:25:32 +00:00
|
|
|
case 'o':
|
|
|
|
a++;
|
|
|
|
if (a < argc){
|
|
|
|
if(G.scene) {
|
|
|
|
BLI_strncpy(G.scene->r.pic, argv[a], FILE_MAXDIR);
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-o'.\n");
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
printf("\nError: you must specify a path after '-o '.\n");
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'F':
|
|
|
|
a++;
|
|
|
|
if (a < argc){
|
|
|
|
if(!G.scene) {
|
|
|
|
printf("\nError: no blend loaded. order the arguments so '-F ' is after the blend is loaded.\n");
|
|
|
|
} else {
|
|
|
|
if (!strcmp(argv[a],"TGA")) G.scene->r.imtype = R_TARGA;
|
|
|
|
else if (!strcmp(argv[a],"IRIS")) G.scene->r.imtype = R_IRIS;
|
|
|
|
else if (!strcmp(argv[a],"HAMX")) G.scene->r.imtype = R_HAMX;
|
2008-01-03 10:27:29 +00:00
|
|
|
#ifdef WITH_DDS
|
|
|
|
else if (!strcmp(argv[a],"DDS")) G.scene->r.imtype = R_DDS;
|
|
|
|
#endif
|
2006-03-19 16:25:32 +00:00
|
|
|
else if (!strcmp(argv[a],"JPEG")) G.scene->r.imtype = R_JPEG90;
|
|
|
|
else if (!strcmp(argv[a],"MOVIE")) G.scene->r.imtype = R_MOVIE;
|
|
|
|
else if (!strcmp(argv[a],"IRIZ")) G.scene->r.imtype = R_IRIZ;
|
|
|
|
else if (!strcmp(argv[a],"RAWTGA")) G.scene->r.imtype = R_RAWTGA;
|
|
|
|
else if (!strcmp(argv[a],"AVIRAW")) G.scene->r.imtype = R_AVIRAW;
|
|
|
|
else if (!strcmp(argv[a],"AVIJPEG")) G.scene->r.imtype = R_AVIJPEG;
|
|
|
|
else if (!strcmp(argv[a],"PNG")) G.scene->r.imtype = R_PNG;
|
|
|
|
else if (!strcmp(argv[a],"AVICODEC")) G.scene->r.imtype = R_AVICODEC;
|
|
|
|
else if (!strcmp(argv[a],"QUICKTIME")) G.scene->r.imtype = R_QUICKTIME;
|
|
|
|
else if (!strcmp(argv[a],"BMP")) G.scene->r.imtype = R_BMP;
|
|
|
|
else if (!strcmp(argv[a],"HDR")) G.scene->r.imtype = R_RADHDR;
|
2008-02-05 19:31:21 +00:00
|
|
|
else if (!strcmp(argv[a],"TIFF")) G.scene->r.imtype = R_TIFF;
|
2008-01-03 10:27:29 +00:00
|
|
|
#ifdef WITH_OPENEXR
|
2006-03-19 16:25:32 +00:00
|
|
|
else if (!strcmp(argv[a],"EXR")) G.scene->r.imtype = R_OPENEXR;
|
2008-02-05 19:31:21 +00:00
|
|
|
else if (!strcmp(argv[a],"MULTILAYER")) G.scene->r.imtype = R_MULTILAYER;
|
2008-01-03 10:27:29 +00:00
|
|
|
#endif
|
2006-03-19 16:25:32 +00:00
|
|
|
else if (!strcmp(argv[a],"MPEG")) G.scene->r.imtype = R_FFMPEG;
|
|
|
|
else if (!strcmp(argv[a],"FRAMESERVER")) G.scene->r.imtype = R_FRAMESERVER;
|
|
|
|
else if (!strcmp(argv[a],"CINEON")) G.scene->r.imtype = R_CINEON;
|
|
|
|
else if (!strcmp(argv[a],"DPX")) G.scene->r.imtype = R_DPX;
|
2009-01-23 21:08:01 +00:00
|
|
|
#if WITH_OPENJPEG
|
|
|
|
else if (!strcmp(argv[a],"JP2")) G.scene->r.imtype = R_JP2;
|
|
|
|
#endif
|
2008-01-03 14:53:44 +00:00
|
|
|
else printf("\nError: Format from '-F' not known or not compiled in this release.\n");
|
2006-03-19 16:25:32 +00:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
printf("\nError: no blend loaded. cannot use '-x'.\n");
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2006-11-29 19:31:45 +00:00
|
|
|
case 't':
|
|
|
|
a++;
|
2009-01-15 18:06:06 +00:00
|
|
|
if (a < argc) {
|
|
|
|
if(G.background) {
|
|
|
|
RE_set_max_threads(atoi(argv[a]));
|
|
|
|
} else {
|
|
|
|
printf("Warning: threads can only be set in background mode\n");
|
|
|
|
}
|
2008-06-23 16:47:15 +00:00
|
|
|
} else {
|
2009-01-15 18:06:06 +00:00
|
|
|
printf("\nError: you must specify a number of threads between 0 and 8 '-t '.\n");
|
2006-11-29 19:31:45 +00:00
|
|
|
}
|
|
|
|
break;
|
2006-03-19 16:25:32 +00:00
|
|
|
case 'x': /* extension */
|
|
|
|
a++;
|
|
|
|
if (a < argc) {
|
|
|
|
if(G.scene) {
|
|
|
|
if (argv[a][0] == '0') {
|
|
|
|
G.scene->r.scemode &= ~R_EXTENSION;
|
|
|
|
} else if (argv[a][0] == '1') {
|
|
|
|
G.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");
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
printf("\nError: you must specify a path after '- '.\n");
|
|
|
|
}
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
}
|
2007-12-28 21:16:00 +00:00
|
|
|
else {
|
|
|
|
|
|
|
|
/* Make the path absolute because its needed for relative linked blends to be found */
|
|
|
|
char filename[FILE_MAXDIR + FILE_MAXFILE];
|
|
|
|
|
|
|
|
BLI_strncpy(filename, argv[a], sizeof(filename));
|
2008-09-15 01:32:53 +00:00
|
|
|
BLI_convertstringcwd(filename);
|
2007-12-28 21:16:00 +00:00
|
|
|
|
2007-11-24 17:08:40 +00:00
|
|
|
if (G.background) {
|
2008-02-11 13:30:52 +00:00
|
|
|
int retval = BKE_read_file(filename, NULL);
|
2007-11-24 17:08:40 +00:00
|
|
|
sound_initialize_sounds();
|
2008-02-11 13:30:52 +00:00
|
|
|
|
|
|
|
/*we successfully loaded a blend file, get sure that
|
|
|
|
pointcache works */
|
|
|
|
if (retval!=0) G.relbase_valid = 1;
|
2007-11-24 17:08:40 +00:00
|
|
|
|
|
|
|
/* happens for the UI on file reading too */
|
|
|
|
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 */
|
2007-12-28 21:16:00 +00:00
|
|
|
BIF_read_file(filename);
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
}
|
2004-01-04 22:10:36 +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) */
|
2002-10-12 11:37:38 +00:00
|
|
|
exit_usiblender();
|
|
|
|
}
|
2008-04-17 14:10:40 +00:00
|
|
|
|
|
|
|
if (scr_init==0) {
|
|
|
|
main_init_screen();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2008-04-27 11:37:57 +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)
|
|
|
|
{
|
|
|
|
error("%s", err);
|
|
|
|
}
|
|
|
|
|
2005-07-22 16:40:26 +00:00
|
|
|
static void mem_error_cb(char *errorStr)
|
|
|
|
{
|
|
|
|
fprintf(stderr, errorStr);
|
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); /* */
|
2003-03-24 16:37:08 +00:00
|
|
|
BLI_setInterruptCallBack(blender_test_break);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
}
|