nothing rendering in dx program in c++(using ps_5_0 , vs_5_0).i have check of dx functions return hresult , return s_ok, have gone through , debugged , looked @ , nothing null or uninitialized. searched every here , on bing , did not find post helped me(tried of there solutions see if worked, none of them did).i have no idea why not rendering, of parameters good.
here code initializes depth stencil, device context , device.
//create graphics device factory result = createdxgifactory(__uuidof(idxgifactory), (void**)&factory); //use factor create adapter primary graphics interface(video card) result = factory->enumadapters(0, &adapter); if (failed(result)) return false; //enumerate primary adapter output(monitor) result = adapter->enumoutputs(0, &adapteroutput); if (failed(result)) return false; //get adapter(video card) description result = adapter->getdesc(&adapterdesc); if (failed(result)) return false; //zero out swap chain description zeromemory(&swapchaindesc, sizeof(swapchaindesc)); //set ot single buffer swapchaindesc.buffercount = 1; //set regular 32 bit surface buffer. swapchaindesc.bufferdesc.format = dxgi_format_r8g8b8a8_unorm; //set usage of buffer. swapchaindesc.bufferusage = dxgi_usage_render_target_output; //set handle window render to. swapchaindesc.outputwindow = hwnd; //turn multi sampling off swapchaindesc.sampledesc.count = 1; swapchaindesc.sampledesc.quality = 0; //set scan line odering , scaling unspecified. swapchaindesc.bufferdesc.scanlineordering = dxgi_mode_scanline_order_unspecified; swapchaindesc.bufferdesc.scaling = dxgi_mode_scaling_unspecified; //discard buffer contents after presenting swapchaindesc.swapeffect = dxgi_swap_effect_discard; //donw set advanced flags swapchaindesc.flags = 0; //set feature level directx 11 featurelevel = d3d_feature_level_11_0; //create swap chain,direct3d, , driect3d device context. result = d3d11createdeviceandswapchain(null, d3d_driver_type_hardware, null, 0, &featurelevel, 1, d3d11_sdk_version, &swapchaindesc, &m_swapchain, &m_device, null, &m_devicecontext); if (failed(result)) return false; //get pointer buffer result = m_swapchain->getbuffer(0, __uuidof(id3d11texture2d), (lpvoid*)&backbufferptr); if (failed(result)) return false; //create render target view buffer pointer result = m_device->createrendertargetview(backbufferptr, null, &m_rendertarget); //set description of depth buffer depthbufferdesc.width = screenwidth; depthbufferdesc.height = screenheight; depthbufferdesc.miplevels = 1; depthbufferdesc.arraysize = 1; depthbufferdesc.format = dxgi_format_d24_unorm_s8_uint; depthbufferdesc.sampledesc.count = 1; depthbufferdesc.sampledesc.quality = 0; depthbufferdesc.usage = d3d11_usage_default; depthbufferdesc.bindflags = d3d11_bind_depth_stencil; depthbufferdesc.cpuaccessflags = 0; depthbufferdesc.miscflags = 0; //create texture depth buffer using filled out description result = m_device->createtexture2d(&depthbufferdesc, null, &m_depthstencilbuffer); if (failed(result)) return false; // set description of stencil state. depthstencildesc.depthenable = true; depthstencildesc.depthwritemask = d3d11_depth_write_mask_all; depthstencildesc.depthfunc = d3d11_comparison_less; depthstencildesc.stencilenable = true; depthstencildesc.stencilreadmask = 0xff; depthstencildesc.stencilwritemask = 0xff; // stencil operations if pixel front-facing. depthstencildesc.frontface.stencilfailop = d3d11_stencil_op_keep; depthstencildesc.frontface.stencildepthfailop = d3d11_stencil_op_incr; depthstencildesc.frontface.stencilpassop = d3d11_stencil_op_keep; depthstencildesc.frontface.stencilfunc = d3d11_comparison_always; // stencil operations if pixel back-facing. depthstencildesc.backface.stencilfailop = d3d11_stencil_op_keep; depthstencildesc.backface.stencildepthfailop = d3d11_stencil_op_decr; depthstencildesc.backface.stencilpassop = d3d11_stencil_op_keep; depthstencildesc.backface.stencilfunc = d3d11_comparison_always; //create depth stencil state result = m_device->createdepthstencilstate(&depthstencildesc, &m_depthstencil); //set depth stencil state m_devicecontext->omsetdepthstencilstate(m_depthstencil, 1); //set depth stencil view description depthstencilviewdesc.format = dxgi_format_d24_unorm_s8_uint; depthstencilviewdesc.viewdimension = d3d11_dsv_dimension_texture2d; depthstencilviewdesc.texture2d.mipslice = 0; //create depth stencil view result = m_device->createdepthstencilview(m_depthstencilbuffer, &depthstencilviewdesc,&m_depthstencilview); if (failed(result)) return false; //bind render target view , depth stencil buffer output render pipeline m_devicecontext->omsetrendertargets(1, &m_rendertarget, m_depthstencilview); //setup raster description determines how , polygons drawn rasterdesc.antialiasedlineenable = false; rasterdesc.cullmode = d3d11_cull_back; rasterdesc.depthbias = 0; rasterdesc.depthbiasclamp = 0.0f; rasterdesc.depthclipenable = true; rasterdesc.fillmode = d3d11_fill_solid; rasterdesc.frontcounterclockwise = false; rasterdesc.multisampleenable = false; rasterdesc.slopescaleddepthbias = 0.0f; //create rasterizer state description result = m_device->createrasterizerstate(&rasterdesc, &m_rasterstate); // set rasterizer state. m_devicecontext->rssetstate(m_rasterstate); //setup viewport rendering viewport.width = (float)screenwidth; viewport.height = (float)screenheight; viewport.mindepth = 0.0f; viewport.maxdepth = 1.0f; viewport.topleftx = 0.0f; viewport.toplefty = 0.0f; // create view por m_devicecontext->rssetviewports(1, &viewport); //set projection matrix fieldofview = (float)d3dx_pi / 4.0f; screenaspect = (float)screenwidth / (float)screenheight; //create projection matrix 3d rendering d3dxmatrixperspectivefovlh(&m_projectionmatrix, fieldofview, screenaspect, screennear, screendepth); here code renders model(i made sure of vertices good)
float color[4]; //set color clear buffer color[0] = red; color[1] = green; color[2] = blue; color[3] = alpha; //clear buffer m_devicecontext->clearrendertargetview(m_rendertarget, color); //clear depth buffer m_devicecontext->cleardepthstencilview(m_depthstencilview, d3d11_clear_depth, 1.0f,0); unsigned int stride; unsigned int offset; //set vertex buffer stride , offset stride = sizeof(vertex); offset = 0; //set vertex buffer active on device context devicecontext->iasetvertexbuffers(0, 1, &m_vertexbuffer, &stride, &offset); //set index buffer active in input assembler can renderered devicecontext->iasetindexbuffer(m_indexbuffer, dxgi_format_r32_uint, 0); //set type of primitive topology use rendering devicecontext->iasetprimitivetopology(d3d11_primitive_topology_trianglelist); //set vertex input layout devicecontext->iasetinputlayout(m_layout); //set vertex , pixel shaders used render triangle. devicecontext->vssetshader(m_vertexshader, null, 0); devicecontext->pssetshader(m_pixelshader, null, 0); //set sampler state in pixel shader. devicecontext->pssetsamplers(0, 1, &m_samplestate); //render model devicecontext->drawindexed(indexcount, 0, 0); //present buffer screen rendering complete m_swapchain->present(m_vsync, 0); does know doing wrong?(p.s have recent version of program in github here : https://github.com/justinweq/test-engine . has of files in it(including model , shader files, if need @ more information can).
i figured out, few parameters missing when setting up. fixed it, thank trying me everyone.
Comments
Post a Comment