]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
Lazily initialize Gecko - saves initialization when not used.
authorres <res@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 5 Dec 2007 23:23:00 +0000 (23:23 +0000)
committerres <res@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 5 Dec 2007 23:23:00 +0000 (23:23 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7766 d7cf8633-e32d-0410-b094-e92efae38249

cl_gecko.c

index 46d94b9e14e28f569f4b5db69993d7d8ee04c733..47614ed887f4c67298685dd183f8bedacf69e373 100644 (file)
@@ -10,6 +10,7 @@
 #include "quakedef.h"\r
 #include "cl_dyntexture.h"\r
 #include "cl_gecko.h"\r
+#include "timing.h"\r
 \r
 static rtexturepool_t *cl_geckotexturepool;\r
 static OSGK_Embedding *cl_geckoembedding;\r
@@ -58,9 +59,9 @@ clgecko_t * CL_Gecko_FindBrowser( const char *name ) {
 \r
 static void cl_gecko_updatecallback( rtexture_t *texture, clgecko_t *instance ) {\r
        const unsigned char *data;\r
-       if( instance->browser ) {\r
+       if( instance->browser && osgk_browser_query_dirty (instance->browser) ) {\r
                // TODO: OSGK only supports BGRA right now\r
-               data = osgk_browser_lock_data( instance->browser, NULL );\r
+               TIMING_TIMESTATEMENT(data = osgk_browser_lock_data( instance->browser, NULL ));\r
                R_UpdateTexture( texture, data, 0, 0, DEFAULT_GECKO_WIDTH, DEFAULT_GECKO_HEIGHT );\r
                osgk_browser_unlock_data( instance->browser, data );\r
        }\r
@@ -86,6 +87,18 @@ clgecko_t * CL_Gecko_CreateBrowser( const char *name ) {
        clgecko_t *instance = cl_gecko_findunusedinstance();\r
        // TODO: assert != NULL\r
        \r
+       if( cl_geckoembedding == NULL ) {\r
+               OSGK_EmbeddingOptions *options = osgk_embedding_options_create();\r
+               osgk_embedding_options_add_search_path( options, "./xulrunner/" );\r
+               cl_geckoembedding = osgk_embedding_create_with_options( options, NULL );\r
+               osgk_release( options );\r
+               \r
+               if( cl_geckoembedding == NULL ) {\r
+                       Con_Printf( "CL_Gecko_Init: Couldn't retrieve gecko embedding object!\n" );\r
+                       return NULL;\r
+               }\r
+       }\r
+\r
        instance->active = true;\r
        strlcpy( instance->name, name, sizeof( instance->name ) );\r
        instance->browser = osgk_browser_create( cl_geckoembedding, DEFAULT_GECKO_WIDTH, DEFAULT_GECKO_HEIGHT );\r
@@ -159,7 +172,12 @@ void CL_Gecko_Shutdown( void ) {
                        cl_gecko_unlinktexture( instance );\r
                }               \r
        }\r
-       osgk_release( cl_geckoembedding );\r
+\r
+       if (cl_geckoembedding != NULL)\r
+       {\r
+           osgk_release( cl_geckoembedding );\r
+           cl_geckoembedding = NULL;\r
+       }\r
 }\r
 \r
 static void cl_gecko_create_f( void ) {\r
@@ -254,15 +272,6 @@ static void cl_gecko_injecttext_f( void ) {
 \r
 void CL_Gecko_Init( void )\r
 {\r
-       OSGK_EmbeddingOptions *options = osgk_embedding_options_create();\r
-       osgk_embedding_options_add_search_path( options, "./xulrunner/" );\r
-       cl_geckoembedding = osgk_embedding_create_with_options( options, NULL );\r
-       osgk_release( options );\r
-       \r
-       if( cl_geckoembedding == NULL ) {\r
-               Con_Printf( "CL_Gecko_Init: Couldn't retrieve gecko embedding object!\n" );\r
-       }\r
-       \r
        Cmd_AddCommand( "gecko_create", cl_gecko_create_f, "Create a gecko browser instance" );\r
        Cmd_AddCommand( "gecko_destroy", cl_gecko_destroy_f, "Destroy a gecko browser instance" );\r
        Cmd_AddCommand( "gecko_navigate", cl_gecko_navigate_f, "Navigate a gecko browser to a URI" );\r