Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/gameengine/BlenderRoutines')
-rw-r--r--source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp73
-rw-r--r--source/gameengine/BlenderRoutines/CMakeLists.txt2
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp16
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderGL.cpp24
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h26
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp4
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp166
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h3
-rw-r--r--source/gameengine/BlenderRoutines/Makefile3
-rw-r--r--source/gameengine/BlenderRoutines/SConscript5
10 files changed, 185 insertions, 137 deletions
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index d89d2d80ab4..d8de24c610c 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -70,9 +70,10 @@
#include "DNA_view3d_types.h"
#include "DNA_screen_types.h"
#include "BKE_global.h"
+#include "BKE_report.h"
#include "BKE_utildefines.h"
-#include "BIF_screen.h"
-#include "BIF_scrarea.h"
+//XXX #include "BIF_screen.h"
+//XXX #include "BIF_scrarea.h"
#include "BKE_main.h"
#include "BLI_blenlib.h"
@@ -86,29 +87,39 @@
#ifdef __cplusplus
extern "C" {
#endif
-#include "BSE_headerbuttons.h"
+//XXX #include "BSE_headerbuttons.h"
void update_for_newframe();
#ifdef __cplusplus
}
#endif
-static BlendFileData *load_game_data(char *filename) {
- BlendReadError error;
- BlendFileData *bfd= BLO_read_from_file(filename, &error);
+static BlendFileData *load_game_data(char *filename)
+{
+ ReportList reports;
+ BlendFileData *bfd;
+
+ BKE_reports_init(&reports, RPT_STORE);
+ bfd= BLO_read_from_file(filename, &reports);
+
if (!bfd) {
- printf("Loading %s failed: %s\n", filename, BLO_bre_as_string(error));
+ printf("Loading %s failed: ", filename);
+ BKE_reports_print(&reports, RPT_ERROR);
}
+
+ BKE_reports_clear(&reports);
+
return bfd;
}
extern "C" void StartKetsjiShell(struct ScrArea *area,
+ struct ARegion *ar,
char* scenename,
struct Main* maggie1,
struct SpaceIpo *sipo,
int always_use_expand_framing)
{
int exitrequested = KX_EXIT_REQUEST_NO_REQUEST;
-
+ Scene *scene= NULL; // XXX give as arg
Main* blenderdata = maggie1;
char* startscenename = scenename;
@@ -131,6 +142,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
do
{
View3D *v3d= (View3D*) area->spacedata.first;
+ RegionView3D *rv3d= (RegionView3D*) ar->regiondata;
// get some preferences
SYS_SystemHandle syshandle = SYS_GetSystem();
@@ -201,12 +213,12 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
//lock frame and camera enabled - storing global values
- int tmp_lay= G.scene->lay;
- Object *tmp_camera = G.scene->camera;
+ int tmp_lay= scene->lay;
+ Object *tmp_camera = scene->camera;
- if (G.vd->scenelock==0){
- G.scene->lay= v3d->lay;
- G.scene->camera= v3d->camera;
+ if (v3d->scenelock==0){
+ scene->lay= v3d->lay;
+ scene->camera= v3d->camera;
}
@@ -218,17 +230,17 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
for (i = 0; i < 16; i++)
{
- float *viewmat_linear= (float*) v3d->viewmat;
+ float *viewmat_linear= (float*) rv3d->viewmat;
viewmat.setElem(i, viewmat_linear[i]);
}
for (i = 0; i < 16; i++)
{
- float *projmat_linear = (float*) area->winmat;
+ float *projmat_linear; //XXX = (float*) area->winmat;
projmat.setElem(i, projmat_linear[i]);
}
if(v3d->persp==V3D_CAMOB) {
- camzoom = (1.41421 + (v3d->camzoom / 50.0));
+ camzoom = (1.41421 + (rv3d->camzoom / 50.0));
camzoom *= camzoom;
}
else
@@ -357,7 +369,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
blscene);
// some python things
- PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest);
+ PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest, blenderdata);
ketsjiengine->SetPythonDictionary(dictionaryobject);
initRasterizer(rasterizer, canvas);
PyObject *gameLogic = initGameLogic(ketsjiengine, startscene);
@@ -368,10 +380,15 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
initGameKeys();
initPythonConstraintBinding();
initMathutils();
+ initBGL();
#ifdef WITH_FFMPEG
initVideoTexture();
#endif
+ //initialize Dome Settings
+ if(blscene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME)
+ ketsjiengine->InitDome(blscene->r.domesize, blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle, blscene->r.domeresbuf, blscene->r.dometext);
+
if (sceneconverter)
{
// convert and add scene
@@ -413,10 +430,10 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
}
// test for the ESC key
- while (qtest())
+ while (0) //XXX while (qtest())
{
short val;
- unsigned short event = extern_qread(&val);
+ unsigned short event = 0; //XXX extern_qread(&val);
if (keyboarddevice->ConvertBlenderEvent(event,val))
exitrequested = KX_EXIT_REQUEST_BLENDER_ESC;
@@ -425,9 +442,9 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
* should this really be?
*/
if (event==MOUSEX) {
- val = val - scrarea_get_win_x(area);
+ val = 0;//XXX val - scrarea_get_win_x(area);
} else if (event==MOUSEY) {
- val = scrarea_get_win_height(area) - (val - scrarea_get_win_y(area)) - 1;
+ val = 0;//XXX scrarea_get_win_height(area) - (val - scrarea_get_win_y(area)) - 1;
}
mousedevice->ConvertBlenderEvent(event,val);
@@ -473,9 +490,9 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
gameLogic_keys = NULL;
}
//lock frame and camera enabled - restoring global values
- if (G.vd->scenelock==0){
- G.scene->lay= tmp_lay;
- G.scene->camera= tmp_camera;
+ if (v3d->scenelock==0){
+ scene->lay= tmp_lay;
+ scene->camera= tmp_camera;
}
// set the cursor back to normal
@@ -527,7 +544,9 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
SND_DeviceManager::Unsubscribe();
} while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME);
-
+
+ Py_DECREF(pyGlobalDict);
+
if (bfd) BLO_blendfiledata_free(bfd);
BLI_strncpy(G.sce, oldsce, sizeof(G.sce));
@@ -537,6 +556,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
}
extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
+ struct ARegion *ar,
char* scenename,
struct Main* maggie,
struct SpaceIpo *sipo,
@@ -656,7 +676,7 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
blscene);
// some python things
- PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest);
+ PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest, blenderdata);
ketsjiengine->SetPythonDictionary(dictionaryobject);
initRasterizer(rasterizer, canvas);
PyObject *gameLogic = initGameLogic(ketsjiengine, startscene);
@@ -664,6 +684,7 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
initGameKeys();
initPythonConstraintBinding();
initMathutils();
+ initBGL();
#ifdef WITH_FFMPEG
initVideoTexture();
#endif
diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt
index d65e6a012df..e090a4b9c56 100644
--- a/source/gameengine/BlenderRoutines/CMakeLists.txt
+++ b/source/gameengine/BlenderRoutines/CMakeLists.txt
@@ -15,6 +15,8 @@ SET(INC
../../../source/gameengine/Ketsji
../../../source/blender/blenlib
../../../source/blender/blenkernel
+ ../../../source/blender/editors/include
+ ../../../source/blender/windowmanager
../../../source/blender
../../../source/blender/include
../../../source/blender/makesdna
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp b/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
index 1604dfe5cce..750a1ef3f93 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
@@ -26,7 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "BIF_scrarea.h"
+//XXX #include "BIF_scrarea.h"
#include "KX_BlenderCanvas.h"
#ifdef HAVE_CONFIG_H
@@ -93,12 +93,12 @@ void KX_BlenderCanvas::ClearBuffer(int type)
int KX_BlenderCanvas::GetWidth(
) const {
- return scrarea_get_win_width(m_area);
+ return 0; //XXX scrarea_get_win_width(m_area);
}
int KX_BlenderCanvas::GetHeight(
) const {
- return scrarea_get_win_height(m_area);
+ return 0; //XXX scrarea_get_win_height(m_area);
}
RAS_Rect &
@@ -116,8 +116,8 @@ SetViewPort(
){
int vp_width = (x2 - x1) + 1;
int vp_height = (y2 - y1) + 1;
- int minx = scrarea_get_win_x(m_area);
- int miny = scrarea_get_win_y(m_area);
+ int minx = 0;//XXX scrarea_get_win_x(m_area);
+ int miny = 0;//XXX scrarea_get_win_y(m_area);
m_area_rect.SetLeft(minx + x1);
m_area_rect.SetBottom(miny + y1);
@@ -159,9 +159,9 @@ void KX_BlenderCanvas::SetMouseState(RAS_MouseState mousestate)
// (0,0) is top left, (width,height) is bottom right
void KX_BlenderCanvas::SetMousePosition(int x,int y)
{
- int winX = scrarea_get_win_x(m_area);
- int winY = scrarea_get_win_y(m_area);
- int winH = scrarea_get_win_height(m_area);
+ int winX = 0;//XXX scrarea_get_win_x(m_area);
+ int winY = 0;//XXX scrarea_get_win_y(m_area);
+ int winH = 0;//XXX scrarea_get_win_height(m_area);
BL_warp_pointer(winX + x, winY + (winH-y-1));
}
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp b/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
index 54d1eb7e011..648ad79210e 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
@@ -44,7 +44,7 @@
#include "BMF_Api.h"
-#include "BIF_gl.h"
+#include "GL/glew.h"
#include "BL_Material.h" // MAXTEX
@@ -65,10 +65,10 @@
#include "BKE_image.h"
extern "C" {
-#include "BDR_drawmesh.h"
-#include "BIF_mywindow.h"
-#include "BIF_toolbox.h"
-#include "BIF_graphics.h" /* For CURSOR_NONE CURSOR_WAIT CURSOR_STD */
+//XXX #include "BDR_drawmesh.h"
+//XXX #include "BIF_mywindow.h"
+//XXX #include "BIF_toolbox.h"
+//XXX #include "BIF_graphics.h" /* For CURSOR_NONE CURSOR_WAIT CURSOR_STD */
}
@@ -84,12 +84,12 @@ void spack(unsigned int ucol)
void BL_warp_pointer(int x,int y)
{
- warp_pointer(x,y);
+ //XXX warp_pointer(x,y);
}
void BL_SwapBuffers()
{
- myswapbuffers();
+ //XXX myswapbuffers();
}
void DisableForText()
@@ -201,19 +201,19 @@ void BL_print_gamedebug_line_padded(char* text, int xco, int yco, int width, int
void BL_HideMouse()
{
- set_cursor(CURSOR_NONE);
+ //XXX set_cursor(CURSOR_NONE);
}
void BL_WaitMouse()
{
- set_cursor(CURSOR_WAIT);
+ //XXX set_cursor(CURSOR_WAIT);
}
void BL_NormalMouse()
{
- set_cursor(CURSOR_STD);
+ //XXX set_cursor(CURSOR_STD);
}
#define MAX_FILE_LENGTH 512
@@ -226,9 +226,9 @@ void BL_MakeScreenShot(struct ScrArea *area, const char* filename)
// filename read - only
/* XXX will need to change at some point */
- BIF_screendump(0);
+ //XXX BIF_screendump(0);
// write+read filename
- write_screendump((char*) copyfilename);
+ //XXX write_screendump((char*) copyfilename);
}
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
index 8e5d508f8cb..7da4b9efb68 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
+++ b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
@@ -35,14 +35,11 @@
#include <map>
-/* need to be here for conversion purposes */
-#ifdef FREE_WINDOWS
-#undef HKEY
-#endif
-
-#include "mydevice.h"
+#include "wm_event_types.h"
#include "SCA_IInputDevice.h"
+
+
/**
Base Class for Blender specific inputdevices. Blender specific inputdevices are used when the gameengine is running in embedded mode instead of standalone mode.
*/
@@ -69,10 +66,10 @@ public:
m_reverseKeyTranslateTable[TIMER0 ] = KX_TIMER0 ;
m_reverseKeyTranslateTable[TIMER1 ] = KX_TIMER1 ;
m_reverseKeyTranslateTable[TIMER2 ] = KX_TIMER2 ;
- m_reverseKeyTranslateTable[TIMER3 ] = KX_TIMER3 ;
-
- // SYSTEM
+ // SYSTEM
+#if 0
+ /* **** XXX **** */
m_reverseKeyTranslateTable[KEYBD ] = KX_KEYBD ;
m_reverseKeyTranslateTable[RAWKEYBD ] = KX_RAWKEYBD ;
m_reverseKeyTranslateTable[REDRAW ] = KX_REDRAW ;
@@ -83,7 +80,8 @@ public:
m_reverseKeyTranslateTable[WINCLOSE ] = KX_WINCLOSE ;
m_reverseKeyTranslateTable[WINQUIT ] = KX_WINQUIT ;
m_reverseKeyTranslateTable[Q_FIRSTTIME ] = KX_Q_FIRSTTIME ;
-
+ /* **** XXX **** */
+#endif
// standard keyboard
m_reverseKeyTranslateTable[AKEY ] = KX_AKEY ;
@@ -93,7 +91,15 @@ public:
m_reverseKeyTranslateTable[EKEY ] = KX_EKEY ;
m_reverseKeyTranslateTable[FKEY ] = KX_FKEY ;
m_reverseKeyTranslateTable[GKEY ] = KX_GKEY ;
+//XXX clean up
+#ifdef WIN32
+#define HKEY 'h'
+#endif
m_reverseKeyTranslateTable[HKEY ] = KX_HKEY ;
+//XXX clean up
+#ifdef WIN32
+#undef HKEY
+#endif
m_reverseKeyTranslateTable[IKEY ] = KX_IKEY ;
m_reverseKeyTranslateTable[JKEY ] = KX_JKEY ;
m_reverseKeyTranslateTable[KKEY ] = KX_KKEY ;
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
index 4b794380610..877a0d39acf 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
@@ -74,7 +74,7 @@ void KX_BlenderKeyboardDevice::NextFrame()
// now convert justpressed keyevents into regular (active) keyevents
int previousTable = 1-m_currentTable;
- for (int keyevent= KX_BEGINKEY; keyevent< KX_ENDKEY;keyevent++)
+ for (int keyevent= KX_BEGINKEY; keyevent<= KX_ENDKEY;keyevent++)
{
SCA_InputEvent& oldevent = m_eventStatusTables[previousTable][keyevent];
if (oldevent.m_status == SCA_InputEvent::KX_JUSTACTIVATED ||
@@ -100,7 +100,7 @@ bool KX_BlenderKeyboardDevice::ConvertBlenderEvent(unsigned short incode,short v
KX_EnumInputs kxevent = this->ToNative(incode);
// only process it, if it's a key
- if (kxevent >= KX_BEGINKEY && kxevent < KX_ENDKEY)
+ if (kxevent >= KX_BEGINKEY && kxevent <= KX_ENDKEY)
{
int previousTable = 1-m_currentTable;
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
index 42ad7769cbd..9dbda3f195b 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
@@ -28,6 +28,8 @@
#include "GL/glew.h"
+#include "DNA_scene_types.h"
+
#include "RAS_IRenderTools.h"
#include "RAS_IRasterizer.h"
#include "RAS_LightObject.h"
@@ -67,6 +69,7 @@ void KX_BlenderRenderTools::BeginFrame(RAS_IRasterizer* rasty)
m_clientobject = NULL;
m_lastlightlayer = -1;
m_lastlighting = false;
+ m_lastauxinfo = NULL;
DisableOpenGLLights();
}
@@ -80,25 +83,27 @@ void KX_BlenderRenderTools::EndFrame(RAS_IRasterizer* rasty)
* has a maximum of 8 lights (simultaneous), so 20 * 8 lights are possible in
* a scene. */
-void KX_BlenderRenderTools::ProcessLighting(RAS_IRasterizer *rasty, int layer, const MT_Transform& viewmat)
+void KX_BlenderRenderTools::ProcessLighting(RAS_IRasterizer *rasty, bool uselights, const MT_Transform& viewmat)
{
- if(m_lastlightlayer == layer)
- return;
+ bool enable = false;
+ int layer= -1;
- m_lastlightlayer = layer;
+ /* find the layer */
+ if(uselights) {
+ if(m_clientobject)
+ layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer();
+ }
- bool enable = false;
+ /* avoid state switching */
+ if(m_lastlightlayer == layer && m_lastauxinfo == m_auxilaryClientInfo)
+ return;
- if (layer >= 0)
- {
- if (m_clientobject)
- {
- if (layer == RAS_LIGHT_OBJECT_LAYER)
- layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer();
+ m_lastlightlayer = layer;
+ m_lastauxinfo = m_auxilaryClientInfo;
- enable = applyLights(layer, viewmat);
- }
- }
+ /* enable/disable lights as needed */
+ if(layer >= 0)
+ enable = applyLights(layer, viewmat);
if(enable)
EnableOpenGLLights(rasty);
@@ -324,11 +329,16 @@ void KX_BlenderRenderTools::PopMatrix()
int KX_BlenderRenderTools::applyLights(int objectlayer, const MT_Transform& viewmat)
{
// taken from blender source, incompatibility between Blender Object / GameObject
+ KX_Scene* kxscene = (KX_Scene*)m_auxilaryClientInfo;
+ int scenelayer = ~0;
float glviewmat[16];
unsigned int count;
float vec[4];
vec[3]= 1.0;
+
+ if(kxscene && kxscene->GetBlenderScene())
+ scenelayer = kxscene->GetBlenderScene()->lay;
for(count=0; count<m_numgllights; count++)
glDisable((GLenum)(GL_LIGHT0+count));
@@ -343,71 +353,77 @@ int KX_BlenderRenderTools::applyLights(int objectlayer, const MT_Transform& view
for (lit = m_lights.begin(), count = 0; !(lit==m_lights.end()) && count < m_numgllights; ++lit)
{
RAS_LightObject* lightdata = (*lit);
- if (lightdata->m_layer & objectlayer)
- {
- vec[0] = (*(lightdata->m_worldmatrix))(0,3);
- vec[1] = (*(lightdata->m_worldmatrix))(1,3);
- vec[2] = (*(lightdata->m_worldmatrix))(2,3);
- vec[3] = 1;
+ KX_Scene* lightscene = (KX_Scene*)lightdata->m_scene;
- if(lightdata->m_type==RAS_LightObject::LIGHT_SUN) {
-
- vec[0] = (*(lightdata->m_worldmatrix))(0,2);
- vec[1] = (*(lightdata->m_worldmatrix))(1,2);
- vec[2] = (*(lightdata->m_worldmatrix))(2,2);
- //vec[0]= base->object->obmat[2][0];
- //vec[1]= base->object->obmat[2][1];
- //vec[2]= base->object->obmat[2][2];
- vec[3]= 0.0;
- glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
- }
- else {
- //vec[3]= 1.0;
- glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
- glLightf((GLenum)(GL_LIGHT0+count), GL_CONSTANT_ATTENUATION, 1.0);
- glLightf((GLenum)(GL_LIGHT0+count), GL_LINEAR_ATTENUATION, lightdata->m_att1/lightdata->m_distance);
- // without this next line it looks backward compatible.
- //attennuation still is acceptable
- glLightf((GLenum)(GL_LIGHT0+count), GL_QUADRATIC_ATTENUATION, lightdata->m_att2/(lightdata->m_distance*lightdata->m_distance));
-
- if(lightdata->m_type==RAS_LightObject::LIGHT_SPOT) {
- vec[0] = -(*(lightdata->m_worldmatrix))(0,2);
- vec[1] = -(*(lightdata->m_worldmatrix))(1,2);
- vec[2] = -(*(lightdata->m_worldmatrix))(2,2);
- //vec[0]= -base->object->obmat[2][0];
- //vec[1]= -base->object->obmat[2][1];
- //vec[2]= -base->object->obmat[2][2];
- glLightfv((GLenum)(GL_LIGHT0+count), GL_SPOT_DIRECTION, vec);
- glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, lightdata->m_spotsize/2.0);
- glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_EXPONENT, 128.0*lightdata->m_spotblend);
- }
- else glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, 180.0);
- }
+ /* only use lights in the same layer as the object */
+ if(!(lightdata->m_layer & objectlayer))
+ continue;
+ /* only use lights in the same scene, and in a visible layer */
+ if(kxscene != lightscene || !(lightdata->m_layer & scenelayer))
+ continue;
+
+ vec[0] = (*(lightdata->m_worldmatrix))(0,3);
+ vec[1] = (*(lightdata->m_worldmatrix))(1,3);
+ vec[2] = (*(lightdata->m_worldmatrix))(2,3);
+ vec[3] = 1;
+
+ if(lightdata->m_type==RAS_LightObject::LIGHT_SUN) {
- if (lightdata->m_nodiffuse)
- {
- vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
- } else {
- vec[0]= lightdata->m_energy*lightdata->m_red;
- vec[1]= lightdata->m_energy*lightdata->m_green;
- vec[2]= lightdata->m_energy*lightdata->m_blue;
- vec[3]= 1.0;
- }
- glLightfv((GLenum)(GL_LIGHT0+count), GL_DIFFUSE, vec);
- if (lightdata->m_nospecular)
- {
- vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
- } else if (lightdata->m_nodiffuse) {
- vec[0]= lightdata->m_energy*lightdata->m_red;
- vec[1]= lightdata->m_energy*lightdata->m_green;
- vec[2]= lightdata->m_energy*lightdata->m_blue;
- vec[3]= 1.0;
+ vec[0] = (*(lightdata->m_worldmatrix))(0,2);
+ vec[1] = (*(lightdata->m_worldmatrix))(1,2);
+ vec[2] = (*(lightdata->m_worldmatrix))(2,2);
+ //vec[0]= base->object->obmat[2][0];
+ //vec[1]= base->object->obmat[2][1];
+ //vec[2]= base->object->obmat[2][2];
+ vec[3]= 0.0;
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
+ }
+ else {
+ //vec[3]= 1.0;
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_CONSTANT_ATTENUATION, 1.0);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_LINEAR_ATTENUATION, lightdata->m_att1/lightdata->m_distance);
+ // without this next line it looks backward compatible.
+ //attennuation still is acceptable
+ glLightf((GLenum)(GL_LIGHT0+count), GL_QUADRATIC_ATTENUATION, lightdata->m_att2/(lightdata->m_distance*lightdata->m_distance));
+
+ if(lightdata->m_type==RAS_LightObject::LIGHT_SPOT) {
+ vec[0] = -(*(lightdata->m_worldmatrix))(0,2);
+ vec[1] = -(*(lightdata->m_worldmatrix))(1,2);
+ vec[2] = -(*(lightdata->m_worldmatrix))(2,2);
+ //vec[0]= -base->object->obmat[2][0];
+ //vec[1]= -base->object->obmat[2][1];
+ //vec[2]= -base->object->obmat[2][2];
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_SPOT_DIRECTION, vec);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, lightdata->m_spotsize/2.0);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_EXPONENT, 128.0*lightdata->m_spotblend);
}
- glLightfv((GLenum)(GL_LIGHT0+count), GL_SPECULAR, vec);
- glEnable((GLenum)(GL_LIGHT0+count));
-
- count++;
+ else glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, 180.0);
+ }
+
+ if (lightdata->m_nodiffuse)
+ {
+ vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
+ } else {
+ vec[0]= lightdata->m_energy*lightdata->m_red;
+ vec[1]= lightdata->m_energy*lightdata->m_green;
+ vec[2]= lightdata->m_energy*lightdata->m_blue;
+ vec[3]= 1.0;
+ }
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_DIFFUSE, vec);
+ if (lightdata->m_nospecular)
+ {
+ vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
+ } else if (lightdata->m_nodiffuse) {
+ vec[0]= lightdata->m_energy*lightdata->m_red;
+ vec[1]= lightdata->m_energy*lightdata->m_green;
+ vec[2]= lightdata->m_energy*lightdata->m_blue;
+ vec[3]= 1.0;
}
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_SPECULAR, vec);
+ glEnable((GLenum)(GL_LIGHT0+count));
+
+ count++;
}
glPopMatrix();
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
index ebf7562503f..60130e6bfc9 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
+++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
@@ -51,6 +51,7 @@ class KX_BlenderRenderTools : public RAS_IRenderTools
{
int m_lastlightlayer;
bool m_lastlighting;
+ void *m_lastauxinfo;
static unsigned int m_numgllights;
public:
@@ -62,7 +63,7 @@ public:
void EnableOpenGLLights(RAS_IRasterizer *rasty);
void DisableOpenGLLights();
- void ProcessLighting(RAS_IRasterizer *rasty, int layer, const MT_Transform& viewmat);
+ void ProcessLighting(RAS_IRasterizer *rasty, bool uselights, const MT_Transform& viewmat);
void RenderText2D(RAS_TEXT_RENDER_MODE mode,
const char* text,
diff --git a/source/gameengine/BlenderRoutines/Makefile b/source/gameengine/BlenderRoutines/Makefile
index e77d8e8380e..03a7a247727 100644
--- a/source/gameengine/BlenderRoutines/Makefile
+++ b/source/gameengine/BlenderRoutines/Makefile
@@ -47,8 +47,9 @@ CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
# because of kernel dependency on makesdna
CPPFLAGS += -I../../blender/makesdna
-CPPFLAGS += -I../../blender/include
+CPPFLAGS += -I../../blender/editors/include
# because of kernel dependency on imbuf
+CPPFLAGS += -I../../blender/windowmanager
CPPFLAGS += -I../../blender/imbuf
CPPFLAGS += -I../../blender/blenlib
CPPFLAGS += -I../../blender/blenkernel
diff --git a/source/gameengine/BlenderRoutines/SConscript b/source/gameengine/BlenderRoutines/SConscript
index 4a9c0e1286b..020402e9bcd 100644
--- a/source/gameengine/BlenderRoutines/SConscript
+++ b/source/gameengine/BlenderRoutines/SConscript
@@ -9,7 +9,7 @@ incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer #intern/bmfont'
incs += ' #source/gameengine/Converter #source/blender/imbuf'
incs += ' #intern/ghost/include'
incs += ' #intern/moto/include #source/gameengine/Ketsji #source/blender/blenlib'
-incs += ' #source/blender/blenkernel #source/blender #source/blender/include'
+incs += ' #source/blender/blenkernel #source/blender #source/blender/editors/include'
incs += ' #source/blender/makesdna #source/gameengine/Rasterizer #source/gameengine/GameLogic'
incs += ' #source/gameengine/Expressions #source/gameengine/Network'
incs += ' #source/gameengine/SceneGraph #source/gameengine/Physics/common'
@@ -17,6 +17,7 @@ incs += ' #source/gameengine/Physics/Bullet'
incs += ' #source/gameengine/Network/LoopBackNetwork'
incs += ' #intern/SoundSystem #source/blender/misc #source/blender/blenloader'
incs += ' #extern/glew/include #source/blender/gpu'
+incs += ' #source/blender/windowmanager'
if env['WITH_BF_SOLID']:
incs += ' #source/gameengine/Physics/Sumo #source/gameengine/Physics/Sumo/Fuzzics/include'
@@ -35,4 +36,4 @@ if env['OURPLATFORM']=='win32-vc':
cxxflags.append ('/GR')
cxxflags.append ('/O2')
-env.BlenderLib ( 'bf_bloutines', sources, Split(incs), defs, libtype=['game', 'game2', 'player'], priority=[0, 0, 55] , cxx_compileflags=cxxflags)
+env.BlenderLib ( 'bf_bloutines', sources, Split(incs), defs, libtype=['core', 'player'], priority=[300, 45] , cxx_compileflags=cxxflags)