RsrcAsyncLoadingReqsHandler.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "RsrcAsyncLoadingReqsHandler.h"
  2. #include "Texture.h"
  3. #include "Logger.h"
  4. #include "HighRezTimer.h"
  5. #include "Assert.h"
  6. //======================================================================================================================
  7. // sendNewLoadingRequest <Texture> =
  8. //======================================================================================================================
  9. template<>
  10. void RsrcAsyncLoadingReqsHandler::sendNewLoadingRequest<Texture>(const char* filename, Texture** objToLoad)
  11. {
  12. TextureRequest* req = new TextureRequest(filename, objToLoad);
  13. requests.push_back(req);
  14. al.load(filename, &loadImageCallback, (void*)&req->getHelperObj());
  15. }
  16. //======================================================================================================================
  17. // postProcessFinishedRequests =
  18. //======================================================================================================================
  19. void RsrcAsyncLoadingReqsHandler::postProcessFinishedRequests(uint maxTime)
  20. {
  21. HighRezTimer t;
  22. t.start();
  23. while(1)
  24. {
  25. std::string filename;
  26. void* storage = NULL;
  27. bool ok;
  28. if(!al.pollForFinished(filename, storage, ok)) // If no pending
  29. {
  30. break;
  31. }
  32. LoadingRequestBase& req = requests.front();
  33. ASSERT(filename == req.getFilename());
  34. switch(req.getType())
  35. {
  36. case LoadingRequestBase::RT_TEXTURE:
  37. {
  38. TextureRequest& texReq = static_cast<TextureRequest&>(req);
  39. Texture* tex = new Texture;
  40. tex->load(texReq.getHelperObj());
  41. *texReq.getObjToLoad() = tex;
  42. break;
  43. }
  44. case LoadingRequestBase::RT_MESH:
  45. /// @todo handle it
  46. break;
  47. }
  48. requests.pop_front();
  49. // Leave if you passed the max time
  50. if(t.getElapsedTime() >= maxTime)
  51. {
  52. break;
  53. }
  54. }
  55. }
  56. //======================================================================================================================
  57. // loadImageCallback =
  58. //======================================================================================================================
  59. void RsrcAsyncLoadingReqsHandler::loadImageCallback(const char* filename, void* img_)
  60. {
  61. Image* img = (Image*)img_;
  62. img->load(filename);
  63. //sleep(2);
  64. }