void Scene::drawSpots(bool disableVideos) { bool processed = false; if (_canDrawSpots) { Node* currentNode = _currentRoom->currentNode(); if (currentNode->isEnabled()) { renderManager.enablePostprocess(); renderManager.clearView(); currentNode->updateFade(); renderManager.setAlpha(currentNode->fadeLevel()); currentNode->beginIteratingSpots(); do { Spot* spot = currentNode->currentSpot(); if (spot->hasTexture() && spot->isEnabled()) { if (spot->texture()->isLoaded()) { // FIXME: This was the culprit of a crash that should be investigated someday if (spot->hasVideo()) { // If it has a video, we need to check if it's playing if (spot->isPlaying()) { // FIXME: Must stop the spot later! if (spot->video()->hasNewFrame() && !disableVideos) { DGFrame* frame = spot->video()->currentFrame(); Texture* texture = spot->texture(); texture->loadRawData(frame->data, frame->width, frame->height); } spot->texture()->bind(); renderManager.drawPolygon(spot->arrayOfCoordinates(), spot->face()); } } else { // Draw right away... spot->texture()->bind(); renderManager.drawPolygon(spot->arrayOfCoordinates(), spot->face()); } } } } while (currentNode->iterateSpots()); if (config.showSpots) { renderManager.disableTextures(); currentNode->beginIteratingSpots(); do { Spot* spot = currentNode->currentSpot(); if (spot->hasColor() && spot->isEnabled()) { renderManager.setColor(0x2500AAAA); renderManager.drawPolygon(spot->arrayOfCoordinates(), spot->face()); } } while (currentNode->iterateSpots()); renderManager.enableTextures(); } renderManager.disablePostprocess(); processed = true; } } // Blends, gamma, etc. cameraManager.beginOrthoView(); if (processed) renderManager.drawPostprocessedView(); renderManager.blendView(); }