blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.h

221 lines
3.3 KiB
C
Raw Normal View History

/*
* ***** BEGIN GPL LICENSE BLOCK *****
2002-10-12 11:37:38 +00:00
*
* 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.
2002-10-12 11:37:38 +00:00
*
* 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,
2010-02-12 13:34:04 +00:00
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
2002-10-12 11:37:38 +00:00
*
* 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 *****
2002-10-12 11:37:38 +00:00
*/
/** \file KX_BlenderCanvas.h
* \ingroup blroutines
*/
#ifndef __KX_BLENDERCANVAS_H__
#define __KX_BLENDERCANVAS_H__
2002-10-12 11:37:38 +00:00
#ifdef WIN32
#include <windows.h>
#endif
2002-10-12 11:37:38 +00:00
#include "RAS_ICanvas.h"
#include "RAS_Rect.h"
#ifdef WITH_CXX_GUARDEDALLOC
#include "MEM_guardedalloc.h"
#endif
struct ARegion;
struct wmWindow;
struct wmWindowManager;
2002-10-12 11:37:38 +00:00
/**
* 2D Blender device context abstraction.
* The connection from 3d rendercontext to 2d Blender surface embedding.
*/
class KX_BlenderCanvas : public RAS_ICanvas
{
private:
2013-02-02 04:48:21 +00:00
/**
* Rect that defines the area used for rendering,
* relative to the context */
2002-10-12 11:37:38 +00:00
RAS_Rect m_displayarea;
int m_viewport[4];
2002-10-12 11:37:38 +00:00
public:
/* Construct a new canvas.
*
* \param area The Blender ARegion to run the game within.
2002-10-12 11:37:38 +00:00
*/
KX_BlenderCanvas(struct wmWindowManager *wm, struct wmWindow* win, RAS_Rect &rect, struct ARegion* ar);
2002-10-12 11:37:38 +00:00
~KX_BlenderCanvas();
void
Init(
);
void
SwapBuffers(
);
void
SetSwapInterval(
int interval
);
bool
GetSwapInterval(
int &intervalOut
);
2002-10-12 11:37:38 +00:00
void
ResizeWindow(
2002-10-12 11:37:38 +00:00
int width,
int height
);
void
SetFullScreen(
bool enable
);
bool
GetFullScreen();
2002-10-12 11:37:38 +00:00
void
BeginFrame(
);
void
EndFrame(
);
void
ClearColor(
float r,
float g,
float b,
float a
);
void
ClearBuffer(
int type
);
int
GetWidth(
2012-02-27 10:35:39 +00:00
) const;
2002-10-12 11:37:38 +00:00
int
GetHeight(
2012-02-27 10:35:39 +00:00
) const;
2002-10-12 11:37:38 +00:00
int
GetMouseX(int x
);
int
GetMouseY(int y
);
float
GetMouseNormalizedX(int x
);
float
GetMouseNormalizedY(int y
);
2002-10-12 11:37:38 +00:00
const
RAS_Rect &
GetDisplayArea(
) const {
return m_displayarea;
};
void
SetDisplayArea(RAS_Rect *rect
2002-10-12 11:37:38 +00:00
) {
m_displayarea= *rect;
2002-10-12 11:37:38 +00:00
};
RAS_Rect &
GetWindowArea(
);
2002-10-12 11:37:38 +00:00
void
SetViewPort(
int x1, int y1,
int x2, int y2
);
void
UpdateViewPort(
int x1, int y1,
int x2, int y2
);
const int*
GetViewPort();
2002-10-12 11:37:38 +00:00
void
SetMouseState(
RAS_MouseState mousestate
);
void
SetMousePosition(
int x,
int y
);
void
MakeScreenShot(
const char* filename
);
bool
BeginDraw(
);
2002-10-12 11:37:38 +00:00
void
EndDraw(
);
2002-10-12 11:37:38 +00:00
private:
/** Blender area the game engine is running within */
struct wmWindowManager *m_wm;
struct wmWindow* m_win;
RAS_Rect m_frame_rect;
RAS_Rect m_area_rect;
2012-10-14 08:49:01 +00:00
int m_area_left;
int m_area_top;
#ifdef WITH_CXX_GUARDEDALLOC
MEM_CXX_CLASS_ALLOC_FUNCS("GE:KX_BlenderCanvas")
#endif
2002-10-12 11:37:38 +00:00
};
#endif /* __KX_BLENDERCANVAS_H__ */