void GPC_RenderTools::ProcessLighting(RAS_IRasterizer *rasty, bool uselights, const MT_Transform& viewmat) { bool enable = false; int layer= -1; /* find the layer */ if(uselights) { if(m_clientobject) layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer(); } /* avoid state switching */ if(m_lastlightlayer == layer && m_lastauxinfo == m_auxilaryClientInfo) return; m_lastlightlayer = layer; m_lastauxinfo = m_auxilaryClientInfo; /* enable/disable lights as needed */ if(layer >= 0) enable = applyLights(layer, viewmat); if(enable) EnableOpenGLLights(rasty); else DisableOpenGLLights(); }
void GPC_RenderTools::BeginFrame(RAS_IRasterizer* rasty) { m_clientobject = NULL; m_lastlightlayer = -1; m_lastauxinfo = NULL; m_lastlighting = true; /* force disable in DisableOpenGLLights() */ DisableOpenGLLights(); }
void RAS_OpenGLRasterizer::ProcessLighting(bool uselights, const MT_Transform& viewmat) { bool enable = false; int layer= -1; /* find the layer */ if (uselights) { if (m_clientobject) layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer(); } /* avoid state switching */ if (m_lastlightlayer == layer && m_lastauxinfo == m_auxilaryClientInfo) return; m_lastlightlayer = layer; m_lastauxinfo = m_auxilaryClientInfo; /* enable/disable lights as needed */ if (layer >= 0) { //enable = ApplyLights(layer, viewmat); // taken from blender source, incompatibility between Blender Object / GameObject KX_Scene* kxscene = (KX_Scene*)m_auxilaryClientInfo; float glviewmat[16]; unsigned int count; std::vector<struct RAS_LightObject*>::iterator lit = m_lights.begin(); for (count=0; count<m_numgllights; count++) glDisable((GLenum)(GL_LIGHT0+count)); viewmat.getValue(glviewmat); glPushMatrix(); glLoadMatrixf(glviewmat); for (lit = m_lights.begin(), count = 0; !(lit==m_lights.end()) && count < m_numgllights; ++lit) { RAS_LightObject* lightdata = (*lit); KX_LightObject *kxlight = (KX_LightObject*)lightdata->m_light; if (kxlight->ApplyLight(kxscene, layer, count)) count++; } glPopMatrix(); enable = count > 0; } if (enable) EnableOpenGLLights(); else DisableOpenGLLights(); }
bool RAS_OpenGLRasterizer::BeginFrame(int drawingmode, double time) { m_time = time; SetDrawingMode(drawingmode); // Blender camera routine destroys the settings if (m_drawingmode < KX_SOLID) { glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); } else { glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); } glDisable(GL_BLEND); glDisable(GL_ALPHA_TEST); //m_last_alphablend = GPU_BLEND_SOLID; GPU_set_material_alpha_blend(GPU_BLEND_SOLID); glFrontFace(GL_CCW); m_last_frontface = true; glShadeModel(GL_SMOOTH); glEnable(GL_MULTISAMPLE_ARB); m_2DCanvas->BeginFrame(); // Render Tools m_clientobject = NULL; m_lastlightlayer = -1; m_lastauxinfo = NULL; m_lastlighting = true; /* force disable in DisableOpenGLLights() */ DisableOpenGLLights(); return true; }