Example #1
0
void RenderFrameDX9(void)
{
	LPDIRECT3DDEVICE9 device = GutGetGraphicsDeviceDX9();
	
	device->BeginScene(); 

	AddImpulse();
	WaterSimulation();
	HeightmapToNormal();

	device->SetRenderTarget(0, g_pMainFramebuffer);
	device->SetDepthStencilSurface(g_pMainDepthbuffer);
	device->Clear(0, NULL, D3DCLEAR_ZBUFFER, 0x0, 1.0f, 0);

	RenderWater();
	DrawObject();

	SwapHeightmaps();

	float x = -1.0f;
	float y = -1.0f;
	float w = 0.4f;
	float h = 0.4f;

	if ( g_iMode & 0x01 )
	{
		DrawImage(g_pTextures[TEX_HEIGHT2], x, y, w, h, &g_ImageInfo);
		x+=w;
	}

	if ( g_iMode & 0x02 )
	{
		D3DXHANDLE shader = g_pWaterEffect->GetTechniqueByName("Heightmap");
		D3DXHANDLE heightmap_var = g_pWaterEffect->GetTechniqueByName("heightmap_current");

		g_pWaterEffect->SetTechnique(shader);
		g_pWaterEffect->SetTexture(heightmap_var, g_pTextures[TEX_HEIGHT2]);

		g_pWaterEffect->Begin(NULL, 0);
		g_pWaterEffect->BeginPass(0);
			GutDrawScreenQuad_DX9(x, y, w, h, &g_ImageInfo);
		g_pWaterEffect->EndPass();
		g_pWaterEffect->End();

		x+=w;
	}

	if ( g_iMode & 0x04 )
	{
		DrawImage(g_pTextures[TEX_NORMAL], x, y, w, h, &g_ImageInfo);
		x+=w;
	}

	device->EndScene(); 
    device->Present( NULL, NULL, NULL, NULL );
}
Example #2
0
void DirectxEngine::RenderSceneMap(const IScene& scene, float timer)
{
    m_data->sceneTarget.SetActive(m_data->context);

    RenderTerrain(scene);
    RenderShadows();
    RenderMeshes(scene);
    RenderWater(scene, timer);
    RenderEmitters(scene);
}
Example #3
0
//*************************************************************************************
// Main Background Rendering Proc.
// ie: Big Mess
//*************************************************************************************
///////////////////////////////////////////////////////////
void ARX_SCENE_Render() {
	
	ARX_PROFILE_FUNC();
	
	if(uw_mode)
		GRenderer->GetTextureStage(0)->setMipMapLODBias(10.f);

	GRenderer->SetBlendFunc(Renderer::BlendZero, Renderer::BlendInvSrcColor);
	for(size_t i = 0; i < RoomDrawList.size(); i++) {

		ARX_PORTALS_Frustrum_RenderRoomTCullSoftRender(RoomDrawList[i]);
	}

	if(!player.m_improve) {
		ARXDRAW_DrawInterShadows();
	}

	ARX_THROWN_OBJECT_Render();
		
	GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapClamp);
	GRenderer->GetTextureStage(0)->setMipMapLODBias(-0.6f);

	RenderInter();

	GRenderer->GetTextureStage(0)->setWrapMode(TextureStage::WrapRepeat);
	GRenderer->GetTextureStage(0)->setMipMapLODBias(-0.3f);
		
	// To render Dragged objs
	if(DRAGINTER) {
		SPECIAL_DRAGINTER_RENDER=1;
		ARX_INTERFACE_RenderCursor();

		SPECIAL_DRAGINTER_RENDER=0;
	}

	PopAllTriangleList();
	
	// *Now* draw the player
	if(entities.player()->animlayer[0].cur_anim) {
		float invisibility = std::min(0.9f, entities.player()->invisibility);
		AnimatedEntityRender(entities.player(), invisibility);
		if(!EXTERNALVIEW) {
			// In first person mode, always render the player over other objects
			// in order to avoid clipping the player and weapon with walls.
			GRenderer->SetRenderState(Renderer::DepthTest, false);
			PopAllTriangleList(/*clear=*/false);
			GRenderer->SetRenderState(Renderer::DepthTest, true);
		}
		PopAllTriangleList();
	}
	
	ARXDRAW_DrawEyeBall();

	GRenderer->SetRenderState(Renderer::DepthWrite, false);

	ARXDRAW_DrawPolyBoom();

	PopAllTriangleListTransparency();

	GRenderer->SetFogColor(Color::none);
	GRenderer->SetRenderState(Renderer::AlphaBlending, true);
	GRenderer->SetCulling(Renderer::CullNone);
	GRenderer->SetRenderState(Renderer::DepthWrite, false);
	GRenderer->SetAlphaFunc(Renderer::CmpGreater, .5f);

	for(size_t i = 0; i < RoomDrawList.size(); i++) {

		ARX_PORTALS_Frustrum_RenderRoom_TransparencyTSoftCull(RoomDrawList[i]);
	}

	GRenderer->SetDepthBias(8);
	GRenderer->SetRenderState(Renderer::DepthWrite, false);
	GRenderer->SetCulling(Renderer::CullCW);
	GRenderer->SetAlphaFunc(Renderer::CmpNotEqual, 0.f);

	RenderWater();
	RenderLava();

	GRenderer->SetDepthBias(0);
	GRenderer->SetFogColor(ulBKGColor);
	GRenderer->GetTextureStage(0)->setColorOp(TextureStage::OpModulate);
	GRenderer->SetRenderState(Renderer::AlphaBlending, false);

	Halo_Render();

	GRenderer->SetCulling(Renderer::CullCCW);
	GRenderer->SetRenderState(Renderer::AlphaBlending, false);	
	GRenderer->SetRenderState(Renderer::DepthWrite, true);
}
Example #4
0
void VoxGame::Render()
{
	if (m_pVoxWindow->GetMinimized())
	{
		// Don't call any render functions if minimized
		return;
	}

	// Begin rendering
	m_pRenderer->BeginScene(true, true, true);

		// Shadow rendering to the shadow frame buffer
		if (m_shadows)
		{
			RenderShadows();
		}

		// ---------------------------------------
		// Render 3d
		// ---------------------------------------
		m_pRenderer->PushMatrix();
			// Set the default projection mode
			m_pRenderer->SetProjectionMode(PM_PERSPECTIVE, m_defaultViewport);

			// Set back culling as default
			m_pRenderer->SetCullMode(CM_BACK);

			// Set default depth test
			m_pRenderer->EnableDepthTest(DT_LESS);

			// Set the lookat camera
			m_pGameCamera->Look();

			// Enable the lights
			m_pRenderer->PushMatrix();
				m_pRenderer->EnableLight(m_defaultLight, 0);
			m_pRenderer->PopMatrix();

			// Multisampling MSAA
			if (m_multiSampling)
			{
				m_pRenderer->EnableMultiSampling();
			}
			else
			{
				m_pRenderer->DisableMultiSampling();
			}

			// Water reflections
			if (m_waterRender && m_pChunkManager->IsUnderWater(m_pGameCamera->GetPosition()) == false && m_gameMode != GameMode_FrontEnd)
			{
				RenderWaterReflections();
			}

			// SSAO frame buffer rendering start
			if (m_deferredRendering)
			{
				m_pRenderer->StartRenderingToFrameBuffer(m_SSAOFrameBuffer);
			}

			m_pRenderer->SetClearColour(0.0f, 0.0f, 0.0f, 1.0f);
			m_pRenderer->ClearScene(true, true, true);

			// Render the lights (DEBUG)
			m_pRenderer->PushMatrix();
				m_pRenderer->SetCullMode(CM_BACK);
				m_pRenderer->SetRenderMode(RM_SOLID);
				m_pRenderer->RenderLight(m_defaultLight);
			m_pRenderer->PopMatrix();

			// Render the skybox
			RenderSkybox();

			BeginShaderRender();
			{
				// Render the chunks
				m_pChunkManager->Render(false);
			}
			EndShaderRender();

			// NPC sub selection - For character creation screen
			m_pNPCManager->RenderSubSelectionNormalNPCs();

			// Render items outline and silhouette before the world/chunks
			m_pItemManager->Render(true, false, false, false);
			m_pItemManager->Render(false, false, true, false);

			// NPCs (only non outline and hover)
			m_pNPCManager->RenderOutlineNPCs();
			m_pNPCManager->Render(false, false, true, false, false, false);

			// Enemies outline
			m_pEnemyManager->RenderOutlineEnemies();
			m_pEnemyManager->Render(false, false, true, false);

			BeginShaderRender();
			{
				// Scenery
				m_pSceneryManager->Render(false, false, false, false, false);

				// Projectiles
				m_pProjectileManager->Render();

				// Items
				m_pItemManager->Render(false, false, false, false);

				// NPCs
				m_pNPCManager->ResetNumRenderNPCs();
				m_pNPCManager->Render(false, false, false, false, true, false);

				// Enemies
				m_pEnemyManager->Render(false, false, false, false);

				// NPCs (only outline and hover)
				m_pNPCManager->Render(false, false, false, true, false, false);
				m_pNPCManager->RenderSubSelectionOverlayNPCs();
			}
			EndShaderRender();

			// Player selection block
			m_pPlayer->RenderSelectionBlock();

			// Render the block particles
			m_pBlockParticleManager->Render(false);

			// Render the instanced objects
			if(m_instanceRender)
			{
				m_pInstanceManager->Render();
			}

			// Frontend
			m_pFrontendManager->Render();

			BeginShaderRender();
			{

				if (m_gameMode != GameMode_FrontEnd)
				{
					// Render the player
					if (m_cameraMode != CameraMode_FirstPerson)
					{
						m_pPlayer->Render();
					}
				}
			}
			EndShaderRender();

			// Render the transparency items above the water render, so that they appear properly under water
			if (m_waterRender && m_gameMode != GameMode_FrontEnd)
			{
				if (m_cameraMode != CameraMode_FirstPerson)
				{
					m_pPlayer->RenderFace();
				}
				m_pNPCManager->RenderFaces();
				m_pEnemyManager->RenderFaces();

				if (m_cameraMode != CameraMode_FirstPerson)
				{
					m_pPlayer->RenderWeaponTrails();
				}
				m_pNPCManager->RenderWeaponTrails();
				m_pEnemyManager->RenderWeaponTrails();

				// Render water
				RenderWater();
			}

			// Debug rendering
			if(m_debugRender)
			{
				m_pLightingManager->DebugRender();

				m_pBlockParticleManager->RenderDebug();

				if (m_gameMode != GameMode_FrontEnd)
				{
					m_pPlayer->RenderDebug();
				}

				m_pNPCManager->RenderDebug();

				m_pEnemyManager->RenderDebug();

				m_pSceneryManager->RenderDebug();

				m_pItemManager->RenderDebug();

				m_pChunkManager->RenderDebug();

				m_pProjectileManager->RenderDebug();

				m_pBiomeManager->RenderDebug();

				if (m_gameMode == GameMode_FrontEnd)
				{
					m_pFrontendManager->RenderDebug();
				}
			}

			// Render player first person viewport
			if (m_gameMode != GameMode_FrontEnd)
			{
				if (m_cameraMode == CameraMode_FirstPerson)
				{
					RenderFirstPersonViewport();
				}
			}

			// SSAO frame buffer rendering stop
			if (m_deferredRendering)
			{
				m_pRenderer->StopRenderingToFrameBuffer(m_SSAOFrameBuffer);
			}
		m_pRenderer->PopMatrix();

		// Render the deferred lighting pass
		if (m_dynamicLighting)
		{
			RenderDeferredLighting();
		}

		// Render other viewports
		// Paperdoll for CharacterGUI
		RenderPaperdollViewport();
		// Portrait for HUD
		if (m_pVoxSettings->m_renderGUI)
		{
			RenderPortraitViewport();
		}

		// ---------------------------------------
		// Render transparency
		// ---------------------------------------
		RenderTransparency();

		// Render the SSAO texture
		if (m_deferredRendering)
		{
			RenderSSAOTexture();

			if (m_multiSampling && m_fxaaShader != -1)
			{
				RenderFXAATexture();
			}

			if(m_blur || m_pChunkManager->IsUnderWater(m_pGameCamera->GetPosition()))
			{
				RenderFirstPassFullScreen();
				RenderSecondPassFullScreen();
			}
		}

		// ---------------------------------------
		// Render 2d
		// ---------------------------------------
		m_pRenderer->PushMatrix();
			// Crosshair
			if (m_cameraMode == CameraMode_FirstPerson && m_bPaused == false)
			{
				if (m_pPlayer->IsDead() == false)
				{
					RenderCrosshair();
				}
			}

			// Text effects
			m_pTextEffectsManager->Render();

			// Cinematic mode (letter box)
			RenderCinematicLetterBox();

			// Render the HUD
			if (m_pVoxSettings->m_renderGUI)
			{
				RenderHUD();
			}
		m_pRenderer->PopMatrix();

		// Disable multisampling for 2d gui and text
		m_pRenderer->DisableMultiSampling();

		// Render other deferred rendering pipelines
		// Paperdoll SSAO for CharacterGUI
		RenderDeferredRenderingPaperDoll();
		// Portrait SSAO for HUD
		if (m_pVoxSettings->m_renderGUI)
		{
			RenderDeferredRenderingPortrait();
		}

		// Render the chunks 2d (debug text information)
		if (m_debugRender)
		{
			//m_pChunkManager->Render2D(m_pGameCamera, m_defaultViewport, m_defaultFont);
		}

		// Frontend 2D
		if(m_gameMode == GameMode_FrontEnd)
		{			
			m_pRenderer->PushMatrix();
				m_pRenderer->SetProjectionMode(PM_2D, m_defaultViewport);
				m_pRenderer->SetCullMode(CM_BACK);

				m_pRenderer->SetLookAtCamera(vec3(0.0f, 0.0f, 250.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 1.0f, 0.0f));

				m_pFrontendManager->Render2D();
			m_pRenderer->PopMatrix();
		}

		// Render the GUI
		RenderGUI();

		// Custom cursor
		if (m_pVoxSettings->m_customCursors && m_bCustomCursorOn)
		{
			if (m_gameMode != GameMode_FrontEnd || m_pFrontendManager->GetFrontendScreen() != FrontendScreen_Intro)
			{
				RenderCustomCursor();
			}
		}

		// Render debug information and text
		RenderDebugInformation();

		// Update the NPC screen positions for select character screen
		m_pNPCManager->UpdateScreenCoordinates2d(m_pGameCamera);

	// End rendering
	m_pRenderer->EndScene();


	// Pass render call to the window class, allow to swap buffers
	m_pVoxWindow->Render();
}
Example #5
0
void BaseApp::RenderFrame()
{	
	m_fpsCounter.MarkFrameStart();

	POINT mousePos;
	GetCursorPos(&mousePos);

	m_mouseX = mousePos.x - m_winPosX;
	m_mouseY = mousePos.y - m_winPosY;

	if(lockMouse)
	{
		m_camera.SetViewByMouse( float(m_mouseLockedX - m_mouseX) * 0.2f , float(m_mouseLockedY - m_mouseY) * 0.2f);	
		CenterMouse();
	}

	float height = g_heightMap->GetInterpolatedHeight(m_camera.m_vEye.x, m_camera.m_vEye.z);

	//if( m_camera.m_vEye.y <= height + 2.0f )
	{
		float oldY = m_camera.m_vEye.y;
		m_camera.m_vEye.y = height + 12.0f;
		float newY = m_camera.m_vEye.y;
		m_camera.m_vCenter.y += newY - oldY;
	}

	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, g_frameBuffer);
	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, g_texFP16.GetID(), 0);
	glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, g_renderBuffer[0]);

	glClearColor(0.8f, 1.0f, 0.8f, 1.0f);
	glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);	

	m_camera.BuildViewMatrix(&modelViewMat);
	glLoadMatrixf(modelViewMat);


	if(!m_freezeFrustum)
		frustum.ComputeFrustum(projMat, modelViewMat);

	glPushMatrix();
	glTranslatef(m_camera.m_vEye.x, m_camera.m_vEye.y, m_camera.m_vEye.z);
	glDepthMask(GL_FALSE);
	m_shdSky->enable();
	m_shdSky->sendUniform3f("color1", 2.0f, 2.0f, 2.0f);
	m_shdSky->sendUniform3f("color2", 0.5f, 0.7f, 2.0f);
	m_skydome.Render();
	m_shdSky->disable();
	//glDepthMask(GL_TRUE);
	glPopMatrix();




	Vec3 sunPos = m_sunPos * 500.0f;
	glPopMatrix();
	glPushMatrix();
	glTranslatef(m_camera.m_vEye.x + sunPos.x, m_camera.m_vEye.y + sunPos.y, m_camera.m_vEye.z + sunPos.z);
	m_texSun.Activate(0);
	m_shdSimpleColor->enable();
	m_shdSimpleColor->sendUniform3f("color", 4.0f, 4.0f, 2.0f);
	glEnable(GL_BLEND );
	glBlendFunc(GL_SRC_COLOR, GL_ONE);
	RenderSprite(2000, &m_camera.m_vEye, modelViewMat);
	glDisable(GL_BLEND );
	m_shdSimpleColor->disable();
	m_texSun.Deactivate();


glDepthMask(GL_TRUE);
	glPopMatrix();



	g_quadtree->Render(frustum, m_camera.m_vEye);
/*
	glAlphaFunc(GL_GREATER,0.5f);
	glEnable(GL_ALPHA_TEST);
	Mat4 tmp;

	tmp.Identity();
	tmp.Translate(Vec3(0.0f, g_heightMap->GetInterpolatedHeight(0.0f, 0.0f), 0.0f));
	model.render(tmp, &frustum);

	tmp.Identity();
	tmp.Translate(Vec3(50.0f, g_heightMap->GetInterpolatedHeight(50.0f, 0.0f), 0.0f));
	model.render(tmp, &frustum);

	tmp.Identity();
	tmp.Translate(Vec3(0.0f, g_heightMap->GetInterpolatedHeight(0.0f, 100.0f), 100.0f));
	model.render(tmp, &frustum);

	tmp.Identity();
	tmp.Translate(Vec3(-50.0f, g_heightMap->GetInterpolatedHeight(-50.0f, -200.0f), -200.0f));
	model.render(tmp, &frustum);

	glDisable(GL_ALPHA_TEST);

*/

	RenderWaterReflection();

	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, g_texFP16.GetID(), 0);
	glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, g_renderBuffer[0]);


	g_texFP162.Bind(0);
	glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0,0, 0, m_width, m_height);



	RenderWater();
	RenderWaterSpecular();

	


		RenderUnderwaterNormalMap();

	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

	// No wireframe
	glPushAttrib(GL_POLYGON_BIT);				
	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);


	glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);	

	if(m_camera.m_vEye.y < 0)
	{

		m_shdUnderwater->enable();
		m_shdUnderwater->sendUniform1i("g_texViewport", 0);
		m_shdUnderwater->sendUniform1i("g_texNormalMap", 1);
		LARGE_INTEGER time;
		QueryPerformanceCounter(&time);
		m_shdUnderwater->sendUniform1f("g_waterTranslation", float(time.QuadPart) * 0.000000008f);
		g_texWaterReflect.Bind(1);
	}

	g_texFP16.Activate(0);
	RenderScreenCoveringQuad();
	g_texFP16.Deactivate();
/*
	g_texWaterReflect.Activate(0);
	RenderScreenCoveringQuad();
	g_texWaterReflect.Deactivate();
*/
	if(m_camera.m_vEye.y < 0)
	{
		m_shdUnderwater->disable();
	}

	BlurHDR();

	glEnable(GL_BLEND);
	glBlendFunc(GL_ONE, GL_ONE);
	g_texVBluredHDR.Activate(0);
	RenderScreenCoveringQuad();
	g_texVBluredHDR.Deactivate();
	glDisable(GL_BLEND);

	m_pGui->SetViewportDim(m_width, m_height);

	m_pGui->Render(m_mouseX, m_mouseY, this->m_mouseButton);

	m_pFont->Enable(m_width, m_height);
	m_pFont->SetAlignment(FONT_HORIZ_ALIGN_RIGHT, FONT_VERT_ALIGN_TOP);
	m_pFont->Print(m_width - 10, 10, "FPS: %d", (int)m_fpsCounter.GetFPS() );
	m_pFont->Print(m_width - 10, 30, "Camera eye: %f, %f, %f", m_camera.m_vEye.x, m_camera.m_vEye.y, m_camera.m_vEye.z);	
	m_pFont->Print(m_width - 10, 50, "Camera center: %f, %f, %f", m_camera.m_vCenter.x, m_camera.m_vCenter.y, m_camera.m_vCenter.z);	
	m_pFont->Print(m_width - 10, 70, "Triangles rendered: %d", g_quadtree->GetNumTrisLastRendered());	
	m_pFont->Print(m_width - 10, 90, "VBOs data size: %d bytes", g_quadtree->m_vboDataSize);
	//m_pFont->Print(m_width - 10, 110, "Mouse coords: (%d, %d)", m_mouseX, m_mouseY);	
	m_pFont->Disable();
/*
	RenderTexDebug(3, 3, 2, g_texVBluredHDR.GetID(), "Blured HDR");
	RenderTexDebug(2, 3, 2, g_texHDR.GetID(), "HDR");
	RenderTexDebug(1, 3, 2, g_texFP16.GetID(), "Water refraction");
	RenderTexDebug(0, 3, 2, g_texWaterReflect.GetID(), "Water reflection");
*/
	glPopAttrib();

	SwapBuffers(m_hDC);

	m_fpsCounter.MarkFrameEnd();
}