void RenderNeatShadows (fix nEyeOffset, int nWindow, short nStartSeg) { short i; tShaderLight *psl = gameData.render.lights.dynamic.shader.lights; gameData.render.shadows.nLights = GatherShadowLightSources (); for (i = 0; i < gameData.render.lights.dynamic.nLights; i++, psl++) { if (!psl->bShadow) continue; gameData.render.shadows.pLight = psl; psl->bExclusive = 1; #if 1 gameStates.render.nShadowPass = 2; OglStartFrame (0, 0); memcpy (&gameData.render.shadows.vLightPos, psl->vPosf + 1, sizeof (tOOF_vector)); gameData.render.shadows.nFrame = !gameData.render.shadows.nFrame; RenderMine (nStartSeg, nEyeOffset, nWindow); #endif gameStates.render.nShadowPass = 3; OglStartFrame (0, 0); gameData.render.shadows.nFrame = !gameData.render.shadows.nFrame; RenderMine (nStartSeg, nEyeOffset, nWindow); psl->bExclusive = 0; } #if 0 gameStates.render.nShadowPass = 4; RenderMine (nStartSeg, nEyeOffset, nWindow); #endif }
void RenderFastShadows (fix nEyeOffset, int nWindow, short nStartSeg) { #if 0//OOF_TEST_CUBE # if 1 for (bShadowTest = 1; bShadowTest >= 0; bShadowTest--) # else for (bShadowTest = 0; bShadowTest < 2; bShadowTest++) # endif #endif { gameStates.render.nShadowPass = 2; OglStartFrame (0, 0); gameData.render.shadows.nFrame = !gameData.render.shadows.nFrame; //RenderObjectShadows (); RenderMine (nStartSeg, nEyeOffset, nWindow); } #if DBG if (!bShadowTest) #endif { gameStates.render.nShadowPass = 3; OglStartFrame (0, 0); if (gameStates.render.bShadowMaps) { #if DBG if (gameStates.render.bExternalView) #else if (gameStates.render.bExternalView && (!IsMultiGame || IsCoopGame || EGI_FLAG (bEnableCheats, 0, 0, 0))) #endif G3SetViewMatrix(gameData.render.mine.viewerEye, externalView.pPos ? externalView.pPos->mOrient : gameData.objs.viewerP->info.position.mOrient, gameStates.render.xZoom, 1); else G3SetViewMatrix(gameData.render.mine.viewerEye, gameData.objs.viewerP->info.position.mOrient, FixDiv (gameStates.render.xZoom, gameStates.render.nZoomFactor), 1); ApplyShadowMaps (nStartSeg, nEyeOffset, nWindow); } else { RenderShadowQuad (0); } } }
void CBuildings::OnRender() { if(Client()->State() < IClient::STATE_ONLINE) return; int Num = Client()->SnapNumItems(IClient::SNAP_CURRENT); for(int i = 0; i < Num; i++) { IClient::CSnapItem Item; const void *pData = Client()->SnapGetItem(IClient::SNAP_CURRENT, i, &Item); if(Item.m_Type == NETOBJTYPE_TURRET) { const struct CNetObj_Turret *pTurret = (const CNetObj_Turret *)pData; const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID); RenderTurret(pTurret, pPrev ? (const CNetObj_Turret *)pPrev : pTurret); } else if(Item.m_Type == NETOBJTYPE_POWERUPPER) RenderPowerupper((const CNetObj_Powerupper *)pData); else if(Item.m_Type == NETOBJTYPE_SHOP) RenderShop((const CNetObj_Shop *)pData); else if (Item.m_Type == NETOBJTYPE_BUILDING) { const struct CNetObj_Building *pBuilding = (const CNetObj_Building *)pData; const void *pPrev = Client()->SnapFindItem(IClient::SNAP_PREV, Item.m_Type, Item.m_ID); switch (pBuilding->m_Type) { case BUILDING_SAWBLADE: RenderSawblade(pBuilding); break; case BUILDING_MINE1: RenderMine(pBuilding); break; case BUILDING_MINE2: RenderElectromine(pBuilding); break; case BUILDING_BARREL: RenderBarrel(pBuilding, pPrev ? (const CNetObj_Building *)pPrev : pBuilding); break; case BUILDING_POWERBARREL: RenderPowerBarrel(pBuilding, pPrev ? (const CNetObj_Building *)pPrev : pBuilding); break; case BUILDING_LAZER: RenderLazer(pBuilding); break; case BUILDING_FLAMETRAP: RenderFlametrap(pBuilding, pPrev ? (const CNetObj_Building *)pPrev : pBuilding); break; case BUILDING_BASE: RenderBase(pBuilding); break; case BUILDING_STAND: RenderStand(pBuilding, pPrev ? (const CNetObj_Building *)pPrev : pBuilding); break; case BUILDING_REACTOR: RenderReactor(pBuilding); break; case BUILDING_TESLACOIL: RenderTeslacoil(pBuilding, pPrev ? (const CNetObj_Building *)pPrev : pBuilding); break; case BUILDING_REACTOR_DESTROYED: RenderDestroyedReactor(pBuilding); break; case BUILDING_SWITCH: RenderSwitch(pBuilding); break; case BUILDING_DOOR1: RenderDoor1(pBuilding); break; case BUILDING_GENERATOR: RenderGenerator(pBuilding, pPrev ? (const CNetObj_Building *)pPrev : pBuilding); break; case BUILDING_SCREEN: RenderScreen(pBuilding); break; /* case BUILDING_SHOP: RenderShop(pBuilding); break; */ default:; }; //m_pClient->m_pEffects->Light(vec2(pBuilding->m_X, pBuilding->m_Y), 512); } } }
void DrawTerrainCell (int i, int j, g3sPoint *p0, g3sPoint *p1, g3sPoint *p2, g3sPoint *p3) { g3sPoint *pointList [3]; p0->p3_index = p1->p3_index = p2->p3_index = p3->p3_index = - 1; pointList [0] = p0; pointList [1] = p1; pointList [2] = p3; gameData.render.terrain.uvlList [0][0].l = LIGHTVAL (i, j); gameData.render.terrain.uvlList [0][1].l = LIGHTVAL (i, j + 1); gameData.render.terrain.uvlList [0][2].l = LIGHTVAL (i + 1, j); gameData.render.terrain.uvlList [0][0].u = gameData.render.terrain.uvlList [0][1].u = (i) * f0_4; gameData.render.terrain.uvlList [0][0].v = gameData.render.terrain.uvlList [0][2].v = (j) * f0_4; gameData.render.terrain.uvlList [0][1].v = (j + 1) * f0_4; gameData.render.terrain.uvlList [0][2].u = (i + 1) * f0_4; G3CheckAndDrawTMap (3, pointList, gameData.render.terrain.uvlList [0], gameData.render.terrain.bmP, NULL, NULL); if (gameData.render.terrain.bOutline) { int lSave = gameStates.render.nLighting; gameStates.render.nLighting = 0; GrSetColorRGB (255, 0, 0, 255); G3DrawLine (pointList [0], pointList [1]); G3DrawLine (pointList [2], pointList [0]); gameStates.render.nLighting = lSave; } pointList [0] = p1; pointList [1] = p2; gameData.render.terrain.uvlList [1][0].l = LIGHTVAL (i, j + 1); gameData.render.terrain.uvlList [1][1].l = LIGHTVAL (i + 1, j + 1); gameData.render.terrain.uvlList [1][2].l = LIGHTVAL (i + 1, j); gameData.render.terrain.uvlList [1][0].u = (i) * f0_4; gameData.render.terrain.uvlList [1][1].u = gameData.render.terrain.uvlList [1][2].u = (i + 1) * f0_4; gameData.render.terrain.uvlList [1][0].v = gameData.render.terrain.uvlList [1][1].v = (j + 1) * f0_4; gameData.render.terrain.uvlList [1][2].v = (j) * f0_4; G3CheckAndDrawTMap (3, pointList, gameData.render.terrain.uvlList [1], gameData.render.terrain.bmP, NULL, NULL); if (gameData.render.terrain.bOutline) { int lSave = gameStates.render.nLighting; gameStates.render.nLighting=0; GrSetColorRGB (255, 128, 0, 255); G3DrawLine (pointList [0], pointList [1]); G3DrawLine (pointList [1], pointList [2]); G3DrawLine (pointList [2], pointList [0]); gameStates.render.nLighting = lSave; } if ((i == gameData.render.terrain.orgI) && (j == gameData.render.terrain.orgJ)) gameData.render.terrain.nMineTilesDrawn |= 1; if ((i == gameData.render.terrain.orgI - 1) && (j == gameData.render.terrain.orgJ)) gameData.render.terrain.nMineTilesDrawn |= 2; if ((i == gameData.render.terrain.orgI) && (j == gameData.render.terrain.orgJ - 1)) gameData.render.terrain.nMineTilesDrawn |= 4; if ((i == gameData.render.terrain.orgI - 1) && (j == gameData.render.terrain.orgJ - 1)) gameData.render.terrain.nMineTilesDrawn |= 8; if (gameData.render.terrain.nMineTilesDrawn == 0xf) { RenderMine (gameData.endLevel.exit.nSegNum, 0, 0); gameData.render.terrain.nMineTilesDrawn = - 1; } }
void ApplyShadowMaps (short nStartSeg, fix nEyeOffset, int nWindow) { static float mTexBiasf [] = { 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f}; static float mPlanef [] = { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}; static GLenum nTexCoord [] = {GL_S, GL_T, GL_R, GL_Q}; CFloatMatrix mProjection; CFloatMatrix mModelView; int i; CCamera *cameraP; #if 1 ogl.SelectTMU (GL_TEXTURE0); glEnable (GL_TEXTURE_2D); glEnable (GL_TEXTURE_GEN_S); glEnable (GL_TEXTURE_GEN_T); glEnable (GL_TEXTURE_GEN_R); glEnable (GL_TEXTURE_GEN_Q); for (i = 0; i < 4; i++) glTexGeni (nTexCoord [i], GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); for (i = 0; i < 4; i++) glTexGenfv (nTexCoord [i], GL_EYE_PLANE, mPlanef + 4 * i); glGetFloatv (GL_PROJECTION_MATRIX, mProjection.Vec ()); glMatrixMode (GL_TEXTURE); for (i = 0, cameraP = gameData.render.shadows.shadowMaps; i < 1/*gameData.render.shadows.nShadowMaps*/; i++) { glBindTexture (GL_TEXTURE_2D, cameraP->FrameBuffer ().RenderBuffer ()); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL); glLoadMatrixf (mTexBiasf); glMultMatrixf (mProjection.Vec ()); CFixMatrix::Transpose (mModelView, cameraP->GetObject ()->info.position.mOrient); glMultMatrixf (mModelView.Vec ()); } glMatrixMode (GL_MODELVIEW); #endif RenderMine (nStartSeg, nEyeOffset, nWindow); #if 1 glMatrixMode (GL_TEXTURE); glLoadIdentity (); glMatrixMode (GL_MODELVIEW); glDisable (GL_TEXTURE_GEN_S); glDisable (GL_TEXTURE_GEN_T); glDisable (GL_TEXTURE_GEN_R); glDisable (GL_TEXTURE_GEN_Q); ogl.SelectTMU (GL_TEXTURE0); glDisable (GL_TEXTURE_2D); #endif DestroyShadowMaps (); }
void ApplyShadowMaps (short nStartSeg, fix nEyeOffset, int nWindow) { static float mTexBiasf [] = { 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f}; static float mPlanef [] = { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}; static GLenum nTexCoord [] = {GL_S, GL_T, GL_R, GL_Q}; float mProjectionf [16]; float mModelViewf [16]; int i; tCamera *pc; #if 1 OglActiveTexture (GL_TEXTURE0, 0); glEnable (GL_TEXTURE_2D); glEnable (GL_TEXTURE_GEN_S); glEnable (GL_TEXTURE_GEN_T); glEnable (GL_TEXTURE_GEN_R); glEnable (GL_TEXTURE_GEN_Q); for (i = 0; i < 4; i++) glTexGeni (nTexCoord [i], GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); for (i = 0; i < 4; i++) glTexGenfv (nTexCoord [i], GL_EYE_PLANE, mPlanef + 4 * i); glGetFloatv (GL_PROJECTION_MATRIX, mProjectionf); glMatrixMode (GL_TEXTURE); for (i = 0, pc = gameData.render.shadows.shadowMaps; i < 1/*gameData.render.shadows.nShadowMaps*/; i++) { glBindTexture (GL_TEXTURE_2D, pc->fb.hRenderBuffer); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL); glLoadMatrixf (mTexBiasf); glMultMatrixf (mProjectionf); glMultMatrixf (OOF_MatVms2Gl (mModelViewf, pc->objP->info.position.mOrient)); } glMatrixMode (GL_MODELVIEW); #endif RenderMine (nStartSeg, nEyeOffset, nWindow); #if 1 glMatrixMode (GL_TEXTURE); glLoadIdentity (); glMatrixMode (GL_MODELVIEW); glDisable (GL_TEXTURE_GEN_S); glDisable (GL_TEXTURE_GEN_T); glDisable (GL_TEXTURE_GEN_R); glDisable (GL_TEXTURE_GEN_Q); OglActiveTexture (GL_TEXTURE0, 0); glDisable (GL_TEXTURE_2D); #endif DestroyShadowMaps (); }