Initial revision
This commit is contained in:
63
source/creator/Makefile
Normal file
63
source/creator/Makefile
Normal file
@@ -0,0 +1,63 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
#
|
||||
# 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
|
||||
# of the License, or (at your option) any later version. The Blender
|
||||
# Foundation also sells licenses for use in proprietary software under
|
||||
# the Blender License. See http://www.blender.org/BL/ for information
|
||||
# about this.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
#
|
||||
|
||||
LIBNAME = creator
|
||||
DIR = $(OCGDIR)/creator
|
||||
|
||||
# this HAS to go
|
||||
CSRCS = creator.c
|
||||
|
||||
include nan_compile.mk
|
||||
|
||||
ifeq ($(OS),$(findstring $(OS), "beos darwin freebsd linux openbsd solaris windows"))
|
||||
CFLAGS += -funsigned-char
|
||||
endif
|
||||
|
||||
CFLAGS += $(LEVEL_1_C_WARNINGS)
|
||||
|
||||
CPPFLAGS += -I$(OPENGL_HEADERS)
|
||||
CPPFLAGS += -I../blender/render/extern/include
|
||||
CPPFLAGS += -I../blender/radiosity/extern/include
|
||||
CPPFLAGS += -I../blender/misc
|
||||
# two needed for the kernel
|
||||
CPPFLAGS += -I../blender/imbuf
|
||||
CPPFLAGS += -I../blender/makesdna
|
||||
CPPFLAGS += -I../blender/blenlib
|
||||
CPPFLAGS += -I../blender/include
|
||||
CPPFLAGS += -I../blender/renderconverter
|
||||
CPPFLAGS += -I../blender/blenkernel
|
||||
CPPFLAGS += -I../blender/bpython/include
|
||||
CPPFLAGS += -I../blender/blenloader
|
||||
CPPFLAGS += -I../kernel/gen_system
|
||||
CPPFLAGS += -I../kernel/gen_messaging
|
||||
CPPFLAGS += -I$(NAN_BLENKEY)/include
|
||||
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
|
37
source/creator/buildinfo.c
Normal file
37
source/creator/buildinfo.c
Normal file
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* 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
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
*/
|
||||
#ifdef BUILD_DATE
|
||||
char * build_date=BUILD_DATE;
|
||||
char * build_time=BUILD_TIME;
|
||||
char * build_platform=BUILD_PLATFORM;
|
||||
char * build_type=BUILD_TYPE;
|
||||
#endif
|
515
source/creator/creator.c
Normal file
515
source/creator/creator.c
Normal file
@@ -0,0 +1,515 @@
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
||||
*
|
||||
* 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
|
||||
* of the License, or (at your option) any later version. The Blender
|
||||
* Foundation also sells licenses for use in proprietary software under
|
||||
* the Blender License. See http://www.blender.org/BL/ for information
|
||||
* about this.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
/* 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"
|
||||
|
||||
#include "BLI_blenlib.h"
|
||||
|
||||
#include "BKE_utildefines.h"
|
||||
#include "BKE_blender.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_scene.h"
|
||||
|
||||
#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"
|
||||
|
||||
#include "BPY_extern.h" // for init of blender python extension
|
||||
|
||||
#include "BSE_headerbuttons.h" // for BIF_read_homefile
|
||||
|
||||
#include "BDR_drawmesh.h"
|
||||
|
||||
#include "RE_renderconverter.h"
|
||||
#include "blendertimer.h"
|
||||
|
||||
#include "playanim_ext.h"
|
||||
#include "mydevice.h"
|
||||
#include "render.h"
|
||||
#include "nla.h"
|
||||
|
||||
#include "license_key.h"
|
||||
|
||||
/* for passing information between creator and gameengine */
|
||||
#include "SYS_System.h"
|
||||
|
||||
#include <signal.h>
|
||||
#ifdef __FreeBSD__
|
||||
#ifndef __OpenBSD__
|
||||
#include <floatingpoint.h>
|
||||
#include <sys/rtprio.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// from buildinfo.c
|
||||
extern char * build_date;
|
||||
extern char * build_time;
|
||||
extern char * build_platform;
|
||||
extern char * build_type;
|
||||
|
||||
/* Local Function prototypes */
|
||||
static void print_help();
|
||||
|
||||
/* for the callbacks: */
|
||||
|
||||
extern int pluginapi_force_ref(void); /* from blenpluginapi:pluginapi.c */
|
||||
|
||||
char bprogname[FILE_MAXDIR+FILE_MAXFILE];
|
||||
|
||||
/* Initialise callbacks for the modules that need them */
|
||||
void setCallbacks(void);
|
||||
|
||||
static void fpe_handler(int sig)
|
||||
{
|
||||
// printf("SIGFPE trapped\n");
|
||||
}
|
||||
|
||||
static void print_help(void)
|
||||
{
|
||||
printf ("Blender V %d.%02d\n", G.version/100, G.version%100);
|
||||
printf ("Usage: blender [options ...] [file]\n");
|
||||
|
||||
printf ("\nRender options:\n");
|
||||
printf (" -b <file>\tRender <file> in background\n");
|
||||
printf (" -S <name>\tSet scene <name>\n");
|
||||
printf (" -f <frame>\tRender frame <frame> and save it\n");
|
||||
printf (" -s <frame>\tSet start to frame <frame> (use with -a)\n");
|
||||
printf (" -e <frame>\tSet end to frame (use with -a)<frame>\n");
|
||||
printf (" -a\t\tRender animation\n");
|
||||
|
||||
printf ("\nAnimation options:\n");
|
||||
printf (" -a <file(s)>\tPlayback <file(s)>\n");
|
||||
printf (" -p <sx> <sy>\tOpen with lower left corner at <sx>, <sy>\n");
|
||||
printf (" -m\t\tRead from disk (Don't buffer)\n");
|
||||
|
||||
printf ("\nWindow options:\n");
|
||||
printf (" -w\t\tForce opening with borders\n");
|
||||
#ifdef WIN32
|
||||
printf (" -W\t\tForce opening without borders\n");
|
||||
#endif
|
||||
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");
|
||||
|
||||
|
||||
|
||||
|
||||
printf ("\nMisc options:\n");
|
||||
printf (" -d\t\tTurn debugging on\n");
|
||||
printf (" -noaudio\tDisable audio on systems that support audio\n");
|
||||
printf (" -h\t\tPrint this help text\n");
|
||||
printf (" -y\t\tDisable OnLoad scene scripts, use -Y to find out why its -y\n");
|
||||
#ifdef WIN32
|
||||
printf (" -R\t\tRegister .blend extension\n");
|
||||
#endif
|
||||
}
|
||||
double PIL_check_seconds_timer(void);
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int a, i, stax, stay, sizx, sizy;
|
||||
SYS_SystemHandle syshandle;
|
||||
Scene *sce;
|
||||
|
||||
#if defined(WIN32) || defined (__linux__)
|
||||
int audio = 1;
|
||||
#else
|
||||
int audio = 0;
|
||||
#endif
|
||||
|
||||
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];
|
||||
int scr_x,scr_y;
|
||||
|
||||
argc= 1;
|
||||
|
||||
setprefsize(100, 100, 800, 600);
|
||||
|
||||
winlay_get_screensize(&scr_x, &scr_y);
|
||||
winlay_process_events(0);
|
||||
if (GHOST_HACK_getFirstFile(firstfilebuf)) {
|
||||
argc= 2;
|
||||
argv[1]= firstfilebuf;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
fpsetmask(0);
|
||||
#endif
|
||||
#ifdef __linux__
|
||||
#ifdef __alpha__
|
||||
signal (SIGFPE, fpe_handler);
|
||||
#endif
|
||||
#endif
|
||||
#if defined(__sgi)
|
||||
signal (SIGFPE, fpe_handler);
|
||||
#endif
|
||||
|
||||
// copy path to executable in bprogname. playanim and creting runtimes
|
||||
// need this.
|
||||
|
||||
BLI_where_am_i(bprogname, argv[0]);
|
||||
|
||||
/* Hack - force inclusion of the plugin api functions,
|
||||
* see blenpluginapi:pluginapi.c
|
||||
*/
|
||||
pluginapi_force_ref();
|
||||
|
||||
initglobals(); /* blender.c */
|
||||
|
||||
syshandle = SYS_GetSystem();
|
||||
GEN_init_messaging_system();
|
||||
|
||||
/* eerste testen op background */
|
||||
G.f |= G_SCENESCRIPT; /* scenescript always set! */
|
||||
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);
|
||||
}
|
||||
|
||||
/* Handle -* switches */
|
||||
else if(argv[a][0] == '-') {
|
||||
switch(argv[a][1]) {
|
||||
case 'a':
|
||||
playanim(argc-1, argv+1);
|
||||
exit(0);
|
||||
break;
|
||||
case 'b':
|
||||
case 'B':
|
||||
G.background = 1;
|
||||
a= argc;
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
/* unified render pipeline */
|
||||
/* G.magic = 1; has become obsolete */
|
||||
printf("-m: enable unified renderer has become obsolete. Set \n");
|
||||
printf("\tthis option per individual file now.\n");
|
||||
break;
|
||||
|
||||
case 'y':
|
||||
G.f &= ~G_SCENESCRIPT;
|
||||
break;
|
||||
|
||||
case 'Y':
|
||||
printf ("-y was used to disable scene scripts because,\n");
|
||||
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);
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __sgi
|
||||
setuid(getuid()); /* einde superuser */
|
||||
#endif
|
||||
|
||||
RE_init_render_data(); /* moet vooraan staan ivm R.winpos uit defaultfile */
|
||||
|
||||
if(G.background==0) {
|
||||
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]);
|
||||
|
||||
setprefsize(stax, stay, sizx, sizy);
|
||||
break;
|
||||
case 'd':
|
||||
G.f |= G_DEBUG; /* std output printf's */
|
||||
printf ("Blender V %d.%02d\n", G.version/100, G.version%100);
|
||||
#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':
|
||||
/* XXX, fixme zr, with borders */
|
||||
break;
|
||||
case 'W':
|
||||
/* XXX, fixme zr, borderless on win32 */
|
||||
break;
|
||||
case 'n':
|
||||
case 'N':
|
||||
if (strcasecmp(argv[a], "-noaudio") == 0|| strcasecmp(argv[a], "-nosound") == 0) {
|
||||
/**
|
||||
notify the gameengine that no audio is wanted, even if the user didn't give
|
||||
the flag -g noaudio
|
||||
*/
|
||||
|
||||
SYS_WriteCommandLineInt(syshandle,"noaudio",1);
|
||||
audio = 0;
|
||||
if (G.f & G_DEBUG) printf("setting audio to: %d\n", audio);
|
||||
}
|
||||
else if (strcasecmp(argv[a], "-nofrozen") == 0) {
|
||||
/* disable initialization of frozen python modules */
|
||||
if (G.f & G_DEBUG) printf("disable frozen modules\n");
|
||||
G.f |= G_NOFROZEN;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BPY_start_python();
|
||||
|
||||
/* NOTE: initialize_sound *must be* after start_python,
|
||||
* at least on FreeBSD */
|
||||
|
||||
sound_init_audio();
|
||||
|
||||
BIF_init();
|
||||
}
|
||||
else {
|
||||
BPY_start_python();
|
||||
SYS_WriteCommandLineInt(syshandle,"noaudio",1);
|
||||
audio = 0;
|
||||
sound_init_audio();
|
||||
if (G.f & G_DEBUG) printf("setting audio to: %d\n", audio);
|
||||
}
|
||||
|
||||
RE_init_filt_mask();
|
||||
|
||||
/* OK we zijn er klaar voor */
|
||||
|
||||
for(a=1; a<argc; a++) {
|
||||
if (G.afbreek==1) break;
|
||||
|
||||
if(argv[a][0] == '-') {
|
||||
switch(argv[a][1]) {
|
||||
case 'p': /* prefsize */
|
||||
a+= 4;
|
||||
break;
|
||||
|
||||
case 'g':
|
||||
{
|
||||
/**
|
||||
gameengine parameters are automaticly put into system
|
||||
-g [paramname = value]
|
||||
-g [boolparamname]
|
||||
example:
|
||||
-g novertexarrays
|
||||
-g maxvertexarraysize = 512
|
||||
*/
|
||||
|
||||
if(++a < argc)
|
||||
{
|
||||
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 */
|
||||
|
||||
} else
|
||||
{
|
||||
|
||||
SYS_WriteCommandLineInt(syshandle,argv[a],1);
|
||||
|
||||
/* doMipMap */
|
||||
if (!strcmp(argv[a],"nomipmap"))
|
||||
{
|
||||
set_mipmap(0); //doMipMap = 0;
|
||||
}
|
||||
/* linearMipMap */
|
||||
if (!strcmp(argv[a],"linearmipmap"))
|
||||
{
|
||||
set_linear_mipmap(1); //linearMipMap = 1;
|
||||
}
|
||||
|
||||
|
||||
} /* if (*(argv[a+1]) == '=') */
|
||||
} /* if(++a < argc) */
|
||||
break;
|
||||
}
|
||||
case 'f':
|
||||
a++;
|
||||
if (G.scene && a < argc) {
|
||||
G.real_sfra = (G.scene->r.sfra);
|
||||
G.real_efra = (G.scene->r.efra);
|
||||
(G.scene->r.sfra) = atoi(argv[a]);
|
||||
(G.scene->r.efra) = (G.scene->r.sfra);
|
||||
RE_animrender(NULL);
|
||||
}
|
||||
break;
|
||||
case 'a':
|
||||
if (G.scene) {
|
||||
G.real_sfra = (G.scene->r.sfra);
|
||||
G.real_efra = (G.scene->r.efra);
|
||||
RE_animrender(NULL);
|
||||
}
|
||||
break;
|
||||
case 'S':
|
||||
if(++a < argc) {
|
||||
set_scene_name(argv[a]);
|
||||
}
|
||||
break;
|
||||
case 's':
|
||||
a++;
|
||||
if(G.scene) {
|
||||
if (a < argc) (G.scene->r.sfra) = atoi(argv[a]);
|
||||
}
|
||||
break;
|
||||
case 'e':
|
||||
a++;
|
||||
if(G.scene) {
|
||||
if (a < argc) (G.scene->r.efra) = atoi(argv[a]);
|
||||
}
|
||||
break;
|
||||
case 'R':
|
||||
/* Registering filetypes only makes sense on windows... */
|
||||
#ifdef WIN32
|
||||
RegisterBlendExtension(argv[0]);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
BKE_read_file(argv[a], NULL);
|
||||
sound_initialize_sounds();
|
||||
}
|
||||
}
|
||||
|
||||
if(G.background)
|
||||
{
|
||||
exit_usiblender();
|
||||
}
|
||||
|
||||
setscreen(G.curscreen);
|
||||
|
||||
if(G.main->scene.first==0) {
|
||||
sce= add_scene("1");
|
||||
set_scene(sce);
|
||||
}
|
||||
|
||||
screenmain();
|
||||
|
||||
return 0;
|
||||
} /* end of int main(argc,argv) */
|
||||
|
||||
static void error_cb(char *err)
|
||||
{
|
||||
error("%s", err);
|
||||
}
|
||||
|
||||
void setCallbacks(void)
|
||||
{
|
||||
/* Error output from the alloc routines: */
|
||||
MEM_set_error_stream(stderr);
|
||||
|
||||
|
||||
/* BLI_blenlib: */
|
||||
|
||||
BLI_setErrorCallBack(error_cb); /* */
|
||||
BLI_setInterruptCallBack(MISC_test_break);
|
||||
|
||||
/* render module: execution flow, timers, cursors and display. */
|
||||
RE_set_getrenderdata_callback(RE_rotateBlenderScene);
|
||||
RE_set_freerenderdata_callback(RE_freeRotateBlenderScene);
|
||||
}
|
Reference in New Issue
Block a user