CustomDX11API.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include "CustomDX11API.h"
  2. #include <d3d11.h>
  3. #include <DXBuffer.h>
  4. #include <Shader.h>
  5. #include "CustomUIDX11PixelShader.h"
  6. #include "CustomUIDX11VertexShader.h"
  7. using namespace Framework;
  8. CustomDX11API::CustomDX11API()
  9. : DirectX11(),
  10. vertexShaderLightBufferIndex(-1)
  11. {}
  12. Framework::DX11VertexShader* CustomDX11API::initializeVertexShader(
  13. unsigned char* byteCode, int size)
  14. {
  15. D3D11_RASTERIZER_DESC rasterDesc;
  16. ZeroMemory(&rasterDesc, sizeof(rasterDesc));
  17. rasterDesc.AntialiasedLineEnable = false;
  18. rasterDesc.CullMode = D3D11_CULL_NONE;
  19. rasterDesc.DepthBiasClamp = 0.0f;
  20. rasterDesc.DepthClipEnable = true;
  21. rasterDesc.FillMode = D3D11_FILL_SOLID;
  22. rasterDesc.FrontCounterClockwise = false;
  23. rasterDesc.MultisampleEnable = false;
  24. rasterDesc.ScissorEnable = false;
  25. rasterDesc.SlopeScaledDepthBias = 0.0f;
  26. ID3D11Device* device;
  27. deviceLock.lock();
  28. zContext()->GetDevice(&device);
  29. device->CreateRasterizerState(&rasterDesc, &noCull);
  30. deviceLock.unlock();
  31. DX11VertexShader* shader = DirectX11::initializeVertexShader(
  32. (unsigned char*)CustomUIDX11VertexShader,
  33. sizeof(CustomUIDX11VertexShader));
  34. vertexShaderLightBufferIndex = shader->getFirstUninitializedBufferIndex();
  35. shader->createConstBuffer(20, vertexShaderLightBufferIndex);
  36. char buffer[8];
  37. *(int*)buffer = 0;
  38. *(float*)(buffer + 4) = 1.f;
  39. shader->fillConstBuffer(buffer, vertexShaderLightBufferIndex, 8);
  40. return shader;
  41. }
  42. Framework::DX11PixelShader* CustomDX11API::initializePixelShader(
  43. unsigned char* byteCode, int size)
  44. {
  45. DX11PixelShader* shader = DirectX11::initializePixelShader(
  46. (unsigned char*)CustomUIDX11PixelShader,
  47. sizeof(CustomUIDX11PixelShader));
  48. return shader;
  49. }
  50. void CustomDX11API::setVertexLightBuffer(Framework::DXBuffer* zBuffer)
  51. {
  52. DX11StructuredBuffer* buffer = dynamic_cast<DX11StructuredBuffer*>(zBuffer);
  53. if (buffer)
  54. {
  55. ID3D11ShaderResourceView* v[1];
  56. v[0] = *buffer;
  57. deviceLock.lock();
  58. zContext()->VSSetShaderResources(0, 1, v);
  59. deviceLock.unlock();
  60. }
  61. }
  62. int CustomDX11API::getVertexShaderLightBufferIndex() const
  63. {
  64. return vertexShaderLightBufferIndex;
  65. }
  66. void CustomDX11API::setCullBack(bool cull)
  67. {
  68. deviceLock.lock();
  69. zContext()->RSSetState(cull ? texturRS : noCull);
  70. deviceLock.unlock();
  71. }