37
42
ImageViewport::ImageViewport (void) : m_alpha(false), m_texInit(false)
39
44
// get viewport rectangle
40
glGetIntegerv(GL_VIEWPORT, m_viewport);
45
RAS_Rect rect = KX_GetActiveEngine()->GetCanvas()->GetWindowArea();
46
m_viewport[0] = rect.GetLeft();
47
m_viewport[1] = rect.GetBottom();
48
m_viewport[2] = rect.GetWidth();
49
m_viewport[3] = rect.GetHeight();
51
//glGetIntegerv(GL_VIEWPORT, m_viewport);
41
52
// create buffer for viewport image
42
53
m_viewportImage = new BYTE [4 * getViewportSize()[0] * getViewportSize()[1]];
121
132
// if texture can be directly created
122
133
if (texId != 0 && m_pyfilter == NULL && m_capSize[0] == calcSize(m_capSize[0])
123
&& m_capSize[1] == calcSize(m_capSize[1]) && !m_flip)
134
&& m_capSize[1] == calcSize(m_capSize[1]) && !m_flip)
125
136
// just copy current viewport to texture
126
glBindTexture(GL_TEXTURE_2D, texId);
127
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_upLeft[0], m_upLeft[1], (GLsizei)m_capSize[0], (GLsizei)m_capSize[1]);
128
// image is not available
137
glBindTexture(GL_TEXTURE_2D, texId);
138
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_upLeft[0], m_upLeft[1], (GLsizei)m_capSize[0], (GLsizei)m_capSize[1]);
139
// image is not available
131
142
// otherwise copy viewport to buffer, if image is not available
132
143
else if (!m_avail)
134
145
// get frame buffer data
137
glReadPixels(m_upLeft[0], m_upLeft[1], (GLsizei)m_capSize[0], (GLsizei)m_capSize[1], GL_RGBA,
138
GL_UNSIGNED_BYTE, m_viewportImage);
139
// filter loaded data
141
filterImage(filt, m_viewportImage, m_capSize);
145
glReadPixels(m_upLeft[0], m_upLeft[1], (GLsizei)m_capSize[0], (GLsizei)m_capSize[1], GL_RGB,
146
GL_UNSIGNED_BYTE, m_viewportImage);
147
// filter loaded data
149
filterImage(filt, m_viewportImage, m_capSize);
148
glReadPixels(m_upLeft[0], m_upLeft[1], (GLsizei)m_capSize[0], (GLsizei)m_capSize[1], GL_RGBA,
149
GL_UNSIGNED_BYTE, m_viewportImage);
150
// filter loaded data
152
filterImage(filt, m_viewportImage, m_capSize);
156
glReadPixels(m_upLeft[0], m_upLeft[1], (GLsizei)m_capSize[0], (GLsizei)m_capSize[1], GL_RGB,
157
GL_UNSIGNED_BYTE, m_viewportImage);
158
// filter loaded data
160
filterImage(filt, m_viewportImage, m_capSize);
225
236
static int ImageViewport_setPosition (PyImage * self, PyObject * value, void * closure)
227
238
// check validity of parameter
228
if (value == NULL || !PySequence_Check(value) || PySequence_Length(value) != 2
239
if (value == NULL || !PySequence_Check(value) || PySequence_Size(value) != 2
229
240
|| !PyLong_Check(PySequence_Fast_GET_ITEM(value, 0))
230
241
|| !PyLong_Check(PySequence_Fast_GET_ITEM(value, 1)))
253
264
int ImageViewport_setCaptureSize (PyImage * self, PyObject * value, void * closure)
255
266
// check validity of parameter
256
if (value == NULL || !PySequence_Check(value) || PySequence_Length(value) != 2
267
if (value == NULL || !PySequence_Check(value) || PySequence_Size(value) != 2
257
268
|| !PyLong_Check(PySequence_Fast_GET_ITEM(value, 0))
258
269
|| !PyLong_Check(PySequence_Fast_GET_ITEM(value, 1)))
297
308
{(char*)"valid", (getter)Image_valid, NULL, (char*)"bool to tell if an image is available", NULL},
298
309
{(char*)"image", (getter)Image_getImage, NULL, (char*)"image data", NULL},
299
310
{(char*)"size", (getter)Image_getSize, NULL, (char*)"image size", NULL},
300
{(char*)"scale", (getter)Image_getScale, (setter)Image_setScale, (char*)"fast scale of image (near neighbour)", NULL},
311
{(char*)"scale", (getter)Image_getScale, (setter)Image_setScale, (char*)"fast scale of image (near neighbor)", NULL},
301
312
{(char*)"flip", (getter)Image_getFlip, (setter)Image_setFlip, (char*)"flip image vertically", NULL},
302
313
{(char*)"filter", (getter)Image_getFilter, (setter)Image_setFilter, (char*)"pixel filter", NULL},