Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pfe::cont::List< pfe::cont::String > refs; // Holds the semantics references until the format is created and done
- s::Ref< WCHAR > sText = to_WideChar( pfe::cont::String(fileName) );
- ID3DBlob* pVSBlob = NULL;
- HRESULT hr = S_OK;
- size_t count = sCont.vertexFormat.length();
- pfe::cont::List<Vertex_Member> &format = sCont.vertexFormat;
- D3D11_INPUT_ELEMENT_DESC *layout = (D3D11_INPUT_ELEMENT_DESC*)alloca( count * sizeof( D3D11_INPUT_ELEMENT_DESC ) );
- size_t offset = 0;
- if( FAILED( hr = CompileShaderFromFile( &*sText, "VS", "vs_4_0", &pVSBlob ) ) ) goto failure;
- if( FAILED( hr = dev->g_pd3dDevice->CreateVertexShader( pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), NULL, &g_pVertexShader ) ) ) goto failure;
- for( Int32 i = 0; i < format.length(); i++ )
- {
- Vertex_Member &member = format[i];
- pfe::cont::String raw_Sem = member.semantic;
- pfe::cont::String sem = raw_Sem;
- Int32 subs = 0;
- Int32 numPlace = 1;
- Int32 last = sem.length();
- for( Int32 k = raw_Sem.length()-1; k >= 0; k-- )
- {
- if( raw_Sem.is_Numeric(k) )
- {
- Char8 c = raw_Sem[k];
- sem = raw_Sem.remove( k );
- switch( c )
- {
- case '1': subs += 1*numPlace; break;
- case '2': subs += 2*numPlace; break;
- case '3': subs += 3*numPlace; break;
- case '4': subs += 4*numPlace; break;
- case '5': subs += 5*numPlace; break;
- case '6': subs += 6*numPlace; break;
- case '7': subs += 7*numPlace; break;
- case '8': subs += 8*numPlace; break;
- case '9': subs += 9*numPlace; break;
- }
- numPlace *= 10;
- }
- else
- break;
- }
- refs.push_Back( sem );
- DXGI_FORMAT form = deduce_Format( member );
- D3D11_INPUT_ELEMENT_DESC descr = { sem.peek(), subs, form, 0, (Dword)offset, D3D11_INPUT_PER_VERTEX_DATA, 0 };
- layout[i] = descr;
- offset += member.bytes;
- }
- if( FAILED( hr = dev->g_pd3dDevice->CreateInputLayout( layout, (UINT)count, pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), &g_pVertexLayout ) ) ) goto failure;
- pVSBlob->Release();
- return;
- failure:
- std::cout<<"Vituix meni"<<std::endl;
- if( pVSBlob != nullptr ) pVSBlob->Release();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement