diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp index 5479a5e7a6e..0c259f1ad79 100644 --- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp +++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp @@ -42,7 +42,6 @@ #include "GL/glew.h" -#include "KX_BlenderGL.h" #include "KX_BlenderCanvas.h" #include "KX_BlenderKeyboardDevice.h" #include "KX_BlenderMouseDevice.h" diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt index 1f323a798ce..73dbe005518 100644 --- a/source/gameengine/BlenderRoutines/CMakeLists.txt +++ b/source/gameengine/BlenderRoutines/CMakeLists.txt @@ -39,7 +39,6 @@ set(SRC BL_KetsjiEmbedStart.cpp BL_System.cpp KX_BlenderCanvas.cpp - KX_BlenderGL.cpp KX_BlenderInputDevice.cpp KX_BlenderKeyboardDevice.cpp KX_BlenderMouseDevice.cpp @@ -47,7 +46,6 @@ set(SRC BL_System.h KX_BlenderCanvas.h - KX_BlenderGL.h KX_BlenderInputDevice.h KX_BlenderKeyboardDevice.h KX_BlenderMouseDevice.h diff --git a/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp b/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp index 3089b3fd44d..b3e0b4c3ea6 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp +++ b/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp @@ -29,13 +29,33 @@ * \ingroup blroutines */ +#include + +#include "MEM_guardedalloc.h" #include "KX_BlenderCanvas.h" + +#include "DNA_image_types.h" +#include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_windowmanager_types.h" -#include + +#include "BKE_image.h" +#include "BKE_global.h" +#include "BKE_main.h" + +#include "BLI_path_util.h" +#include "BLI_string.h" + #include +extern "C" { +#include "IMB_imbuf.h" +#include "IMB_imbuf_types.h" +#include "WM_api.h" +#include "wm_cursors.h" +#include "wm_window.h" +} KX_BlenderCanvas::KX_BlenderCanvas(wmWindowManager *wm, wmWindow *win, RAS_Rect &rect, struct ARegion *ar) : m_wm(wm), @@ -63,17 +83,17 @@ void KX_BlenderCanvas::Init() void KX_BlenderCanvas::SwapBuffers() { - BL_SwapBuffers(m_win); + wm_window_swap_buffers(m_win); } void KX_BlenderCanvas::SetSwapInterval(int interval) { - BL_SetSwapInterval(m_win, interval); + wm_window_set_swap_interval(m_win, interval); } int KX_BlenderCanvas::GetSwapInterval() { - return BL_GetSwapInterval(m_win); + return wm_window_get_swap_interval(m_win); } void KX_BlenderCanvas::ResizeWindow(int width, int height) @@ -96,7 +116,7 @@ bool KX_BlenderCanvas::BeginDraw() { // in case of multi-window we need to ensure we are drawing to the correct // window always, because it may change in window event handling - BL_MakeDrawable(m_wm, m_win); + wm_window_make_drawable(m_wm, m_win); return true; } @@ -247,17 +267,17 @@ void KX_BlenderCanvas::SetMouseState(RAS_MouseState mousestate) { case MOUSE_INVISIBLE: { - BL_HideMouse(m_win); + WM_cursor_set(m_win, CURSOR_NONE); break; } case MOUSE_WAIT: { - BL_WaitMouse(m_win); + WM_cursor_set(m_win, CURSOR_WAIT); break; } case MOUSE_NORMAL: { - BL_NormalMouse(m_win); + WM_cursor_set(m_win, CURSOR_STD); break; } default: @@ -275,18 +295,71 @@ void KX_BlenderCanvas::SetMousePosition(int x,int y) int winY = m_frame_rect.GetBottom(); int winH = m_frame_rect.GetHeight(); - BL_warp_pointer(m_win, winX + x, winY + (winH-y)); + WM_cursor_warp(m_win, winX + x, winY + (winH-y)); } +/* get shot from frontbuffer sort of a copy from screendump.c */ +static unsigned int *screenshot(ScrArea *curarea, int *dumpsx, int *dumpsy) +{ + int x=0, y=0; + unsigned int *dumprect= NULL; + + x= curarea->totrct.xmin; + y= curarea->totrct.ymin; + *dumpsx= curarea->totrct.xmax-x; + *dumpsy= curarea->totrct.ymax-y; + + if (*dumpsx && *dumpsy) { + + dumprect= (unsigned int *)MEM_mallocN(sizeof(int) * (*dumpsx) * (*dumpsy), "dumprect"); + glReadBuffer(GL_FRONT); + glReadPixels(x, y, *dumpsx, *dumpsy, GL_RGBA, GL_UNSIGNED_BYTE, dumprect); + glFinish(); + glReadBuffer(GL_BACK); + } + + return dumprect; +} void KX_BlenderCanvas::MakeScreenShot(const char *filename) { ScrArea area_dummy= {0}; + bScreen *screen = m_win->screen; + unsigned int *dumprect; + int dumpsx, dumpsy; + area_dummy.totrct.xmin = m_frame_rect.GetLeft(); area_dummy.totrct.xmax = m_frame_rect.GetRight(); area_dummy.totrct.ymin = m_frame_rect.GetBottom(); area_dummy.totrct.ymax = m_frame_rect.GetTop(); - BL_MakeScreenShot(m_win->screen, &area_dummy, filename); + dumprect = screenshot(&area_dummy, &dumpsx, &dumpsy); + + if (dumprect) { + /* initialize image file format data */ + Scene *scene = (screen)? screen->scene: NULL; + ImageFormatData im_format; + + if (scene) + im_format = scene->r.im_format; + else + BKE_imformat_defaults(&im_format); + + /* create file path */ + char path[FILE_MAX]; + BLI_strncpy(path, filename, sizeof(path)); + BLI_path_abs(path, G.main->name); + BKE_add_image_extension_from_type(path, im_format.imtype); + + /* create and save imbuf */ + ImBuf *ibuf = IMB_allocImBuf(dumpsx, dumpsy, 24, 0); + ibuf->rect = dumprect; + + BKE_imbuf_write_as(ibuf, path, &im_format, false); + + ibuf->rect = NULL; + IMB_freeImBuf(ibuf); + MEM_freeN(dumprect); + } } diff --git a/source/gameengine/BlenderRoutines/KX_BlenderCanvas.h b/source/gameengine/BlenderRoutines/KX_BlenderCanvas.h index c5318b882fa..9ad80cb1737 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderCanvas.h +++ b/source/gameengine/BlenderRoutines/KX_BlenderCanvas.h @@ -34,15 +34,11 @@ #ifdef WIN32 #include -#endif - -#include "GL/glew.h" +#endif #include "RAS_ICanvas.h" #include "RAS_Rect.h" -#include "KX_BlenderGL.h" - #ifdef WITH_CXX_GUARDEDALLOC #include "MEM_guardedalloc.h" #endif @@ -70,7 +66,7 @@ public: * * \param area The Blender ARegion to run the game within. */ - KX_BlenderCanvas(struct wmWindowManager *wm, struct wmWindow* win, class RAS_Rect &rect, struct ARegion* ar); + KX_BlenderCanvas(struct wmWindowManager *wm, struct wmWindow* win, RAS_Rect &rect, struct ARegion* ar); ~KX_BlenderCanvas(); void diff --git a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp b/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp deleted file mode 100644 index 3770d81f4d5..00000000000 --- a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp +++ /dev/null @@ -1,185 +0,0 @@ -/* - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** \file gameengine/BlenderRoutines/KX_BlenderGL.cpp - * \ingroup blroutines - */ - - -#include "KX_BlenderGL.h" - -/* - * This little block needed for linking to Blender... - */ -#ifdef WIN32 -#include -#include "BLI_winstuff.h" -#endif - -#include -#include - -#include "GL/glew.h" - -#include "MEM_guardedalloc.h" - -#include "BL_Material.h" // MAXTEX - -/* Data types encoding the game world: */ -#include "DNA_object_types.h" -#include "DNA_scene_types.h" -#include "DNA_screen_types.h" -#include "DNA_camera_types.h" -#include "DNA_world_types.h" -#include "DNA_mesh_types.h" -#include "DNA_meshdata_types.h" -#include "DNA_image_types.h" -#include "DNA_view3d_types.h" -#include "DNA_material_types.h" -#include "DNA_space_types.h" -#include "DNA_windowmanager_types.h" - -#include "BKE_global.h" -#include "BKE_main.h" -#include "BKE_bmfont.h" -#include "BKE_image.h" - -#include "BLI_path_util.h" -#include "BLI_string.h" - -extern "C" { -#include "IMB_imbuf_types.h" -#include "IMB_imbuf.h" -#include "WM_api.h" -#include "WM_types.h" -#include "wm_event_system.h" -#include "wm_cursors.h" -#include "wm_window.h" -#include "BLF_api.h" -} - -/* end of blender block */ -void BL_warp_pointer(wmWindow *win, int x,int y) -{ - WM_cursor_warp(win, x, y); -} - -void BL_SwapBuffers(wmWindow *win) -{ - wm_window_swap_buffers(win); -} - -void BL_MakeDrawable(wmWindowManager *wm, wmWindow *win) -{ - wm_window_make_drawable(wm, win); -} - -void BL_SetSwapInterval(struct wmWindow *win, int interval) -{ - wm_window_set_swap_interval(win, interval); -} - -int BL_GetSwapInterval(struct wmWindow *win) -{ - return wm_window_get_swap_interval(win); -} - -void BL_HideMouse(wmWindow *win) -{ - WM_cursor_set(win, CURSOR_NONE); -} - - -void BL_WaitMouse(wmWindow *win) -{ - WM_cursor_set(win, CURSOR_WAIT); -} - - -void BL_NormalMouse(wmWindow *win) -{ - WM_cursor_set(win, CURSOR_STD); -} -/* get shot from frontbuffer sort of a copy from screendump.c */ -static unsigned int *screenshot(ScrArea *curarea, int *dumpsx, int *dumpsy) -{ - int x=0, y=0; - unsigned int *dumprect= NULL; - - x= curarea->totrct.xmin; - y= curarea->totrct.ymin; - *dumpsx= curarea->totrct.xmax-x; - *dumpsy= curarea->totrct.ymax-y; - - if (*dumpsx && *dumpsy) { - - dumprect= (unsigned int *)MEM_mallocN(sizeof(int) * (*dumpsx) * (*dumpsy), "dumprect"); - glReadBuffer(GL_FRONT); - glReadPixels(x, y, *dumpsx, *dumpsy, GL_RGBA, GL_UNSIGNED_BYTE, dumprect); - glFinish(); - glReadBuffer(GL_BACK); - } - - return dumprect; -} - -/* based on screendump.c::screenshot_exec */ -void BL_MakeScreenShot(bScreen *screen, ScrArea *curarea, const char *filename) -{ - unsigned int *dumprect; - int dumpsx, dumpsy; - - dumprect = screenshot(curarea, &dumpsx, &dumpsy); - - if (dumprect) { - /* initialize image file format data */ - Scene *scene = (screen)? screen->scene: NULL; - ImageFormatData im_format; - - if (scene) - im_format = scene->r.im_format; - else - BKE_imformat_defaults(&im_format); - - /* create file path */ - char path[FILE_MAX]; - BLI_strncpy(path, filename, sizeof(path)); - BLI_path_abs(path, G.main->name); - BKE_add_image_extension_from_type(path, im_format.imtype); - - /* create and save imbuf */ - ImBuf *ibuf = IMB_allocImBuf(dumpsx, dumpsy, 24, 0); - ibuf->rect = dumprect; - - BKE_imbuf_write_as(ibuf, path, &im_format, false); - - ibuf->rect = NULL; - IMB_freeImBuf(ibuf); - MEM_freeN(dumprect); - } -} - diff --git a/source/gameengine/BlenderRoutines/KX_BlenderGL.h b/source/gameengine/BlenderRoutines/KX_BlenderGL.h deleted file mode 100644 index 13d563a687b..00000000000 --- a/source/gameengine/BlenderRoutines/KX_BlenderGL.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** \file KX_BlenderGL.h - * \ingroup blroutines - */ - -#ifndef __KX_BLENDERGL_H__ -#define __KX_BLENDERGL_H__ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -struct ARegion; -struct bScreen; -struct wmWindow; -struct wmWindowManager; - -// special swapbuffers, that takes care of which area (viewport) needs to be swapped -void BL_SwapBuffers(struct wmWindow *win); -void BL_SetSwapInterval(struct wmWindow *win, int interval); -int BL_GetSwapInterval(struct wmWindow *win); - -void BL_MakeDrawable(struct wmWindowManager *wm, struct wmWindow *win); - -void BL_warp_pointer(struct wmWindow *win,int x,int y); - -void BL_MakeScreenShot(struct bScreen *screen, struct ScrArea *curarea, const char *filename); - -void BL_HideMouse(struct wmWindow *win); -void BL_NormalMouse(struct wmWindow *win); -void BL_WaitMouse(struct wmWindow *win); - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __KX_BLENDERGL_H__ */ diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp index 7456670fcdb..d87541ce080 100644 --- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp +++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp @@ -39,7 +39,6 @@ #include #include "BL_BlenderDataConversion.h" -#include "KX_BlenderGL.h" #include "KX_BlenderScalarInterpolator.h" #include "RAS_IPolygonMaterial.h" diff --git a/source/gameengine/Converter/BlenderWorldInfo.cpp b/source/gameengine/Converter/BlenderWorldInfo.cpp index 25da8155867..f1f264b3367 100644 --- a/source/gameengine/Converter/BlenderWorldInfo.cpp +++ b/source/gameengine/Converter/BlenderWorldInfo.cpp @@ -33,7 +33,6 @@ #include // printf() #include "BlenderWorldInfo.h" -#include "KX_BlenderGL.h" /* This little block needed for linking to Blender... */ #ifdef WIN32 diff --git a/source/gameengine/Converter/BlenderWorldInfo.h b/source/gameengine/Converter/BlenderWorldInfo.h index 30de5e89269..af535d65d62 100644 --- a/source/gameengine/Converter/BlenderWorldInfo.h +++ b/source/gameengine/Converter/BlenderWorldInfo.h @@ -33,7 +33,6 @@ #define __BLENDERWORLDINFO_H__ #include "MT_CmMatrix4x4.h" #include "KX_WorldInfo.h" -#include "KX_BlenderGL.h" class BlenderWorldInfo : public KX_WorldInfo { diff --git a/source/gameengine/Converter/KX_ConvertSensors.cpp b/source/gameengine/Converter/KX_ConvertSensors.cpp index 3bb12c12cd1..b9bd9aabc54 100644 --- a/source/gameengine/Converter/KX_ConvertSensors.cpp +++ b/source/gameengine/Converter/KX_ConvertSensors.cpp @@ -80,7 +80,6 @@ #include "KX_Scene.h" #include "IntValue.h" #include "KX_BlenderKeyboardDevice.h" -#include "KX_BlenderGL.h" #include "RAS_ICanvas.h" #include "PHY_IPhysicsEnvironment.h"