[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