RsrcAsyncLoadingReqsHandler.cpp 2.3 KB

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