void WORLD::Render(bool SubWorld, bool Zmask) { //pushattrib EVIL, kill it glPushAttrib(GL_ALL_ATTRIB_BITS); if (!SubWorld) { if (Lighting) SetupLighting(); //fenyezes beallitasa else glDisable(GL_LIGHTING); if (Fog) //kod beallitasa { glEnable(GL_FOG); float Col[4]; Col[0]=FogCol[0]/255.0f; Col[1]=FogCol[1]/255.0f; Col[2]=FogCol[2]/255.0f; Col[3]=1; glFogi(GL_FOG_MODE,GL_LINEAR); glFogfv(GL_FOG_COLOR,Col); glFogf(GL_FOG_START,FogStart); glFogf(GL_FOG_END,FogEnd); } DrawChildren(this,-1,true); //zmaskos render glDepthMask(false); DrawChildren(this,-1,false); //zmask nelkuli render } else DrawChildren(this,-1,Zmask); //ha subworld, akkor megy lejjebb a hierarchyn, a zmask beallitas az amit fentrol kapott, igy csak jot renderel //popattrib atikiller, badbadbad glPopAttrib(); }
static void Init(void) { CheckExtensions(); SetupRenderbuffers(); SetupShaders(); SetupLighting(); glEnable(GL_DEPTH_TEST); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnableIndexedEXT(GL_BLEND, 1); }
/* ================ StudioModel::DrawModel inputs: currententity r_entorigin ================ */ void StudioModel::DrawModel( ) { int i; g_smodels_total++; // render data cache cookie g_pxformverts = &g_xformverts[0]; g_pvlightvalues = &g_lightvalues[0]; if (m_pstudiohdr->numbodyparts == 0) return; glPushMatrix (); glTranslatef (m_origin[0], m_origin[1], m_origin[2]); glRotatef (m_angles[1], 0, 0, 1); glRotatef (m_angles[0], 0, 1, 0); glRotatef (m_angles[2], 1, 0, 0); // glShadeModel (GL_SMOOTH); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); // glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); SetUpBones ( ); SetupLighting( ); for (i=0 ; i < m_pstudiohdr->numbodyparts ; i++) { SetupModel( i ); DrawPoints( ); } glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); // glShadeModel (GL_FLAT); // glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glPopMatrix (); }
//--------------------------------------------------------------------------- void __fastcall TFormMain::FormCreate(TObject *Sender) { hdc = GetDC(Handle); SetPixelFormatDescriptor(); hrc = wglCreateContext(hdc); if(hrc == NULL) ShowMessage(":-)~ hrc == NULL"); if(wglMakeCurrent(hdc, hrc) == false) ShowMessage("Could not MakeCurrent"); w = ClientWidth; h = ClientHeight; glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); SetupLighting(); SetupTextures(); CreateInpriseCorporateLogo(); }
int runScene(Drawable & scene){ glfwInit(); if( !glfwOpenWindow( 500, 500, 0,0,0,0, 16,0, GLFW_WINDOW ) ) { glfwTerminate(); } glfwSetWindowTitle( "3D" ); glfwEnable( GLFW_STICKY_KEYS ); glfwEnable( GLFW_MOUSE_CURSOR ); glfwDisable( GLFW_AUTO_POLL_EVENTS ); setupCallbacks(); do //Main Loop. { setupProjection(); // stereo_state.Ping(); projection_state.Load(); float zoom=2.0; glScalef(zoom*2.0/256.0, zoom*2.0/256.0, zoom*2.0/256.0); glDisable (GL_BLEND); glDisable(GL_LIGHTING); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); setupModelview(); /* Temporary light insertion: */ navigator.Draw(); //reference plane DrawPlane(V3f(0,0,0), V3f(20,0,0), V3f(0,20,0), 5); SetupLighting(); scene.Draw(); //Clear modified mouse state. mouse_state.Moved(); glfwSwapBuffers(); if(!stereo_state.enabled){ glfwWaitEvents(); }else{ glfwPollEvents(); glfwSleep(0.01); //just sleep. }; navigator.idle_move(); } while(!glfwGetKey( GLFW_KEY_ESC ) && glfwGetWindowParam( GLFW_OPENED )); return true; };
//----------------------------------------------------------------------------- // Render a frame //----------------------------------------------------------------------------- void CIHVTestApp::RenderFrame( void ) { VPROF( "RenderFrame" ); IHVTestModel *pModel = NULL; static int currentRun = 0; static int currentFrame = 0; static int currentLightCombo = 0; int modelAlternator = 0; if (g_bInError) { // error context is active // error may be renderer based, avoid re-entrant render to fatal crash return; } if( g_BenchMode ) { if( currentFrame > g_BenchRuns[currentRun].numFrames ) { currentLightCombo++; if( currentLightCombo >= LIGHTING_COMBINATION_COUNT ) { currentRun++; currentLightCombo = 0; if( currentRun >= NUM_BENCH_RUNS ) { g_BenchFinished = true; return; } } currentFrame = 0; } } if( g_BenchMode ) { pModel = &g_BenchModels[currentRun][0]; g_NumCols = g_BenchRuns[currentRun].cols; g_NumRows = g_BenchRuns[currentRun].rows; } else { pModel = m_pIHVTestModel; } Assert( pModel ); g_EngineStats.BeginFrame(); g_pMaterialSystem->BeginFrame( 0 ); g_pStudioRender->BeginFrame(); CMatRenderContextPtr pRenderContext( g_pMaterialSystem ); pRenderContext->ClearColor3ub( 0, 0, 0 ); pRenderContext->ClearBuffers( true, true ); pRenderContext->Viewport( 0, 0, g_RenderWidth, g_RenderHeight ); pRenderContext->MatrixMode( MATERIAL_PROJECTION ); pRenderContext->LoadIdentity(); pRenderContext->PerspectiveX( 90.0f, ( g_RenderWidth / g_RenderHeight), 1.0f, 500000.0f ); pRenderContext->MatrixMode( MATERIAL_VIEW ); pRenderContext->LoadIdentity(); if( g_BenchMode ) { pRenderContext->Translate( 0.0f, 0.0f, ( float )-( g_NumCols * g_BenchRuns[currentRun].modelSize * 0.6f ) ); } else { pRenderContext->Translate( 0.0f, 0.0f, ( float )-( g_NumCols * 80.0f * 0.5f ) ); } pRenderContext->MatrixMode( MATERIAL_MODEL ); pRenderContext->LoadIdentity(); QAngle angles; angles[YAW] = -90.0f; angles[PITCH] = -90.0f; angles[ROLL] = 0.0f; matrix3x4_t cameraMatrix; AngleMatrix( angles, cameraMatrix ); int r, c; int trisRendered = 0; float boneSetupTime = 0.0f; for( r = 0; r < g_NumRows; r++ ) { for( c = 0; c < g_NumCols; c++ ) { // If we are alternating models, select the next valid model. if( g_BenchMode ) { do { // If I pass my maximum number of models, wrap around to model 0, which must always be valid. if( ++modelAlternator >= g_nMaxModels ) { modelAlternator = 0; break; } } while( !g_BenchRuns[currentRun].pModelName[modelAlternator] ); pModel = &g_BenchModels[currentRun][modelAlternator]; Assert( pModel ); } if( g_BenchMode ) { cameraMatrix[0][3] = ( ( c + 0.5f ) - ( g_NumCols * .5f ) ) * g_BenchRuns[currentRun].modelSize; cameraMatrix[1][3] = ( ( float )r - ( g_NumCols * .5f ) ) * g_BenchRuns[currentRun].modelSize; } else { cameraMatrix[0][3] = ( ( c + 0.5f ) - ( g_NumCols * .5f ) ) * 75.0f; cameraMatrix[1][3] = ( ( float )r - ( g_NumCols * .5f ) ) * 75.0f; } Vector modelOrigin( cameraMatrix[0][3], cameraMatrix[1][3], 0.0f ); Vector lightOffset( cameraMatrix[0][3], cameraMatrix[1][3], 0.0f ); if (g_LightingCombination < 0) { SetupLighting( g_BenchMode ? currentLightCombo : 0, lightOffset ); } else { SetupLighting( g_LightingCombination, lightOffset ); } float startBoneSetupTime = Sys_FloatTime(); int lod = g_LOD; lod = clamp( lod, pModel->pHardwareData->m_RootLOD, pModel->pHardwareData->m_NumLODs-1 ); int boneMask = BONE_USED_BY_VERTEX_AT_LOD( lod ); matrix3x4_t *pBoneToWorld = SetUpBones( pModel->pStudioHdr, cameraMatrix, currentRun, modelAlternator, boneMask ); boneSetupTime += Sys_FloatTime() - startBoneSetupTime; pRenderContext->MatrixMode( MATERIAL_MODEL ); pRenderContext->PushMatrix(); DrawModelInfo_t modelInfo; memset( &modelInfo, 0, sizeof( modelInfo ) ); modelInfo.m_pStudioHdr = pModel->pStudioHdr; modelInfo.m_pHardwareData = pModel->pHardwareData; modelInfo.m_Decals = STUDIORENDER_DECAL_INVALID; modelInfo.m_Skin = 0; modelInfo.m_Body = g_BodyGroup; modelInfo.m_HitboxSet = 0; modelInfo.m_pClientEntity = NULL; modelInfo.m_Lod = lod; modelInfo.m_pColorMeshes = NULL; g_pStudioRender->DrawModel( NULL, modelInfo, pBoneToWorld, NULL, NULL, modelOrigin ); DrawModelResults_t results; g_pStudioRender->GetPerfStats( &results, modelInfo, NULL ); trisRendered += results.m_ActualTriCount; pRenderContext->MatrixMode( MATERIAL_MODEL ); pRenderContext->PopMatrix(); } } pRenderContext->Flush( true ); g_EngineStats.EndFrame(); g_pStudioRender->EndFrame(); g_pMaterialSystem->EndFrame(); // hack - don't count the first frame in case there are any state // transitions computed on that frame. if( currentFrame != 0 ) { g_BenchResults[currentRun][currentLightCombo].totalTime += g_EngineStats.GetCurrentSystemFrameTime(); g_BenchResults[currentRun][currentLightCombo].totalTris += trisRendered; } for ( int model = 0; model < g_nMaxModels; ++model ) { CStudioHdr studioHdr( g_BenchModels[currentRun][model].pStudioHdr, g_pMDLCache ); AdvanceFrame( &studioHdr, currentRun, model, g_EngineStats.GetCurrentSystemFrameTime() ); } g_pMaterialSystem->SwapBuffers(); #ifdef USE_VPROF g_VProfCurrentProfile.MarkFrame(); static bool bBeenHere = false; if( !bBeenHere ) { bBeenHere = true; g_VProfCurrentProfile.Reset(); } #endif currentFrame++; }