rebranch from 2.5
[blender.git] / source / gameengine / BlenderRoutines / KX_BlenderCanvas.cpp
1 /**
2  * $Id$
3  * ***** BEGIN GPL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software Foundation,
17  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18  *
19  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
20  * All rights reserved.
21  *
22  * The Original Code is: all of this file.
23  *
24  * Contributor(s): none yet.
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 //XXX #include "BIF_scrarea.h"
30 #include "KX_BlenderCanvas.h"
31
32 #ifdef HAVE_CONFIG_H
33 #include <config.h>
34 #endif
35
36 KX_BlenderCanvas::KX_BlenderCanvas(struct ScrArea *area) :
37 m_area(area)
38 {
39 }
40
41 KX_BlenderCanvas::~KX_BlenderCanvas()
42 {
43 }
44
45 void KX_BlenderCanvas::Init()
46 {
47         glDepthFunc(GL_LEQUAL);
48 }       
49
50
51 void KX_BlenderCanvas::SwapBuffers()
52 {
53         BL_SwapBuffers();
54 }
55
56 void KX_BlenderCanvas::BeginFrame()
57 {
58         glEnable(GL_DEPTH_TEST);
59         glDepthFunc(GL_LEQUAL);
60
61 }
62
63
64 void KX_BlenderCanvas::EndFrame()
65 {
66                 // this is needed, else blender distorts a lot
67         glPopAttrib();
68         glPushAttrib(GL_ALL_ATTRIB_BITS);
69                 
70         glDisable(GL_FOG);
71 }
72
73
74
75 void KX_BlenderCanvas::ClearColor(float r,float g,float b,float a)
76 {
77         glClearColor(r,g,b,a);
78 }
79
80
81
82 void KX_BlenderCanvas::ClearBuffer(int type)
83 {
84         int ogltype = 0;
85
86         if (type & RAS_ICanvas::COLOR_BUFFER )
87                 ogltype |= GL_COLOR_BUFFER_BIT;
88
89         if (type & RAS_ICanvas::DEPTH_BUFFER )
90                 ogltype |= GL_DEPTH_BUFFER_BIT;
91         glClear(ogltype);
92 }
93
94 int KX_BlenderCanvas::GetWidth(
95 ) const {
96         return 0; //XXX scrarea_get_win_width(m_area);
97 }
98
99 int KX_BlenderCanvas::GetHeight(
100 ) const {
101         return 0; //XXX scrarea_get_win_height(m_area);
102 }
103
104 RAS_Rect &
105 KX_BlenderCanvas::
106 GetWindowArea(
107 ){
108         return m_area_rect;
109 }       
110
111         void
112 KX_BlenderCanvas::
113 SetViewPort(
114         int x1, int y1,
115         int x2, int y2
116 ){
117         int vp_width = (x2 - x1) + 1;
118         int vp_height = (y2 - y1) + 1;
119         int minx = 0;//XXX scrarea_get_win_x(m_area);
120         int miny = 0;//XXX scrarea_get_win_y(m_area);
121
122         m_area_rect.SetLeft(minx + x1);
123         m_area_rect.SetBottom(miny + y1);
124         m_area_rect.SetRight(minx + x2);
125         m_area_rect.SetTop(miny + y2);
126
127         glViewport(minx + x1, miny + y1, vp_width, vp_height);
128         glScissor(minx + x1, miny + y1, vp_width, vp_height);
129 }
130
131
132 void KX_BlenderCanvas::SetMouseState(RAS_MouseState mousestate)
133 {
134         switch (mousestate)
135         {
136         case MOUSE_INVISIBLE:
137                 {
138                         BL_HideMouse();
139                         break;
140                 }
141         case MOUSE_WAIT:
142                 {
143                         BL_WaitMouse();
144                         break;
145                 }
146         case MOUSE_NORMAL:
147                 {
148                         BL_NormalMouse();
149                         break;
150                 }
151         default:
152                 {
153                 }
154         }
155 }
156
157
158
159 //      (0,0) is top left, (width,height) is bottom right
160 void KX_BlenderCanvas::SetMousePosition(int x,int y)
161 {
162         int winX = 0;//XXX scrarea_get_win_x(m_area);
163         int winY = 0;//XXX scrarea_get_win_y(m_area);
164         int winH = 0;//XXX scrarea_get_win_height(m_area);
165         
166         BL_warp_pointer(winX + x, winY + (winH-y-1));
167 }
168
169
170
171 void KX_BlenderCanvas::MakeScreenShot(const char* filename)
172 {
173         BL_MakeScreenShot(m_area, filename);
174 }