| 228 | |
| 229 | |
| 230 | void |
| 231 | ShadingContext::process_errors () const |
| 232 | { |
| 233 | size_t nerrors = m_buffered_errors.size(); |
| 234 | if (! nerrors) |
| 235 | return; |
| 236 | |
| 237 | // Use a mutex to make sure output from different threads stays |
| 238 | // together, at least for one shader invocation, rather than being |
| 239 | // interleaved with other threads. |
| 240 | lock_guard lock (buffered_errors_mutex); |
| 241 | |
| 242 | for (size_t i = 0; i < nerrors; ++i) { |
| 243 | switch (m_buffered_errors[i].first) { |
| 244 | case ErrorHandler::EH_MESSAGE : |
| 245 | case ErrorHandler::EH_DEBUG : |
| 246 | shadingsys().message (m_buffered_errors[i].second); |
| 247 | break; |
| 248 | case ErrorHandler::EH_INFO : |
| 249 | shadingsys().info (m_buffered_errors[i].second); |
| 250 | break; |
| 251 | case ErrorHandler::EH_WARNING : |
| 252 | shadingsys().warning (m_buffered_errors[i].second); |
| 253 | break; |
| 254 | case ErrorHandler::EH_ERROR : |
| 255 | case ErrorHandler::EH_SEVERE : |
| 256 | shadingsys().error (m_buffered_errors[i].second); |
| 257 | break; |
| 258 | default: |
| 259 | break; |
| 260 | } |
| 261 | } |
| 262 | m_buffered_errors.clear(); |
| 263 | } |
| 264 | |
| 265 | |
| 266 | |