| 201 | } |
| 202 | |
| 203 | void GLFWDistribOSPRayWindow::mainLoop() |
| 204 | { |
| 205 | while (true) { |
| 206 | MPI_Bcast(&windowState, sizeof(WindowState), MPI_BYTE, 0, MPI_COMM_WORLD); |
| 207 | if (windowState.quit) { |
| 208 | break; |
| 209 | } |
| 210 | |
| 211 | // TODO: Actually render asynchronously, if we have MPI thread multiple |
| 212 | // support |
| 213 | startNewOSPRayFrame(); |
| 214 | waitOnOSPRayFrame(); |
| 215 | |
| 216 | if (mpiRank == 0) { |
| 217 | glfwPollEvents(); |
| 218 | |
| 219 | ImGui_ImplOpenGL3_NewFrame(); |
| 220 | ImGui_ImplGlfw_NewFrame(); |
| 221 | ImGui::NewFrame(); |
| 222 | |
| 223 | if (displayCallback) |
| 224 | displayCallback(this); |
| 225 | |
| 226 | display(); |
| 227 | |
| 228 | windowState.quit = glfwWindowShouldClose(glfwWindow) || g_quitNextFrame; |
| 229 | } |
| 230 | } |
| 231 | } |
| 232 | |
| 233 | void GLFWDistribOSPRayWindow::reshape(const vec2i &newWindowSize) |
| 234 | { |