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:
authorCampbell Barton <ideasman42@gmail.com>2009-06-13 15:09:13 +0400
committerCampbell Barton <ideasman42@gmail.com>2009-06-13 15:09:13 +0400
commiteed13b43b19c619ccdcda67b17c0da65ad44879c (patch)
treeaa759322ad2b18becaf237671dd71ffbda9c2076 /source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
parente10e1ac04e63ed04a5712e515ed28eb92a78fd62 (diff)
parent2f1e118c30946bd3117c59cd45f13d79e4b612ec (diff)
merged from trunk 20741:20848
* Missing changes to release/windows/installer * Sequencer fixes in source/blender/src/seqaudio.c dont apply to 2.5 * brechts fix for #18855 r20763 wasnt merged, does this apply to 2.5?
Diffstat (limited to 'source/gameengine/GamePlayer/common/GPC_RenderTools.cpp')
-rw-r--r--source/gameengine/GamePlayer/common/GPC_RenderTools.cpp88
1 files changed, 5 insertions, 83 deletions
diff --git a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
index c5c9dcc6c0f..24fca3feb8b 100644
--- a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
+++ b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
@@ -29,8 +29,6 @@
#include "GL/glew.h"
-#include "DNA_scene_types.h"
-
#include "RAS_IRenderTools.h"
#include "RAS_IRasterizer.h"
#include "RAS_LightObject.h"
@@ -42,6 +40,7 @@
#include "KX_BlenderMaterial.h"
#include "KX_RayCast.h"
#include "KX_IPhysicsController.h"
+#include "KX_Light.h"
#include "PHY_IPhysicsEnvironment.h"
@@ -387,21 +386,12 @@ int GPC_RenderTools::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;
+ std::vector<struct RAS_LightObject*>::iterator lit = m_lights.begin();
- if(kxscene && kxscene->GetBlenderScene())
- scenelayer = kxscene->GetBlenderScene()->lay;
-
for(count=0; count<m_numgllights; count++)
glDisable((GLenum)(GL_LIGHT0+count));
-
- //std::vector<struct RAS_LightObject*> m_lights;
- std::vector<struct RAS_LightObject*>::iterator lit = m_lights.begin();
viewmat.getValue(glviewmat);
@@ -410,82 +400,14 @@ int GPC_RenderTools::applyLights(int objectlayer, const MT_Transform& viewmat)
for (lit = m_lights.begin(), count = 0; !(lit==m_lights.end()) && count < m_numgllights; ++lit)
{
RAS_LightObject* lightdata = (*lit);
- KX_Scene* lightscene = (KX_Scene*)lightdata->m_scene;
-
- /* 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) {
-
- 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);
- }
-
- 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));
+ KX_LightObject *kxlight = (KX_LightObject*)lightdata->m_light;
- count++;
+ if(kxlight->ApplyLight(kxscene, objectlayer, count))
+ count++;
}
glPopMatrix();
return count;
-
}
void GPC_RenderTools::MotionBlur(RAS_IRasterizer* rasterizer)