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); } }
void Renderer::main_render() { //forward_rendering_pipeline(); SetRasterState(raster_state_fill_mode); full_deferred_rendering_pipeline(); }
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); } }
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(); } }
//---------------------------------------------------------------------------------------- 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; }