FactoryCraftModel.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #include "FactoryCraftModel.h"
  2. #include <Shader.h>
  3. #include "CustomDX12API.h"
  4. #include "Globals.h"
  5. #include "World.h"
  6. FactoryCraftModel::FactoryCraftModel()
  7. : Model3D()
  8. {
  9. vertexLightBuffer = 0;
  10. lightBuffer = 0;
  11. vertexLightBufferCount = 0;
  12. visible = 1;
  13. destroyedState = 0;
  14. breakTextur
  15. = uiFactory.initParam.bildschirm->zGraphicsApi()->createOrGetTexture(
  16. "blocks.ltdb/crack.png", 0);
  17. effectAlpha = 0;
  18. memset(averageLight, 0, 8);
  19. *(int*)averageLight = 0xFFFFFF00;
  20. fallbackVertexLightBuffer = uiFactory.initParam.bildschirm->zGraphicsApi()
  21. ->createStructuredBuffer(16);
  22. fallbackVertexLightBuffer->setData(averageLight, 1);
  23. }
  24. FactoryCraftModel::~FactoryCraftModel()
  25. {
  26. breakTextur->release();
  27. if (vertexLightBuffer) vertexLightBuffer->release();
  28. fallbackVertexLightBuffer->release();
  29. delete[] lightBuffer;
  30. }
  31. struct TexturEffect
  32. {
  33. bool enabled;
  34. float percentage;
  35. };
  36. void FactoryCraftModel::beforeRender(Framework::GraphicsApi* api,
  37. Framework::Shader* zVertexShader,
  38. Framework::Shader* zPixelShader)
  39. {
  40. if (!World::INSTANCE) return;
  41. CustomDX12API* cApi = dynamic_cast<CustomDX12API*>(api);
  42. if (cApi)
  43. {
  44. /*
  45. * TODO: set vertex and index and light buffer in shader binding table
  46. char buffer[8];
  47. *(int*)buffer
  48. = vertexLightBufferCount == 0 ? 1 : vertexLightBufferCount;
  49. *(float*)(buffer + 4) = World::INSTANCE->getDayLightFactor();
  50. zVertexShader->fillConstBuffer(
  51. buffer, cApi->getVertexShaderLightBufferIndex(), 8);
  52. if (vertexLightBuffer)
  53. {
  54. vertexLightBuffer->copyToGPU();
  55. cApi->setVertexLightBuffer(vertexLightBuffer);
  56. }
  57. else
  58. {
  59. fallbackVertexLightBuffer->copyToGPU(8);
  60. cApi->setVertexLightBuffer(fallbackVertexLightBuffer);
  61. }
  62. if (destroyedState > 0 && effectAlpha)
  63. {
  64. TexturEffect e = {1, 1.f + destroyedState};
  65. zPixelShader->fillConstBuffer((char*)&e, 3, sizeof(TexturEffect));
  66. }*/
  67. }
  68. }
  69. void FactoryCraftModel::setVertexLightBuffer(__int64* data, int vertexCount)
  70. {
  71. if (!vertexLightBuffer)
  72. {
  73. vertexLightBuffer = uiFactory.initParam.bildschirm->zGraphicsApi()
  74. ->createStructuredBuffer(16);
  75. }
  76. if (lightBuffer)
  77. {
  78. delete[] lightBuffer;
  79. }
  80. lightBuffer = data;
  81. vertexLightBufferCount = vertexCount;
  82. vertexLightBuffer->setData(data, 1);
  83. vertexLightBuffer->setLength(vertexCount * 8);
  84. vertexLightBuffer->setChanged();
  85. }
  86. __int64* FactoryCraftModel::zLightBuffer()
  87. {
  88. return lightBuffer;
  89. }
  90. void FactoryCraftModel::copyLightToGPU()
  91. {
  92. vertexLightBuffer->setChanged();
  93. }
  94. void FactoryCraftModel::setVisible(bool visible)
  95. {
  96. this->visible = visible;
  97. }
  98. void FactoryCraftModel::setDestroyedState(float percentage)
  99. {
  100. destroyedState = percentage;
  101. }
  102. void FactoryCraftModel::setUseEffectAlpha(bool useAlpha)
  103. {
  104. effectAlpha = useAlpha;
  105. }
  106. bool FactoryCraftModel::needRenderPolygon(int index)
  107. {
  108. return visible;
  109. }
  110. Texture* FactoryCraftModel::zEffectTexture()
  111. {
  112. return destroyedState > 0 ? breakTextur : 0;
  113. }
  114. float FactoryCraftModel::getEffectPercentage()
  115. {
  116. return destroyedState;
  117. }
  118. void FactoryCraftModel::setAverageLight(unsigned char light[3])
  119. {
  120. *(averageLight + 5) = light[2];
  121. *(averageLight + 6) = light[1];
  122. *(averageLight + 7) = light[0];
  123. fallbackVertexLightBuffer->setChanged();
  124. }