Advertisement
Guest User

Untitled

a guest
Jul 25th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. pfe::cont::List< pfe::cont::String > refs; // Holds the semantics references until the format is created and done
  2.  
  3. s::Ref< WCHAR > sText = to_WideChar( pfe::cont::String(fileName) );
  4. ID3DBlob* pVSBlob = NULL;
  5. HRESULT hr = S_OK;
  6. size_t count = sCont.vertexFormat.length();
  7. pfe::cont::List<Vertex_Member> &format = sCont.vertexFormat;
  8. D3D11_INPUT_ELEMENT_DESC *layout = (D3D11_INPUT_ELEMENT_DESC*)alloca( count * sizeof( D3D11_INPUT_ELEMENT_DESC ) );
  9. size_t offset = 0;
  10.  
  11. if( FAILED( hr = CompileShaderFromFile( &*sText, "VS", "vs_4_0", &pVSBlob ) ) ) goto failure;
  12. if( FAILED( hr = dev->g_pd3dDevice->CreateVertexShader( pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), NULL, &g_pVertexShader ) ) ) goto failure;
  13.  
  14. for( Int32 i = 0; i < format.length(); i++ )
  15. {
  16. Vertex_Member &member = format[i];
  17. pfe::cont::String raw_Sem = member.semantic;
  18. pfe::cont::String sem = raw_Sem;
  19. Int32 subs = 0;
  20. Int32 numPlace = 1;
  21. Int32 last = sem.length();
  22.  
  23. for( Int32 k = raw_Sem.length()-1; k >= 0; k-- )
  24. {
  25. if( raw_Sem.is_Numeric(k) )
  26. {
  27. Char8 c = raw_Sem[k];
  28. sem = raw_Sem.remove( k );
  29.  
  30. switch( c )
  31. {
  32. case '1': subs += 1*numPlace; break;
  33. case '2': subs += 2*numPlace; break;
  34. case '3': subs += 3*numPlace; break;
  35. case '4': subs += 4*numPlace; break;
  36. case '5': subs += 5*numPlace; break;
  37. case '6': subs += 6*numPlace; break;
  38. case '7': subs += 7*numPlace; break;
  39. case '8': subs += 8*numPlace; break;
  40. case '9': subs += 9*numPlace; break;
  41. }
  42.  
  43. numPlace *= 10;
  44. }
  45. else
  46. break;
  47. }
  48.  
  49.  
  50. refs.push_Back( sem );
  51.  
  52. DXGI_FORMAT form = deduce_Format( member );
  53. D3D11_INPUT_ELEMENT_DESC descr = { sem.peek(), subs, form, 0, (Dword)offset, D3D11_INPUT_PER_VERTEX_DATA, 0 };
  54. layout[i] = descr;
  55.  
  56. offset += member.bytes;
  57. }
  58.  
  59.  
  60. if( FAILED( hr = dev->g_pd3dDevice->CreateInputLayout( layout, (UINT)count, pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), &g_pVertexLayout ) ) ) goto failure;
  61.  
  62. pVSBlob->Release();
  63. return;
  64. failure:
  65.  
  66. std::cout<<"Vituix meni"<<std::endl;
  67.  
  68. if( pVSBlob != nullptr ) pVSBlob->Release();
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement