Jump to content
  • Advertisement

Mohammed Abdulmonem

Member
  • Content Count

    11
  • Joined

  • Last visited

Community Reputation

120 Neutral

About Mohammed Abdulmonem

  • Rank
    Member
  1. Mohammed Abdulmonem

    problem in resizing the swapchain buffers

    i already tried something .....i patched the program to never call onResize() and it works except that it is low quality....low quality problem is easy to solve(increasing resolution)...but that means i need to patch it also to be unable to resize window...the problem is kind of fixed....that means the problem where on resize function...isn't there any kind of rules or special condition (like releasing the buffers before calling swapchain->resizebuffers())...
  2. Mohammed Abdulmonem

    problem in resizing the swapchain buffers

    do you mean like this line wvp = XMLoadFloat4x4(&(B.Memory[0].Pieces[35])) * vp;   i am sorry i didn't name the variables to be understandable .....B is variable that contains of world matrices of any possible step for the falling small cubes(tetris-like) it contains of struct BUILD //BUILD B; { std::vector <Floor> Memory; BUILD(){ Memory.resize(10); // i got 10 floors } UINT GetSize(){ return Memory.size(); } }; struct Floor{ XMFLOAT4X4 Pieces[36]; //Floor contains 36 possible step std::vector <UINT> filledindeces;// contains the indices of the filled matrices }; //this is how i set the B variable void Game::SetBuild(){ float x=0,y=0,z=0; XMMATRIX tMat; Floor tFloor;//temporary varaible to set floor matrices one by one UINT re = B.GetSize(); //B is a member variable for (UINT i = 0; i < re ; i++) { x=0;z=0; for (int j = 0; j < 36; j++) { tMat = XMMatrixTranslation(x,y,z); XMStoreFloat4x4(&tFloor.Pieces[j],tMat); if (j == 35) { y+= heightoff; // hieghtoff = height / 10 x=0; z=0; continue; } if ((j+1) % 6 == 0) { x -= widthoff; //widthoff = width / 6 z = 0; continue; } z -= depthoff; //depthoff = depth / 6 } B.Memory[i]=tFloor; } B.Memory[9].filledindeces.push_back(10); //drop a box from the 10th floor at index 10 currentItem.Floor_Index=10; //currentItem is a member variable for tracking the currently falling box to move it when the user press buttons currentItem.Height=9; }    well i didn't mention it because i am sure there is no problem here ....those  matrices are already constant i call setBuild() in the first initializations ..... i dont change them at all .....
  3. Mohammed Abdulmonem

    problem in resizing the swapchain buffers

    the funny thing is i didn't even notice something weird ....i posted the resizing function and you didn't see something wrong in it so you asked for the complete code you were making sense ....anyway my problem is when i switch to full screen ....the drawing and the box all gets messed up....the first picture where the program works correctly(windowed)....the second switched to full screen the box gets drawn a bit away from the camera .........
  4. Mohammed Abdulmonem

    problem in resizing the swapchain buffers

    ok ..this the initialization routine bool Directx11::init(HINSTANCE hinst,HWND hw){ _hinst=hinst;_hwnd=hw; RECT rc; GetClientRect(_hwnd,&rc); height= rc.bottom - rc.top; width = rc.right - rc.left; UINT flags=0; #ifdef _DEBUG flags |=D3D11_CREATE_DEVICE_DEBUG; #endif HR(D3D11CreateDevice(0,_driverType,0,flags,0,0,D3D11_SDK_VERSION,&d3dDevice,&_featureLevel,&d3dDeviceContext)); if (d3dDevice == 0 || d3dDeviceContext == 0) return 0; DXGI_SWAP_CHAIN_DESC sdesc; HR(d3dDevice->CheckMultisampleQualityLevels(DXGI_FORMAT_R8G8B8A8_UNORM,4,&m4xMsaaQuality)); m4xMsaaEnable=true; ZeroMemory(&sdesc,sizeof(DXGI_SWAP_CHAIN_DESC)); sdesc.Windowed=true; sdesc.BufferCount=1; sdesc.BufferDesc.Format=DXGI_FORMAT_R8G8B8A8_UNORM; sdesc.BufferDesc.Height=height; sdesc.BufferDesc.Width=width; sdesc.BufferDesc.Scaling=DXGI_MODE_SCALING_UNSPECIFIED; sdesc.BufferDesc.ScanlineOrdering=DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; sdesc.OutputWindow=_hwnd; sdesc.BufferDesc.RefreshRate.Denominator=1; sdesc.BufferDesc.RefreshRate.Numerator=60; sdesc.Flags=0; sdesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; if (m4xMsaaEnable) { sdesc.SampleDesc.Count=4; sdesc.SampleDesc.Quality=m4xMsaaQuality-1; } else { sdesc.SampleDesc.Count=1; sdesc.SampleDesc.Quality=0; } IDXGIDevice *Device=0; HR(d3dDevice->QueryInterface(__uuidof(IDXGIDevice),reinterpret_cast <void**> (&Device))); IDXGIAdapter*Ad=0; HR(Device->GetParent(__uuidof(IDXGIAdapter),reinterpret_cast <void**> (&Ad))); IDXGIFactory* fac=0; HR(Ad->GetParent(__uuidof(IDXGIFactory),reinterpret_cast <void**> (&fac))); fac->CreateSwapChain(d3dDevice,&sdesc,&swapchain); ReleaseCOM(Device); ReleaseCOM(Ad); ReleaseCOM(fac); ID3D11Texture2D *back = 0; HR(swapchain->GetBuffer(0,__uuidof(ID3D11Texture2D),reinterpret_cast <void**> (&back))); HR(d3dDevice->CreateRenderTargetView(back,0,&RenderTarget)); D3D11_TEXTURE2D_DESC Tdesc; ZeroMemory(&Tdesc,sizeof(D3D11_TEXTURE2D_DESC)); Tdesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; Tdesc.ArraySize = 1; Tdesc.Format= DXGI_FORMAT_D24_UNORM_S8_UINT; Tdesc.Height= height; Tdesc.Width = width; Tdesc.Usage = D3D11_USAGE_DEFAULT; Tdesc.MipLevels=1; if (m4xMsaaEnable) { Tdesc.SampleDesc.Count=4; Tdesc.SampleDesc.Quality=m4xMsaaQuality-1; } else { Tdesc.SampleDesc.Count=1; Tdesc.SampleDesc.Quality=0; } HR(d3dDevice->CreateTexture2D(&Tdesc,0,&depthview)); HR(d3dDevice->CreateDepthStencilView(depthview,0,&depth)); d3dDeviceContext->OMSetRenderTargets(1,&RenderTarget,depth); D3D11_VIEWPORT vp; vp.TopLeftX=0.0f; vp.TopLeftY=0.0f; vp.Width = static_cast <float> (width); vp.Height= static_cast <float> (height); vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; d3dDeviceContext -> RSSetViewports(1,&vp); return true; } and this is the function that updates the view matrix and the app scenes this need some explanation so you dont waste your time trying to understand .... this function job is update the world matrices every one second (3D Tetris app) droping a box from above every 10 secs ..... so it will need about 10 secs to reach the bottom until it drops another box.......the B variable contains every possible step  (small cubes world matrices) ....currentitem variable is to store the currently dropping box to move if the user clicked arrows buttons ........also updating the view matrix every frame....the view matrix updating is at the bottom of the function void Game::Update(float dt){ static float T = 0.0f,T2=0.0; T = T + dt;T2 += dt; UINT ge; if ((T * 1000.0f)>= 1000.0f) { UINT mon = B.GetSize(); for (UINT i = 1; i < mon ; i++) { UINT si=B.Memory[i].filledindeces.size(),si2 = B.Memory[i-1].filledindeces.size(); for (UINT r = 0; r < si; r++) { ge =B.Memory[i].filledindeces.back(); for (UINT kll = 0; kll < si2; kll++) { if (ge == B.Memory[i-1].filledindeces[kll]) { ge = 10000; } } if (ge == 10000) { if(i == 9) { MessageBoxA(_hwnd,"you lost\nTerminating...","Game Over",MB_ICONINFORMATION); exit(1); } continue; } B.Memory[i].filledindeces.pop_back(); B.Memory[i - 1].filledindeces.push_back(ge); currentItem.Height=i-1; } } T=0.0f; int ra = rand(); if(ra<0) ra = -1* ra; if ((T2 * 1000.0f) >= 10000.0f) { T2 = 0.0f; while(!(ra >=0 && ra <36)){ ra = rand(); } B.Memory[9].filledindeces.push_back(ra); currentItem.Floor_Index=ra; currentItem.Height=9; } } float x=radius * sinf(phi) * cosf(theta); float z=radius * sinf(phi) * sinf(theta); float y=radius * cosf(phi); XMMATRIX V; XMVECTOR Foc = XMVectorSet(B.Memory[8].Pieces[18]._11,B.Memory[8].Pieces[18]._22,B.Memory[8].Pieces[18]._33,1.0f), Up = XMVectorSet(0.0f,1.0f,0.0f,0.0f), Pos= XMVectorSet(x , y ,z,1.0f); V=XMMatrixLookAtLH(Pos,Foc,Up); XMStoreFloat4x4(&View,V); } this the rendering function void Game::Render(){ d3dDeviceContext->ClearRenderTargetView(RenderTarget,reinterpret_cast <const float*> (&Colors::LightSteelBlue)); d3dDeviceContext->ClearDepthStencilView(depth,D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL,1.0f,0); d3dDeviceContext-> IASetInputLayout(_layout); d3dDeviceContext-> IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); d3dDeviceContext->IASetIndexBuffer(indices,DXGI_FORMAT_R32_UINT,0); UINT strides=sizeof(Vertex),off=0; d3dDeviceContext->IASetVertexBuffers(0,1,&vertices,&strides,&off); D3DX11_TECHNIQUE_DESC des; Tech->GetDesc(&des); Floor * Lookup; std::vector<XMFLOAT4X4> filled; XMMATRIX V=XMLoadFloat4x4(&View),P = XMLoadFloat4x4(&Proj); XMMATRIX vp = V * P; XMMATRIX wvp; for (UINT i = 0; i < des.Passes; i++) { wvp = XMLoadFloat4x4(&(B.Memory[0].Pieces[35])) * vp; HR(ShadeMat->SetMatrix(reinterpret_cast<float*> ( &wvp))); HR(Tech->GetPassByIndex(i)->Apply(0,d3dDeviceContext)); d3dDeviceContext->RSSetState(BuildRast); d3dDeviceContext-> DrawIndexed(build_ind_count,build_ind_index,build_vers_index); d3dDeviceContext->RSSetState(0); UINT r1=10; for (UINT j = 0; j < r1; j++) { Lookup = &B.Memory[j]; for (UINT r = 0; r < Lookup->filledindeces.size(); r++) { filled.push_back(Lookup->Pieces[Lookup->filledindeces[r]]); } } UINT r2=filled.size(); for (UINT j = 0; j < r2; j++) { wvp = XMLoadFloat4x4(&filled[j])*vp; ShadeMat->SetMatrix( reinterpret_cast<float*> (&wvp)); Tech->GetPassByIndex(i)->Apply(0,d3dDeviceContext); d3dDeviceContext->DrawIndexed(piese_ind_count,piese_ind_index,piese_vers_index); } filled.clear(); } HR(swapchain->Present(0,0)); } thanks for you time
  5. Mohammed Abdulmonem

    problem in resizing the swapchain buffers

    yes i release the stuff and called d3ddevicecontext->ClearState()  before resizing ....do you have to change the view matrix?....i thought Directx updates coordantes scaling when you call swapchain->rsizebuffers()....if so i suppose i dont need to change the view matrix.....   AspectRatio() is float AspectRatio()const{ return static_cast <float> (width) / height; }  here is the code for resizing...... void Directx11::onResize(){ RECT rc; GetClientRect(_hwnd,&rc); width = rc.right - rc.left; height = rc.bottom - rc.top; ReleaseCOM(RenderTarget); ReleaseCOM(depth); ReleaseCOM(depthview); d3dDeviceContext->ClearState(); swapchain -> ResizeBuffers(1,width,height,DXGI_FORMAT_R8G8B8A8_UNORM,0); ID3D11Texture2D *back; HR(swapchain ->GetBuffer(0,__uuidof(ID3D11Texture2D),reinterpret_cast <void**> (&back))); HR(d3dDevice -> CreateRenderTargetView(back,0,&RenderTarget)); D3D11_TEXTURE2D_DESC desc; ZeroMemory(&desc,sizeof(D3D11_TEXTURE2D_DESC)); desc.ArraySize=1; desc.BindFlags=D3D11_BIND_DEPTH_STENCIL; desc.Format=DXGI_FORMAT_D24_UNORM_S8_UINT; desc.MipLevels=1; desc.Width= width; desc.Height=height; if (m4xMsaaEnable) { desc.SampleDesc.Count = 4; desc.SampleDesc.Quality=m4xMsaaQuality-1; } else { desc.SampleDesc.Count = 1; desc.SampleDesc.Quality=0; } HR(d3dDevice->CreateTexture2D(&desc,0,&depthview)); HR(d3dDevice-> CreateDepthStencilView(depthview,0,&depth)); d3dDeviceContext->OMSetRenderTargets(1,&RenderTarget,depth); D3D11_VIEWPORT vp; vp.TopLeftX=0.0f; vp.TopLeftY=0.0f; vp.Width = static_cast <float> (width); vp.Height= static_cast <float> (height); vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; d3dDeviceContext -> RSSetViewports(1,&vp); }
  6. Mohammed Abdulmonem

    problem in resizing the swapchain buffers

    i tried it ....no changes still the same problem
  7. this is in 640 x 480 window picture http://prntscr.com/4emyyi this is when switching to full screen mode http://prntscr.com/4emzab this is the resizing code void Game::onResize(){ RECT rc; GetClientRect(_hwnd,&rc); width=rc.right - rc.left; height=rc.bottom - rc.top; Directx11 :: onResize(); //swapchain new setting XMMATRIX Pro=XMMatrixPerspectiveFovLH((float)3.14 / 4,AspectRatio(),1.0f,1000.0f); XMStoreFloat4x4(&Proj,Pro); } Directx11::onresize() void Directx11::onResize(){ RECT rc; GetClientRect(_hwnd,&rc); width = rc.right - rc.left; height = rc.bottom - rc.top; swapchain -> ResizeBuffers(1,width,height,DXGI_FORMAT_R8G8B8A8_UNORM,0); ReleaseCOM(RenderTarget); ReleaseCOM(depth); ReleaseCOM(depthview); ID3D11Texture2D *back; HR(swapchain ->GetBuffer(0,__uuidof(ID3D11Texture2D),reinterpret_cast <void**> (&back))); HR(d3dDevice -> CreateRenderTargetView(back,0,&RenderTarget)); D3D11_TEXTURE2D_DESC desc; ZeroMemory(&desc,sizeof(D3D11_TEXTURE2D_DESC)); desc.ArraySize=1; desc.BindFlags=D3D11_BIND_DEPTH_STENCIL; desc.Format=DXGI_FORMAT_D24_UNORM_S8_UINT; desc.MipLevels=1; desc.Width= width; desc.Height=height; if (m4xMsaaEnable) { desc.SampleDesc.Count = 4; desc.SampleDesc.Quality=m4xMsaaQuality-1; } else { desc.SampleDesc.Count = 1; desc.SampleDesc.Quality=0; } HR(d3dDevice->CreateTexture2D(&desc,0,&depthview)); HR(d3dDevice-> CreateDepthStencilView(depthview,0,&depth)); d3dDeviceContext->OMSetRenderTargets(1,&RenderTarget,depth); D3D11_VIEWPORT vp; vp.TopLeftX=0.0f; vp.TopLeftY=0.0f; vp.Width = static_cast <float> (width); vp.Height= static_cast <float> (height); vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; d3dDeviceContext -> RSSetViewports(1,&vp); }
  8. Mohammed Abdulmonem

    D3D11DeviceContext::DrawIndexed Does'nt Draw anything

    Thanks Jason Z ..and Buckeye  it is solved ....The Problem is simply  in GeoBuild() (Mentioned in the Post ) std::vector<UINT> inds(piese_ind_count + build_ind_count); //cause of the bug std::vector<UINT> inds //works fine i dont know why and how but i guess std::vector constructor fills its element by some values which corrupt the index buffer.... thanks all for your time
  9. Mohammed Abdulmonem

    D3D11DeviceContext::DrawIndexed Does'nt Draw anything

    yes i mean off =0, Lookup is variable to lookup the matrices of the smaller cubes there is no smaller cubes now so it should do nothing    i set it to the default rasterizer state (RSSetState(0)) also changed the camera position to (0.0,0.0,0.0) and and the focus to (15.0,15.0,15.0) and radius to 50.0 is there anything else beside what jason said that can fail drawing ...i am new to this so there might be some deep details i missed...thanks
  10. Mohammed Abdulmonem

    D3D11DeviceContext::DrawIndexed Does'nt Draw anything

    yes i am clearing the depth stencil buffer each frame is there any problem?... my rasterizer state  is setted on CULL_MODE_FRONT .....because i want to see what in the container..... i can't use PIX it always crashes even with the correctly working programs (i am using win7)..... i checked camera and matrices multiple Times and i even increased the Length of camera radius but stills nothing ... Thanks for your time
  11. my program is Directx Program that draws a container cube within it smaller cubes....these smaller cubes fall by time i hope you understand what i mean... The program isn't complete yet ...it should draws the container only ....but it draws nothing ...only the background color is visible... i only included what i think is needed ...   this is the routines that initialize the program bool Game::init(HINSTANCE hinst,HWND _hw){ Directx11 ::init(hinst , _hw); return LoadContent(); } Directx11::init() bool Directx11::init(HINSTANCE hinst,HWND hw){ _hinst=hinst;_hwnd=hw; RECT rc; GetClientRect(_hwnd,&rc); height= rc.bottom - rc.top; width = rc.right - rc.left; UINT flags=0; #ifdef _DEBUG flags |=D3D11_CREATE_DEVICE_DEBUG; #endif HR(D3D11CreateDevice(0,_driverType,0,flags,0,0,D3D11_SDK_VERSION,&d3dDevice,&_featureLevel,&d3dDeviceContext)); if (d3dDevice == 0 || d3dDeviceContext == 0) return 0; DXGI_SWAP_CHAIN_DESC sdesc; ZeroMemory(&sdesc,sizeof(DXGI_SWAP_CHAIN_DESC)); sdesc.Windowed=true; sdesc.BufferCount=1; sdesc.BufferDesc.Format=DXGI_FORMAT_R8G8B8A8_UNORM; sdesc.BufferDesc.Height=height; sdesc.BufferDesc.Width=width; sdesc.BufferDesc.Scaling=DXGI_MODE_SCALING_UNSPECIFIED; sdesc.BufferDesc.ScanlineOrdering=DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; sdesc.OutputWindow=_hwnd; sdesc.BufferDesc.RefreshRate.Denominator=1; sdesc.BufferDesc.RefreshRate.Numerator=60; sdesc.Flags=0; sdesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; if (m4xMsaaEnable) { sdesc.SampleDesc.Count=4; sdesc.SampleDesc.Quality=m4xMsaaQuality-1; } else { sdesc.SampleDesc.Count=1; sdesc.SampleDesc.Quality=0; } IDXGIDevice *Device=0; HR(d3dDevice->QueryInterface(__uuidof(IDXGIDevice),reinterpret_cast <void**> (&Device))); IDXGIAdapter*Ad=0; HR(Device->GetParent(__uuidof(IDXGIAdapter),reinterpret_cast <void**> (&Ad))); IDXGIFactory* fac=0; HR(Ad->GetParent(__uuidof(IDXGIFactory),reinterpret_cast <void**> (&fac))); fac->CreateSwapChain(d3dDevice,&sdesc,&swapchain); ReleaseCOM(Device); ReleaseCOM(Ad); ReleaseCOM(fac); ID3D11Texture2D *back = 0; HR(swapchain->GetBuffer(0,__uuidof(ID3D11Texture2D),reinterpret_cast <void**> (&back))); HR(d3dDevice->CreateRenderTargetView(back,0,&RenderTarget)); D3D11_TEXTURE2D_DESC Tdesc; ZeroMemory(&Tdesc,sizeof(D3D11_TEXTURE2D_DESC)); Tdesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; Tdesc.ArraySize = 1; Tdesc.Format= DXGI_FORMAT_D24_UNORM_S8_UINT; Tdesc.Height= height; Tdesc.Width = width; Tdesc.Usage = D3D11_USAGE_DEFAULT; Tdesc.MipLevels=1; if (m4xMsaaEnable) { Tdesc.SampleDesc.Count=4; Tdesc.SampleDesc.Quality=m4xMsaaQuality-1; } else { Tdesc.SampleDesc.Count=1; Tdesc.SampleDesc.Quality=0; } HR(d3dDevice->CreateTexture2D(&Tdesc,0,&depthview)); HR(d3dDevice->CreateDepthStencilView(depthview,0,&depth)); d3dDeviceContext->OMSetRenderTargets(1,&RenderTarget,depth); D3D11_VIEWPORT vp; vp.TopLeftX=0.0f; vp.TopLeftY=0.0f; vp.Width = static_cast <float> (width); vp.Height= static_cast <float> (height); vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; d3dDeviceContext -> RSSetViewports(1,&vp); return true; LoadContent() Loads The Effect File No proplem in loading the effect file   this is the routine that creates the container and the smaller cubes meshes bool Game::GeoBuild(){ CreateInputLayout(); CreateRasterizerState(); CreateBox(30.0,30.0,30.0,Build); CreateBox(3.0,3.0,3.0,Piese); SetBuild(&B); build_vers_index = 0; build_vers_count= Build.vertices.size(); build_ind_index= 0; build_ind_count=Build.indices.size(); piese_vers_index = build_vers_count; piese_vers_count= Piese.vertices.size(); piese_ind_index= build_ind_count; piese_ind_count=Piese.indices.size(); UINT k=0; std::vector <Vertex> Vers(piese_vers_count + build_vers_count); for (UINT i = 0; i < build_vers_count; i++,k++) { XMStoreFloat4(&Build.vertices[i].Color,(XMVECTOR)Colors::Red); Vers[k]=Build.vertices[i]; } for (UINT i = 0; i < piese_vers_count; i++ , k++) { XMStoreFloat4(&Piese.vertices[i].Color,(XMVECTOR)Colors::Green); Vers[k]=Piese.vertices[i]; } D3D11_BUFFER_DESC desc; desc.BindFlags=D3D11_BIND_VERTEX_BUFFER; desc.ByteWidth=sizeof(Vertex) * (piese_vers_count + build_vers_count); desc.CPUAccessFlags=0; desc.MiscFlags=0; desc.Usage=D3D11_USAGE_IMMUTABLE; D3D11_SUBRESOURCE_DATA Data; ZeroMemory(&Data,sizeof(D3D11_SUBRESOURCE_DATA)); Data.pSysMem=&Vers[0]; HR(d3dDevice->CreateBuffer(&desc,&Data,&vertices)); std::vector<UINT> inds(piese_ind_count + build_ind_count); k=0; for (UINT i = 0; i < build_ind_count; i++,k++) { inds[k]=Build.indices[i]; } for (UINT i = 0; i < piese_ind_count; i++ , k++) { inds[k]=Piese.indices[i]; } desc.BindFlags=D3D11_BIND_INDEX_BUFFER; desc.ByteWidth=sizeof(UINT) * inds.size(); desc.CPUAccessFlags=0; desc.MiscFlags=0; desc.Usage=D3D11_USAGE_IMMUTABLE; ZeroMemory(&Data,sizeof(D3D11_SUBRESOURCE_DATA)); Data.pSysMem=&inds[0]; HR(d3dDevice->CreateBuffer(&desc,&Data,&indices)); return true; } SetBuild() Prepare the matrices inside the container for the smaller cubes ....i didnt program it to draw the smaller cubes yet   and this the function that draws the scene void Game::Render(){ d3dDeviceContext->ClearRenderTargetView(RenderTarget,reinterpret_cast <const float*> (&Colors::LightSteelBlue)); d3dDeviceContext->ClearDepthStencilView(depth,D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL,1.0f,0); d3dDeviceContext-> IASetInputLayout(_layout); d3dDeviceContext-> IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST); d3dDeviceContext->IASetIndexBuffer(indices,DXGI_FORMAT_R32_UINT,0); UINT strides=sizeof(Vertex),off=0; d3dDeviceContext->IASetVertexBuffers(0,1,&vertices,&strides,&off); D3DX11_TECHNIQUE_DESC des; Tech->GetDesc(&des);Floor * Lookup; std::vector<XMFLOAT4X4> filled; XMMATRIX V=XMLoadFloat4x4(&View),P = XMLoadFloat4x4(&Proj); XMMATRIX vp = V * P;XMMATRIX wvp;XMFLOAT4X4 fwvp; for (UINT i = 0; i < des.Passes; i++) { d3dDeviceContext->RSSetState(BuildRast); wvp = XMLoadFloat4x4(&(B.Memory[0].Pieces[0])) * vp; XMStoreFloat4x4(&fwvp,wvp); HR(ShadeMat->SetMatrix(reinterpret_cast<float*> ( &wvp))); HR(Tech->GetPassByIndex(i)->Apply(0,d3dDeviceContext)); d3dDeviceContext->DrawIndexed(build_ind_count,build_ind_index,build_vers_index); d3dDeviceContext->RSSetState(PieseRast); UINT r1=B.GetSize(),r2=filled.size(); for (UINT j = 0; j < r1; j++) { Lookup = &B.Memory[j]; for (UINT r = 0; r < Lookup->filledindeces.size(); r++) { filled.push_back(Lookup->Pieces[Lookup->filledindeces[r]]); } } for (UINT j = 0; j < r2; j++) { ShadeMat->SetMatrix( reinterpret_cast<const float*> (&filled[i])); Tech->GetPassByIndex(i)->Apply(0,d3dDeviceContext); d3dDeviceContext->DrawIndexed(piese_ind_count,piese_ind_index,piese_vers_index); } } HR(swapchain->Present(0,0)); }
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!