Ember

Shader

Feb 23rd, 2014
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.43 KB | None | 0 0
  1. /*
  2. -----------------------------------------------------------------------------
  3. Filename: Shader.cpp
  4. -----------------------------------------------------------------------------
  5.  
  6. -----------------------------------------------------------------------------
  7. */
  8.  
  9. // Declare Once
  10. #pragma once
  11. // Includes
  12. #include "Shader.hpp"
  13. #include "Window.hpp"
  14.  
  15. // Namespace ------------------------------------------------------------------------------
  16. namespace Little
  17. {
  18.     // Shader Buffer -------------------------------------------------------------------
  19.     bool Shader::Buffer::Create(UInt size)
  20.     {
  21.         if(mBuffer) { return false; }
  22.  
  23.         D3D11_BUFFER_DESC bufferDesc;
  24.         ZeroMemory(&bufferDesc, sizeof(bufferDesc));
  25.         bufferDesc.Usage = D3D11_USAGE_DEFAULT;
  26.         bufferDesc.ByteWidth = size;
  27.         bufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
  28.         //bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
  29.         bufferDesc.MiscFlags = 0;
  30.         bufferDesc.StructureByteStride = 0;
  31.  
  32.         return !FAILED(Handle::Device->CreateBuffer(&bufferDesc, NULL, &mBuffer));
  33.     };
  34.     //--//
  35.     void Shader::Buffer::Update(Pointer data)
  36.     {
  37.         Handle::DeviceContext->UpdateSubresource(mBuffer, 0, NULL, data, 0, 0);
  38.     };
  39.     //--//
  40.     void Shader::Buffer::Release()
  41.     {
  42.         if(mBuffer) { mBuffer->Release(); mBuffer = 0; }
  43.     };
  44.  
  45.     // Vertex Shader ------------------------------------------------------------------
  46.     bool Shader::Vertex::Create(Pointer data, UInt size)
  47.     {
  48.         return mShader ? false : !FAILED(Handle::Device->CreateVertexShader(data, size, NULL, &mShader));
  49.     };
  50.     //--//
  51.     void Shader::Vertex::SetBuffer(Shader::Buffer buffer, UInt slot)
  52.     {
  53.         Handle::DeviceContext->VSSetConstantBuffers(slot, 1, &buffer.mBuffer);
  54.     };
  55.     //--//
  56.     void Shader::Vertex::Bind()
  57.     {
  58.         Handle::DeviceContext->VSSetShader(mShader, NULL, 0);
  59.     };
  60.     //--//
  61.     void Shader::Vertex::Release()
  62.     {
  63.         if(mShader) { mShader->Release(); mShader = 0; }
  64.     };
  65.  
  66.     // Pixel Shader ------------------------------------------------------------------
  67.     bool Shader::Pixel::Create(Pointer data, UInt size)
  68.     {
  69.         return mShader ? false : !FAILED(Handle::Device->CreatePixelShader(data, size, NULL, &mShader));
  70.     };
  71.     //--//
  72.     void Shader::Pixel::SetBuffer(Shader::Buffer buffer, UInt slot)
  73.     {
  74.         Handle::DeviceContext->PSSetConstantBuffers(slot, 1, &buffer.mBuffer);
  75.     };
  76.     //--//
  77.     void Shader::Pixel::Bind()
  78.     {
  79.         Handle::DeviceContext->PSSetShader(mShader, NULL, 0);
  80.     };
  81.     //--//
  82.     void Shader::Pixel::Release()
  83.     {
  84.         if(mShader) { mShader->Release(); mShader = 0; }
  85.     };
  86.  
  87.     // Geometry Shader ------------------------------------------------------------------
  88.     bool Shader::Geometry::Create(Pointer data, UInt size)
  89.     {
  90.         return mShader ? false : !FAILED(Handle::Device->CreateGeometryShader(data, size, NULL, &mShader));
  91.     };
  92.     //--//
  93.     void Shader::Geometry::SetBuffer(Shader::Buffer buffer, UInt slot)
  94.     {
  95.         Handle::DeviceContext->GSSetConstantBuffers(slot, 1, &buffer.mBuffer);
  96.     };
  97.     //--//
  98.     void Shader::Geometry::Bind()
  99.     {
  100.         Handle::DeviceContext->GSSetShader(mShader, NULL, 0);
  101.     };
  102.     //--//
  103.     void Shader::Geometry::Release()
  104.     {
  105.         if(mShader) { mShader->Release(); mShader = 0; }
  106.     };
  107.  
  108.     // Hull Shader ------------------------------------------------------------------
  109.     bool Shader::Hull::Create(Pointer data, UInt size)
  110.     {
  111.         return mShader ? false : !FAILED(Handle::Device->CreateHullShader(data, size, NULL, &mShader));
  112.     };
  113.     //--//
  114.     void Shader::Hull::SetBuffer(Shader::Buffer buffer, UInt slot)
  115.     {
  116.         Handle::DeviceContext->HSSetConstantBuffers(slot, 1, &buffer.mBuffer);
  117.     };
  118.     //--//
  119.     void Shader::Hull::Bind()
  120.     {
  121.         Handle::DeviceContext->HSSetShader(mShader, NULL, 0);
  122.     };
  123.     //--//
  124.     void Shader::Hull::Release()
  125.     {
  126.         if(mShader) { mShader->Release(); mShader = 0; }
  127.     };
  128.  
  129.     // Domain Shader ------------------------------------------------------------------
  130.     bool Shader::Domain::Create(Pointer data, UInt size)
  131.     {
  132.         return mShader ? false : !FAILED(Handle::Device->CreateDomainShader(data, size, NULL, &mShader));
  133.     };
  134.     //--//
  135.     void Shader::Domain::SetBuffer(Shader::Buffer buffer, UInt slot)
  136.     {
  137.         Handle::DeviceContext->DSSetConstantBuffers(slot, 1, &buffer.mBuffer);
  138.     };
  139.     //--//
  140.     void Shader::Domain::Bind()
  141.     {
  142.         Handle::DeviceContext->DSSetShader(mShader, NULL, 0);
  143.     };
  144.     //--//
  145.     void Shader::Domain::Release()
  146.     {
  147.         if(mShader) { mShader->Release(); mShader = 0; }
  148.     };
  149.  
  150.     // Compute Shader ------------------------------------------------------------------
  151.     bool Shader::Compute::Create(Pointer data, UInt size)
  152.     {
  153.         return mShader ? false : !FAILED(Handle::Device->CreateComputeShader(data, size, NULL, &mShader));
  154.     };
  155.     //--//
  156.     void Shader::Compute::SetBuffer(Shader::Buffer buffer, UInt slot)
  157.     {
  158.         Handle::DeviceContext->CSSetConstantBuffers(slot, 1, &buffer.mBuffer);
  159.     };
  160.     //--//
  161.     void Shader::Compute::Bind()
  162.     {
  163.         Handle::DeviceContext->CSSetShader(mShader, NULL, 0);
  164.     };
  165.     //--//
  166.     void Shader::Compute::Release()
  167.     {
  168.         if(mShader) { mShader->Release(); mShader = 0; }
  169.     };
  170. }
Advertisement
Add Comment
Please, Sign In to add comment