Advertisement
Ember

input layouts

May 23rd, 2015
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.86 KB | None | 0 0
  1. bool DeviceContext::Initialize()
  2. {
  3.     File vertexShaderFile;
  4.     UInt numElements;
  5.     HRESULT hresult;
  6.  
  7.     //D3D11_INPUT_ELEMENT_DESC polygonLayout[] =
  8.     //{
  9.     //    {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Position
  10.     //    {"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Normal
  11.     //    {"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Texcoord
  12.     //};
  13.  
  14.     //D3D11_INPUT_ELEMENT_DESC polygonLayout[] =
  15.     //{
  16.     //    {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Position
  17.     //    {"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Texcoord
  18.     //};
  19.  
  20.     // Default3D Input Layout--------------------------------------------------------------
  21.     D3D11_INPUT_ELEMENT_DESC default3DLayout[] =
  22.     {
  23.         {"POSITION", 0, DXGI_FORMAT_R16_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Position X
  24.         {"POSITION", 1, DXGI_FORMAT_R16_FLOAT, 0, 2, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Position Y
  25.         {"POSITION", 2, DXGI_FORMAT_R16_FLOAT, 0, 4, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Position Z
  26.         {"NORMAL", 0, DXGI_FORMAT_R16_SNORM, 0, 6, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Normal X
  27.         {"NORMAL", 1, DXGI_FORMAT_R16_SNORM, 0, 8, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Normal Y
  28.         {"NORMAL", 2, DXGI_FORMAT_R16_SNORM, 0, 10, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Normal Z
  29.         {"TEXCOORD", 0, DXGI_FORMAT_R16_UNORM, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Texcoord X
  30.         {"TEXCOORD", 1, DXGI_FORMAT_R16_UNORM, 0, 14, D3D11_INPUT_PER_VERTEX_DATA, 0}  // Texcoord Y
  31.     };
  32.  
  33.     // Get a count of the elements in the layout
  34.     numElements = sizeof(default3DLayout) / sizeof(default3DLayout[0]);
  35.  
  36.     // Open the shader associated with this input layout and retrieve its input signature
  37.     vertexShaderFile.Open("Default3D.cso", File::Mode::Read);
  38.     vertexShaderFile.Allocate(vertexShaderFile.FileSize + 1);
  39.     vertexShaderFile.Load(vertexShaderFile.FileSize);
  40.  
  41.     Log::Singleton->Write("Creating the input layout");
  42.     // Create the vertex input layout
  43.     hresult = Window::Singleton->Device->CreateInputLayout(default3DLayout, numElements, vertexShaderFile.Data, vertexShaderFile.Size, &Layouts[Layout::Default3D]);
  44.     if(FAILED(hresult)) { return false; }
  45.  
  46.     // We're done with the file for now
  47.     vertexShaderFile.Close();
  48.  
  49.     //D3D11_INPUT_ELEMENT_DESC polygonLayout[] =
  50.     //{
  51.     //    {"POSITION", 0, DXGI_FORMAT_R16_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Position X
  52.     //    {"POSITION", 1, DXGI_FORMAT_R16_FLOAT, 0, 2, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Position Y
  53.     //    {"POSITION", 2, DXGI_FORMAT_R16_FLOAT, 0, 4, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Position Z
  54.     //    {"TEXCOORD", 0, DXGI_FORMAT_R8_UNORM, 0, 6, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Texcoord X
  55.     //    {"TEXCOORD", 1, DXGI_FORMAT_R8_UNORM, 0, 7, D3D11_INPUT_PER_VERTEX_DATA, 0}  // Texcoord Y
  56.     //};
  57.  
  58.     //D3D11_INPUT_ELEMENT_DESC polygonLayout[] =
  59.     //{
  60.     //    {"POSITION", 0, DXGI_FORMAT_R16_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Position X
  61.     //    {"POSITION", 1, DXGI_FORMAT_R16_FLOAT, 0, 2, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Position Y
  62.     //    {"POSITION", 2, DXGI_FORMAT_R16_FLOAT, 0, 4, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Position Z
  63.     //    {"NORMAL", 0, DXGI_FORMAT_R16_SNORM, 0, 6, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Normal X
  64.     //    {"NORMAL", 1, DXGI_FORMAT_R16_SNORM, 0, 8, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Normal Y
  65.     //    {"NORMAL", 2, DXGI_FORMAT_R16_SNORM, 0, 10, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Normal Z
  66.     //    {"TEXCOORD", 0, DXGI_FORMAT_R16_UNORM, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Texcoord X
  67.     //    {"TEXCOORD", 1, DXGI_FORMAT_R16_UNORM, 0, 14, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Texcoord Y
  68.     //    {"INDICES", 0, DXGI_FORMAT_R8G8B8A8_UINT, 0, 16, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Bone Indices
  69.     //    {"WEIGHTS", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0} // Bone Weights
  70.     //};
  71.  
  72.     // Tangent3D Input Layout--------------------------------------------------------------
  73.     D3D11_INPUT_ELEMENT_DESC tangent3DLayout[] =
  74.     {
  75.         {"POSITION", 0, DXGI_FORMAT_R16_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Position X
  76.         {"POSITION", 1, DXGI_FORMAT_R16_FLOAT, 0, 2, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Position Y
  77.         {"POSITION", 2, DXGI_FORMAT_R16_FLOAT, 0, 4, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Position Z
  78.         {"NORMAL", 0, DXGI_FORMAT_R16_SNORM, 0, 6, D3D11_INPUT_PER_VERTEX_DATA, 0},   // Normal X
  79.         {"NORMAL", 1, DXGI_FORMAT_R16_SNORM, 0, 8, D3D11_INPUT_PER_VERTEX_DATA, 0},   // Normal Y
  80.         {"NORMAL", 2, DXGI_FORMAT_R16_SNORM, 0, 10, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Normal Z
  81.         {"TANGENT", 0, DXGI_FORMAT_R16_SNORM, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Tangent X
  82.         {"TANGENT", 1, DXGI_FORMAT_R16_SNORM, 0, 14, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Tangent Y
  83.         {"TANGENT", 2, DXGI_FORMAT_R16_SNORM, 0, 16, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Tangent Z
  84.         {"TANGENT", 3, DXGI_FORMAT_R16_SNORM, 0, 18, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Tangent W
  85.         {"TEXCOORD", 0, DXGI_FORMAT_R16_UNORM, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Texcoord X
  86.         {"TEXCOORD", 1, DXGI_FORMAT_R16_UNORM, 0, 22, D3D11_INPUT_PER_VERTEX_DATA, 0}  // Texcoord Y
  87.     };
  88.  
  89.     // Get a count of the elements in the layout
  90.     numElements = sizeof(tangent3DLayout) / sizeof(tangent3DLayout[0]);
  91.  
  92.     // Open the shader associated with this input layout and retrieve its input signature
  93.     vertexShaderFile.Open("Tangent3D.cso", File::Mode::Read);
  94.     vertexShaderFile.Allocate(vertexShaderFile.FileSize + 1);
  95.     vertexShaderFile.Load(vertexShaderFile.FileSize);
  96.  
  97.     Log::Singleton->Write("Creating the input layout");
  98.     // Create the vertex input layout
  99.     hresult = Window::Singleton->Device->CreateInputLayout(tangent3DLayout, numElements, vertexShaderFile.Data, vertexShaderFile.Size, &Layouts[Layout::Tangent3D]);
  100.     if(FAILED(hresult)) { return false; }
  101.  
  102.     // We're done with the file now
  103.     vertexShaderFile.Close();
  104.  
  105.     // SkinnedTangent3D Input Layout ------------------------------------------------------
  106.     D3D11_INPUT_ELEMENT_DESC skinnedtangent3DLayout[] =
  107.     {
  108.         {"POSITION", 0, DXGI_FORMAT_R16_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Position X
  109.         {"POSITION", 1, DXGI_FORMAT_R16_FLOAT, 0, 2, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Position Y
  110.         {"POSITION", 2, DXGI_FORMAT_R16_FLOAT, 0, 4, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Position Z
  111.         {"NORMAL", 0, DXGI_FORMAT_R16_SNORM, 0, 6, D3D11_INPUT_PER_VERTEX_DATA, 0},   // Normal X
  112.         {"NORMAL", 1, DXGI_FORMAT_R16_SNORM, 0, 8, D3D11_INPUT_PER_VERTEX_DATA, 0},   // Normal Y
  113.         {"NORMAL", 2, DXGI_FORMAT_R16_SNORM, 0, 10, D3D11_INPUT_PER_VERTEX_DATA, 0},  // Normal Z
  114.         {"TANGENT", 0, DXGI_FORMAT_R16_SNORM, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Tangent X
  115.         {"TANGENT", 1, DXGI_FORMAT_R16_SNORM, 0, 14, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Tangent Y
  116.         {"TANGENT", 2, DXGI_FORMAT_R16_SNORM, 0, 16, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Tangent Z
  117.         {"TANGENT", 3, DXGI_FORMAT_R16_SNORM, 0, 18, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Tangent W
  118.         {"TEXCOORD", 0, DXGI_FORMAT_R16_UNORM, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Texcoord X
  119.         {"TEXCOORD", 1, DXGI_FORMAT_R16_UNORM, 0, 22, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Texcoord Y
  120.         {"INDICES", 0, DXGI_FORMAT_R8G8B8A8_UINT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0}, // Bone Indices
  121.         {"WEIGHTS", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 28, D3D11_INPUT_PER_VERTEX_DATA, 0} // Bone Weights
  122.     };
  123.  
  124.     return true;
  125. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement