[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50310] trunk/blender/source/gameengine: . .\commmit_hive.txt

Dalai Felinto dfelinto at gmail.com
Sun Sep 2 08:05:15 CEST 2012


> Log Message:
> -----------
> ..\commmit_hive.txt

lol ... did you do --message instead of -F? :)
Benoit, mind pasting the log here?

Thanks,
Dalai


2012/9/1 Benoit Bolsee <benoit.bolsee at online.be>:
> Revision: 50310
>           http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50310
> Author:   ben2610
> Date:     2012-09-01 21:23:05 +0000 (Sat, 01 Sep 2012)
> Log Message:
> -----------
> ..\commmit_hive.txt
>
> Modified Paths:
> --------------
>     trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
>     trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
>     trunk/blender/source/gameengine/Ketsji/CMakeLists.txt
>     trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
>     trunk/blender/source/gameengine/Ketsji/KX_PythonInit.h
>
> Added Paths:
> -----------
>     trunk/blender/source/gameengine/Ketsji/KX_PythonMain.cpp
>     trunk/blender/source/gameengine/Ketsji/KX_PythonMain.h
>
> Modified: trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
> ===================================================================
> --- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp     2012-09-01 15:30:35 UTC (rev 50309)
> +++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp     2012-09-01 21:23:05 UTC (rev 50310)
> @@ -54,6 +54,7 @@
>  #include "KX_BlenderSceneConverter.h"
>  #include "KX_PythonInit.h"
>  #include "KX_PyConstraintBinding.h"
> +#include "KX_PythonMain.h"
>
>  #include "RAS_GLExtensionManager.h"
>  #include "RAS_OpenGLRasterizer.h"
> @@ -79,6 +80,9 @@
>  #include "DNA_windowmanager_types.h"
>  #include "BKE_global.h"
>  #include "BKE_report.h"
> +
> +#include "MEM_guardedalloc.h"
> +
>  /* #include "BKE_screen.h" */ /* cant include this because of 'new' function name */
>  extern float BKE_screen_view3d_zoom_to_fac(float camzoom);
>
> @@ -121,6 +125,95 @@
>         return bfd;
>  }
>
> +int BL_KetsjiNextFrame(struct KX_KetsjiEngine* ketsjiengine, struct bContext *C, struct wmWindow* win, struct Scene* scene, struct ARegion *ar,
> +                    KX_BlenderKeyboardDevice* keyboarddevice, KX_BlenderMouseDevice* mousedevice, int draw_letterbox)
> +{
> +    int exitrequested;
> +
> +    // first check if we want to exit
> +    exitrequested = ketsjiengine->GetExitCode();
> +
> +    // kick the engine
> +    bool render = ketsjiengine->NextFrame();
> +
> +    if (render)
> +    {
> +        if(draw_letterbox) {
> +            // Clear screen to border color
> +            // We do this here since we set the canvas to be within the frames. This means the engine
> +            // itself is unaware of the extra space, so we clear the whole region for it.
> +            glClearColor(scene->gm.framing.col[0], scene->gm.framing.col[1], scene->gm.framing.col[2], 1.0f);
> +            glViewport(ar->winrct.xmin, ar->winrct.ymin,
> +                                  BLI_RCT_SIZE_X(&ar->winrct), BLI_RCT_SIZE_Y(&ar->winrct));
> +            glClear(GL_COLOR_BUFFER_BIT);
> +        }
> +
> +        // render the frame
> +        ketsjiengine->Render();
> +    }
> +
> +    wm_window_process_events_nosleep();
> +
> +    // test for the ESC key
> +    //XXX while (qtest())
> +    while(wmEvent *event= (wmEvent *)win->queue.first)
> +    {
> +        short val = 0;
> +        //unsigned short event = 0; //XXX extern_qread(&val);
> +
> +        if (keyboarddevice->ConvertBlenderEvent(event->type,event->val))
> +            exitrequested = KX_EXIT_REQUEST_BLENDER_ESC;
> +
> +            /* Coordinate conversion... where
> +            * should this really be?
> +        */
> +        if (event->type==MOUSEMOVE) {
> +            /* Note, not nice! XXX 2.5 event hack */
> +            val = event->x - ar->winrct.xmin;
> +            mousedevice->ConvertBlenderEvent(MOUSEX, val);
> +
> +            val = ar->winy - (event->y - ar->winrct.ymin) - 1;
> +            mousedevice->ConvertBlenderEvent(MOUSEY, val);
> +        }
> +        else {
> +            mousedevice->ConvertBlenderEvent(event->type,event->val);
> +        }
> +
> +        BLI_remlink(&win->queue, event);
> +        wm_event_free(event);
> +    }
> +
> +    if(win != CTX_wm_window(C)) {
> +        exitrequested= KX_EXIT_REQUEST_OUTSIDE; /* window closed while bge runs */
> +    }
> +    return exitrequested;
> +}
> +
> +struct BL_KetsjiNextFrameState {
> +       struct KX_KetsjiEngine* ketsjiengine;
> +       struct bContext *C;
> +       struct wmWindow* win;
> +       struct Scene* scene;
> +       struct ARegion *ar;
> +       KX_BlenderKeyboardDevice* keyboarddevice;
> +       KX_BlenderMouseDevice* mousedevice;
> +       int draw_letterbox;
> +} ketsjinextframestate;
> +
> +int BL_KetsjiPyNextFrame(void *state0)
> +{
> +       BL_KetsjiNextFrameState *state = (BL_KetsjiNextFrameState *) state0;
> +       return BL_KetsjiNextFrame(
> +               state->ketsjiengine,
> +               state->C,
> +               state->win,
> +               state->scene,
> +               state->ar,
> +               state->keyboarddevice,
> +               state->mousedevice,
> +               state->draw_letterbox);
> +}
> +
>  extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *cam_frame, int always_use_expand_framing)
>  {
>         /* context values */
> @@ -346,6 +439,7 @@
>                         rasterizer->SetBackColor(scene->gm.framing.col[0], scene->gm.framing.col[1], scene->gm.framing.col[2], 0.0f);
>                 }
>
> +               char *python_main = NULL;
>                 if (exitrequested != KX_EXIT_REQUEST_QUIT_GAME)
>                 {
>                         if (rv3d->persp != RV3D_CAMOB)
> @@ -440,72 +534,48 @@
>                                 // Could be in StartEngine set the framerate, we need the scene to do this
>                                 ketsjiengine->SetAnimFrameRate(FPS);
>
> +                               char *python_main = NULL;
> +                               pynextframestate.state = NULL;
> +                               pynextframestate.func = NULL;
> +#ifdef WITH_PYTHON
> +                               python_main = KX_GetPythonMain(scene);
> +#endif // WITH_PYTHON
>                                 // the mainloop
>                                 printf("\nBlender Game Engine Started\n");
> -                               while (!exitrequested)
> -                               {
> -                                       // first check if we want to exit
> -                                       exitrequested = ketsjiengine->GetExitCode();
> -
> -                                       // kick the engine
> -                                       bool render = ketsjiengine->NextFrame();
> -
> -                                       if (render)
> +                               if (python_main) {
> +                                       char *python_code = KX_GetPythonCode(blenderdata, python_main);
> +                                       if (python_code) {
> +#ifdef WITH_PYTHON
> +                                               ketsjinextframestate.ketsjiengine = ketsjiengine;
> +                                               ketsjinextframestate.C = C;
> +                                               ketsjinextframestate.win = win;
> +                                               ketsjinextframestate.scene = scene;
> +                                               ketsjinextframestate.ar = ar;
> +                                               ketsjinextframestate.keyboarddevice = keyboarddevice;
> +                                               ketsjinextframestate.mousedevice = mousedevice;
> +                                               ketsjinextframestate.draw_letterbox = draw_letterbox;
> +
> +                                               pynextframestate.state = &ketsjinextframestate;
> +                                               pynextframestate.func = &BL_KetsjiPyNextFrame;
> +                                               printf("Yielding control to Python script '%s'...\n", python_main);
> +                                               PyRun_SimpleString(python_code);
> +                                               printf("Exit Python script '%s'\n", python_main);
> +#endif // WITH_PYTHON
> +                                               MEM_freeN(python_code);
> +                                       }
> +                               }
> +                               else {
> +                                       while (!exitrequested)
>                                         {
> -                                               if (draw_letterbox) {
> -                                                       // Clear screen to border color
> -                                                       // We do this here since we set the canvas to be within the frames. This means the engine
> -                                                       // itself is unaware of the extra space, so we clear the whole region for it.
> -                                                       glClearColor(scene->gm.framing.col[0], scene->gm.framing.col[1], scene->gm.framing.col[2], 1.0f);
> -                                                       glViewport(ar->winrct.xmin, ar->winrct.ymin,
> -                                                                  BLI_RCT_SIZE_X(&ar->winrct), BLI_RCT_SIZE_Y(&ar->winrct));
> -                                                       glClear(GL_COLOR_BUFFER_BIT);
> -                                               }
> -
> -                                               // render the frame
> -                                               ketsjiengine->Render();
> +                                               exitrequested = BL_KetsjiNextFrame(ketsjiengine, C, win, scene, ar, keyboarddevice, mousedevice, draw_letterbox);
>                                         }
> -
> -                                       wm_window_process_events_nosleep();
> -
> -                                       // test for the ESC key
> -                                       //XXX while (qtest())
> -                                       while(wmEvent *event= (wmEvent *)win->queue.first)
> -                                       {
> -                                               short val = 0;
> -                                               //unsigned short event = 0; //XXX extern_qread(&val);
> -
> -                                               if (keyboarddevice->ConvertBlenderEvent(event->type,event->val))
> -                                                       exitrequested = KX_EXIT_REQUEST_BLENDER_ESC;
> -
> -                                                       /* Coordinate conversion... where
> -                                                       * should this really be?
> -                                               */
> -                                               if (event->type==MOUSEMOVE) {
> -                                                       /* Note, not nice! XXX 2.5 event hack */
> -                                                       val = event->x - ar->winrct.xmin;
> -                                                       mousedevice->ConvertBlenderEvent(MOUSEX, val);
> -
> -                                                       val = ar->winy - (event->y - ar->winrct.ymin) - 1;
> -                                                       mousedevice->ConvertBlenderEvent(MOUSEY, val);
> -                                               }
> -                                               else {
> -                                                       mousedevice->ConvertBlenderEvent(event->type,event->val);
> -                                               }
> -
> -                                               BLI_remlink(&win->queue, event);
> -                                               wm_event_free(event);
> -                                       }
> -
> -                                       if (win != CTX_wm_window(C)) {
> -                                               exitrequested= KX_EXIT_REQUEST_OUTSIDE; /* window closed while bge runs */
> -                                       }
>                                 }
>                                 printf("Blender Game Engine Finished\n");
>                                 exitstring = ketsjiengine->GetExitString();
> +                               if (python_main) MEM_freeN(python_main);
> +
>                                 gs = *(ketsjiengine->GetGlobalSettings());
>
> -
>                                 // when exiting the mainloop
>  #ifdef WITH_PYTHON
>                                 // Clears the dictionary by hand:
>
> Modified: trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
> ===================================================================
> --- trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp      2012-09-01 15:30:35 UTC (rev 50309)
> +++ trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp      2012-09-01 21:23:05 UTC (rev 50310)
> @@ -47,6 +47,7 @@
>  #endif // __APPLE__
>  #include "KX_KetsjiEngine.h"
>  #include "KX_PythonInit.h"
> +#include "KX_PythonMain.h"
>
>  /**********************************
>  * Begin Blender include block
> @@ -332,6 +333,40 @@
>         return bfd;
>  }
>
> +bool GPG_NextFrame(GHOST_ISystem* system, GPG_Application *app, int &exitcode, STR_String &exitstring, GlobalSettings *gs)
> +{
> +    bool run = true;
> +    system->processEvents(false);
> +    system->dispatchEvents();
> +    if ((exitcode = app->getExitRequested()))
> +    {
> +        run = false;
> +        exitstring = app->getExitString();
> +        *gs = *app->getGlobalSettings();
> +    }
> +    return run;
> +}
> +
> +struct GPG_NextFrameState {
> +       GHOST_ISystem* system;
> +       GPG_Application *app;
> +       GlobalSettings *gs;
> +} gpg_nextframestate;
> +
> +int GPG_PyNextFrame(void *state0)
> +{
> +       GPG_NextFrameState *state = (GPG_NextFrameState *) state0;
> +       int exitcode;
> +       STR_String exitstring;
> +       bool run = GPG_NextFrame(state->system, state->app, exitcode, exitstring, state->gs);
> +       if (run) return 0;
> +       else {
> +               if (exitcode)
> +                       fprintf(stderr, "Exit code %d: %s\n", exitcode, exitstring.ReadPtr());
> +               return 1;
> +       }
> +}
> +
>  int main(int argc, char** argv)
>  {
>         int i;
> @@ -966,17 +1001,39 @@
>
>                                                 // Enter main loop
>                                                 bool run = true;
> -                                               while (run)
> +                        char *python_main = NULL;
> +                                               pynextframestate.state = NULL;
> +                                               pynextframestate.func = NULL;
> +#ifdef WITH_PYTHON
> +                                               python_main = KX_GetPythonMain(scene);
> +#endif // WITH_PYTHON
> +                                               if (python_main)
>                                                 {
> -                                                       system->processEvents(false);
> -                                                       system->dispatchEvents();
> -                                                       app.EngineNextFrame();
> +                                                       char *python_code = KX_GetPythonCode(maggie, python_main);
> +                                                       if (python_code)
> +                                                       {
> +#ifdef WITH_PYTHON
> +                                                               gpg_nextframestate.system = system;
> +                                                               gpg_nextframestate.app = &app;
> +                                                               gpg_nextframestate.gs = &gs;
> +                                                               pynextframestate.state = &gpg_nextframestate;
> +                                                               pynextframestate.func = &GPG_PyNextFrame;
>
> -                                                       if ((exitcode = app.getExitRequested()))
> +                                printf("Yielding control to Python script '%s'...\n", python_main);
> +                                PyRun_SimpleString(python_code);
>
> @@ Diff output truncated at 10240 characters. @@
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs


More information about the Bf-committers mailing list