| 159 | } |
| 160 | |
| 161 | HRequest BeginLoad(HQueue queue, const char* name, const char* canonical_path, PreloadInfo* info) |
| 162 | { |
| 163 | assert(name != 0); |
| 164 | assert(name[0] != 0); |
| 165 | assert(canonical_path != 0); |
| 166 | assert(canonical_path[0] != 0); |
| 167 | |
| 168 | dmMutex::ScopedLock lk(queue->m_Mutex); |
| 169 | |
| 170 | // Refuse more if full. |
| 171 | if ((queue->m_Front - queue->m_Back) == QUEUE_SLOTS) |
| 172 | return 0; |
| 173 | |
| 174 | if (queue->m_Loaded == queue->m_Front) |
| 175 | { |
| 176 | // The worker is sleeping waiting for request, wake it up |
| 177 | dmConditionVariable::Signal(queue->m_WakeupCond); |
| 178 | } |
| 179 | |
| 180 | Request* req = &queue->m_Request[(queue->m_Front++) % QUEUE_SLOTS]; |
| 181 | req->m_Name = name; |
| 182 | req->m_CanonicalPath = canonical_path; |
| 183 | req->m_ResourceSize = 0; |
| 184 | |
| 185 | req->m_PreloadInfo = *info; |
| 186 | req->m_Result.m_LoadResult = dmResource::RESULT_PENDING; |
| 187 | |
| 188 | return req; |
| 189 | } |
| 190 | |
| 191 | Result EndLoad(HQueue queue, HRequest request, void** buf, uint32_t* buffer_size, uint32_t* resource_size, LoadResult* load_result) |
| 192 | { |