diff --git a/direct/src/plugin/p3dInstance.cxx b/direct/src/plugin/p3dInstance.cxx index a96ea4d61c..e10df7616c 100644 --- a/direct/src/plugin/p3dInstance.cxx +++ b/direct/src/plugin/p3dInstance.cxx @@ -2257,9 +2257,17 @@ handle_notify_request(const string &message) { } else if (message == "onwindowattach") { // The graphics window has been attached to the browser frame // (maybe initially, maybe later). Hide the splash window. + + // We don't actually hide the splash window immediately on OSX, + // because on that platform, we can hide it as soon as we render + // the first frame, avoiding an empty frame in that little period + // of time between the window opening and the first frame being + // drawn. +#ifndef __APPLE__ if (_splash_window != NULL) { _splash_window->set_visible(false); } +#endif // __APPLE__ #ifdef __APPLE__ // Start a timer to update the frame repeatedly. This seems to be @@ -3089,10 +3097,6 @@ get_framebuffer_osx_port() { // We don't have a Panda3D window yet. return false; } - if (_splash_window != NULL && _splash_window->get_visible()) { - // If the splash window is up, don't draw the Panda3D window. - return false; - } // blit rendered framebuffer into window backing store int x_size = min(_wparams.get_win_width(), _swbuffer->get_x_size()); @@ -3142,6 +3146,12 @@ get_framebuffer_osx_port() { _swbuffer->close_read_framebuffer(); + if (_splash_window != NULL && _splash_window->get_visible()) { + // If the splash window is up, time to hide it. We've just + // rendered a real frame. + _splash_window->set_visible(false); + } + } else { // No frame ready. Just re-paint the frame we had saved last // time. @@ -3167,10 +3177,6 @@ get_framebuffer_osx_cgcontext() { // We don't have a Panda3D window yet. return false; } - if (_splash_window != NULL && _splash_window->get_visible()) { - // If the splash window is up, don't draw the Panda3D window. - return false; - } // blit rendered framebuffer into window backing store int x_size = min(_wparams.get_win_width(), _swbuffer->get_x_size()); @@ -3183,6 +3189,12 @@ get_framebuffer_osx_cgcontext() { memcpy(_reversed_buffer, framebuffer, y_size * rowsize); _swbuffer->close_read_framebuffer(); + if (_splash_window != NULL && _splash_window->get_visible()) { + // If the splash window is up, time to hide it. We've just + // rendered a real frame. + _splash_window->set_visible(false); + } + } else { // No frame ready. Just re-paint the frame we had saved last // time.