Example #1
0
void Renderer::forward_rendering_pipeline()
{
	//set states
	{
		SetViewPortToDefault();

		if (use_postfx)
		{
			SetRenderViews(screen_texture->get_rt(), GetDefaultDepthStencilView(), 0);
		}
		else
		{
			SetRenderViews(GetDefaultRenderTargetView(), GetDefaultDepthStencilView(), 0);
		}

		clearScreen(D3DXVECTOR4(0, 0, 0, 0));
		SetDepthState(depth_state_enable_test_enable_write);
		default_render_shader->set_shaders();
		SetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
	}

	const vector<Mesh*> &meshes_to_render = scene_to_render->get_meshes();
	for (int i = 0; i < meshes_to_render.size(); i++)
	{
		Mesh *mesh_to_render = meshes_to_render[i];
		mesh_to_render->get_material()->set_textures();
		set_mesh_constant_values(mesh_to_render);

		//set buffers
		SetVertexBuffer(mesh_to_render->get_vertex_buffer(), sizeof(Mesh::Vertex));
		SetIndexBuffer(mesh_to_render->get_index_buffer());

		SetSamplerState();

		if (mesh_to_render->is_wireframe())
		{
			SetRasterState(raster_state_wireframe_mode);
		}
		else
		{
			SetRasterState(raster_state_fill_mode);
		}

		//render
		int tri_to_render = mesh_to_render->get_index_count();
		RenderIndexed(tri_to_render);
	}
}
Example #2
0
void Renderer::main_render()
{
	//forward_rendering_pipeline();

	SetRasterState(raster_state_fill_mode);
	full_deferred_rendering_pipeline();
}
Example #3
0
void Renderer::post_render()
{
	SetRasterState(raster_state_fill_mode);
	SetRenderViews(GetDefaultRenderTargetView(), GetDefaultDepthStencilView(), 0);
	screen_texture->set_srv_to_shader(shader_type_pixel, 3);
	
	for (int i = 0; i < render_components.size(); i++)
	{
		render_components[i]->post_render();
	}

	{
		D3DXVECTOR4 pos(0.89, 0.01, 0, 0);
		D3DXVECTOR4 scale(0.1, 0.1, 1, 1);
		OutputTextureToScreen(gbuffer_normal_texture, pos, scale);
	
		pos.y += 0.11;
		OutputTextureToScreen(gbuffer_albedo_texture, pos, scale);
	
		pos.y += 0.11;
		OutputTextureToScreen(gbuffer_specular_texture, pos, scale);
	}
}
Example #4
0
void Renderer::gbuffer_render()
{
	invalidate_srv(shaderType::shader_type_pixel);

	gbuffer_albedo_texture->set_as_render_target(0);
	gbuffer_normal_texture->set_as_render_target(1);
	gbuffer_specular_texture->set_as_render_target(2);
	clearScreen(D3DXVECTOR4(0, 0, 0, 0));
	ClearRenderView(D3DXVECTOR4(0, 0, 0, 0), 1);
	ClearRenderView(D3DXVECTOR4(0, 0, 0, 0),2);

	SetDepthState(depth_state_enable_test_enable_write);
	
	SetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

	const vector<Mesh*> &meshes_to_render = scene_to_render->get_meshes();

	for (int i = 0; i < meshes_to_render.size(); i++)
	{
		Mesh *mesh_to_render = meshes_to_render[i];

		if (mesh_to_render->get_material())
		{
			mesh_to_render->get_material()->set_textures();
		}
		set_mesh_constant_values(mesh_to_render);

		Shader *shader_to_set = mesh_to_render->get_material() ? mesh_to_render->get_material()->get_enforced_gbuffer_shader() : nullptr;
		if (shader_to_set == nullptr)
		{
			shader_to_set = gbuffer_shader;
		}

		shader_to_set->set_shaders();

		//set buffers
		SetVertexBuffer(mesh_to_render->get_vertex_buffer(), sizeof(Mesh::Vertex));
		SetIndexBuffer(mesh_to_render->get_index_buffer());

		set_mesh_primitive_topology(mesh_to_render);

		if (mesh_to_render->is_wireframe())
		{
			SetRasterState(raster_state_wireframe_mode);
		}
		else
		{
			SetRasterState(raster_state_fill_mode);
		}

		SetSamplerState();

		//render
		int tri_to_render = mesh_to_render->get_index_count();
		RenderIndexed(tri_to_render);
	}

	SetRenderTargetView(nullptr, 0);
	SetRenderTargetView(nullptr, 1);
	SetRenderTargetView(nullptr, 2);

	for (int i = 0; i < render_components.size(); i++)
	{
		render_components[i]->post_gbuffer_render();
	}
}
Example #5
0
	//----------------------------------------------------------------------------------------
	bool Renderer::Init( uint32 wndWidth, uint32 wndHeight, HWND hwnd )
	{
		m_wndWidth = wndWidth;
		m_wndHeight = wndHeight;

#if USE_OPENGL
		m_pRenderSys = new GLRenderSystem;
		_AST(((GLRenderSystem*)m_pRenderSys)->Init(wndWidth, wndHeight, hwnd));
#else
		m_pRenderSys = new D3D11RenderSystem;
		_AST(((D3D11RenderSystem*)m_pRenderSys)->Init(wndWidth, wndHeight, hwnd));
#endif

		// Init rasterize state
		SStateRaster rasterState;
		rasterState.Desc.AntialiasedLineEnable = false;
		rasterState.Desc.CullMode = eCull_BACK;
		rasterState.Desc.DepthBias = 0;
		rasterState.Desc.DepthBiasClamp = 0.0f;
		rasterState.Desc.DepthClipEnable = true;
		rasterState.Desc.FillMode = eFill_Solid;
		rasterState.Desc.FrontCounterClockwise = false;
		rasterState.Desc.MultisampleEnable = false;
		rasterState.Desc.ScissorEnable = false;
		rasterState.Desc.SlopeScaledDepthBias = 0.0f;

		SetRasterState(&rasterState);

		// Init depth stencil state
		SStateDepth depthState;
		depthState.Desc.DepthFunc = eCompareFunc_LESS_EQUAL;

		SetDepthState(&depthState);

		// Init blend state
		SStateBlend blendState;
		blendState.Desc.AlphaToCoverageEnable = false;
		blendState.Desc.IndependentBlendEnable = false;
		blendState.Desc.RenderTarget[0].BlendEnable = false;
		blendState.Desc.RenderTarget[0].SrcBlend = eBlend_ONE;
		blendState.Desc.RenderTarget[0].DestBlend = eBlend_ZERO;
		blendState.Desc.RenderTarget[0].BlendOp = eBlendOp_ADD;
		blendState.Desc.RenderTarget[0].SrcBlendAlpha = eBlend_ONE;
		blendState.Desc.RenderTarget[0].DestBlendAlpha = eBlend_ZERO;
		blendState.Desc.RenderTarget[0].BlendOpAlpha = eBlendOp_ADD;
		blendState.Desc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;

		SetBlendState(&blendState);

		// Setup the viewport
		m_viewport.Width = (float)wndWidth;
		m_viewport.Height = (float)wndHeight;
		m_viewport.MinDepth = 0.0f;
		m_viewport.MaxDepth = 1.0f;
		m_viewport.TopLeftX = 0;
		m_viewport.TopLeftY = 0;

		SetViewport(&m_viewport);

		// Create constant buffers
		m_pGlobalCBuf = m_pRenderSys->CreateConstantBuffer(sizeof(cBufferGlobal), 1);
		m_pMaterialCB = m_pRenderSys->CreateConstantBuffer(sizeof(cBufferMaterial), 2);
		m_pSkinCB = m_pRenderSys->CreateConstantBuffer(sizeof(cBufferSkin), 3);

		m_pFont = new Font;

		return true;
	}