RenderDevice.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #include "RenderDevice.h"
  2. #include "BFApp.h"
  3. #include "Shader.h"
  4. #include "Texture.h"
  5. #include "gfx/DrawLayer.h"
  6. #include "img/TGAData.h"
  7. #include "img/PNGData.h"
  8. #include "img/PVRData.h"
  9. #include "img/BFIData.h"
  10. #include "img/JPEGData.h"
  11. #include "util/PerfTimer.h"
  12. #include "util/AllocDebug.h"
  13. USING_NS_BF;
  14. RenderState::RenderState()
  15. {
  16. mWriteDepthBuffer = false;
  17. mCullMode = CullMode_None;
  18. mDepthFunc = DepthFunc_Always;
  19. mShader = NULL;
  20. mClipped = false;
  21. }
  22. RenderTarget::RenderTarget()
  23. {
  24. mWidth = 0;
  25. mHeight = 0;
  26. mHasBeenDrawnTo = false;
  27. mHasBeenTargeted = false;
  28. mResizeNum = 0;
  29. }
  30. RenderWindow::RenderWindow()
  31. {
  32. mCurDrawLayer = NULL;
  33. mRenderDevice = NULL;
  34. mWindow = NULL;
  35. }
  36. RenderWindow::~RenderWindow()
  37. {
  38. for (auto drawLayer : mDrawLayerList)
  39. delete drawLayer;
  40. }
  41. ///
  42. RenderDevice::RenderDevice() :
  43. mPooledIndexBuffers(DRAWBUFFER_IDXBUFFER_SIZE),
  44. mPooledVertexBuffers(DRAWBUFFER_VTXBUFFER_SIZE),
  45. mPooledRenderCmdBuffers(DRAWBUFFER_CMDBUFFER_SIZE)
  46. {
  47. mCurRenderState = NULL;
  48. mDefaultRenderState = NULL;
  49. mPhysRenderState = mDefaultRenderState;
  50. mResizeCount = 0;
  51. mCurRenderTarget = NULL;
  52. mCurDrawLayer = NULL;
  53. mPhysRenderWindow = NULL;
  54. }
  55. RenderDevice::~RenderDevice()
  56. {
  57. for (auto batch : mDrawBatchPool)
  58. delete batch;
  59. }
  60. void RenderDevice::AddRenderWindow(RenderWindow* renderWindow)
  61. {
  62. mRenderWindowList.push_back(renderWindow);
  63. }
  64. void RenderDevice::RemoveRenderWindow(RenderWindow* renderWindow)
  65. {
  66. mRenderWindowList.erase(std::find(mRenderWindowList.begin(), mRenderWindowList.end(), renderWindow));
  67. }
  68. void RenderDevice::FrameEnd()
  69. {
  70. }
  71. RenderState* RenderDevice::CreateRenderState(RenderState* srcRenderState)
  72. {
  73. RenderState* renderState = new RenderState();
  74. if (srcRenderState != NULL)
  75. *renderState = *srcRenderState;
  76. return renderState;
  77. }
  78. VertexDefinition* Beefy::RenderDevice::CreateVertexDefinition(VertexDefData* elementData, int numElements)
  79. {
  80. VertexDefinition* vertexDefinition = new VertexDefinition();
  81. vertexDefinition->mElementData = new VertexDefData[numElements];
  82. vertexDefinition->mNumElements = numElements;
  83. memcpy(vertexDefinition->mElementData, elementData, numElements * sizeof(VertexDefData));
  84. return vertexDefinition;
  85. }
  86. Texture* RenderDevice::LoadTexture(const StringImpl& fileName, int flags)
  87. {
  88. int dotPos = (int)fileName.LastIndexOf('.');
  89. String ext;
  90. if (dotPos != -1)
  91. ext = fileName.Substring(dotPos);
  92. ImageData* imageData = NULL;
  93. bool handled = false;
  94. bool failed = false;
  95. if (fileName == "!white")
  96. {
  97. imageData = new ImageData();
  98. imageData->CreateNew(1, 1, true);
  99. imageData->mBits[0] = 0xFFFFFFFF;
  100. handled = true;
  101. }
  102. else if (ext == ".tga")
  103. imageData = new TGAData();
  104. else if (ext == ".png")
  105. imageData = new PNGData();
  106. else if (ext == ".jpg")
  107. imageData = new JPEGData();
  108. else if (ext == ".pvr")
  109. imageData = new PVRData();
  110. else
  111. {
  112. BF_FATAL("Unknown texture format");
  113. return NULL; // Unknown format
  114. }
  115. if (!handled)
  116. {
  117. imageData->mWantsAlphaPremultiplied = (flags & TextureFlag_NoPremult) == 0;
  118. if (!imageData->LoadFromFile(fileName))
  119. {
  120. failed = true;
  121. BF_FATAL("Failed to load image");
  122. }
  123. }
  124. Texture* aTexture = NULL;
  125. if (!failed)
  126. aTexture = LoadTexture(imageData, flags);
  127. delete imageData;
  128. return aTexture;
  129. }