~siretart/ubuntu/utopic/blender/libav10

« back to all changes in this revision

Viewing changes to source/gameengine/VideoTexture/ImageViewport.cpp

  • Committer: Package Import Robot
  • Author(s): Matteo F. Vescovi
  • Date: 2012-07-23 08:54:18 UTC
  • mfrom: (14.2.16 sid)
  • mto: (14.2.19 sid)
  • mto: This revision was merged to the branch mainline in revision 42.
  • Revision ID: package-import@ubuntu.com-20120723085418-9foz30v6afaf5ffs
Tags: 2.63a-2
* debian/: Cycles support added (Closes: #658075)
  For now, this top feature has been enabled only
  on [any-amd64 any-i386] architectures because
  of OpenImageIO failing on all others
* debian/: scripts installation path changed
  from /usr/lib to /usr/share:
  + debian/patches/: patchset re-worked for path changing
  + debian/control: "Breaks" field added on yafaray-exporter

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* $Id: ImageViewport.cpp 27066 2010-02-21 22:20:00Z ben2610 $
 
1
/*
2
2
-----------------------------------------------------------------------------
3
3
This source file is part of VideoTexture library
4
4
 
20
20
-----------------------------------------------------------------------------
21
21
*/
22
22
 
 
23
/** \file gameengine/VideoTexture/ImageViewport.cpp
 
24
 *  \ingroup bgevideotex
 
25
 */
 
26
 
23
27
// implementation
24
28
 
25
29
#include <PyObjectPlus.h>
27
31
 
28
32
#include "GL/glew.h"
29
33
 
 
34
#include "KX_PythonInit.h"
30
35
#include "Texture.h"
31
36
#include "ImageBase.h"
32
37
#include "FilterSource.h"
37
42
ImageViewport::ImageViewport (void) : m_alpha(false), m_texInit(false)
38
43
{
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();
 
50
        
 
51
        //glGetIntegerv(GL_VIEWPORT, m_viewport);
41
52
        // create buffer for viewport image
42
53
        m_viewportImage = new BYTE [4 * getViewportSize()[0] * getViewportSize()[1]];
43
54
        // set attributes
46
57
 
47
58
// destructor
48
59
ImageViewport::~ImageViewport (void)
49
 
{ delete m_viewportImage; }
 
60
{ delete [] m_viewportImage; }
50
61
 
51
62
 
52
63
// use whole viewport to capture image
120
131
        }
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)
124
135
        {
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
129
 
            m_avail = false;
 
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
 
140
                m_avail = false;
130
141
        }
131
142
        // otherwise copy viewport to buffer, if image is not available
132
143
        else if (!m_avail)
133
144
        {
134
145
                // get frame buffer data
135
 
        if (m_alpha)
136
 
        {
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
140
 
                    FilterRGBA32 filt;
141
 
                    filterImage(filt, m_viewportImage, m_capSize);
142
 
        } 
143
 
        else
144
 
        {
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
148
 
                    FilterRGB24 filt;
149
 
                    filterImage(filt, m_viewportImage, m_capSize);
150
 
        }
 
146
                if (m_alpha)
 
147
                {
 
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
 
151
                        FilterRGBA32 filt;
 
152
                        filterImage(filt, m_viewportImage, m_capSize);
 
153
                }
 
154
                else
 
155
                {
 
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
 
159
                        FilterRGB24 filt;
 
160
                        filterImage(filt, m_viewportImage, m_capSize);
 
161
                }
151
162
        }
152
163
}
153
164
 
225
236
static int ImageViewport_setPosition (PyImage * self, PyObject * value, void * closure)
226
237
{
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)))
231
242
        {
253
264
int ImageViewport_setCaptureSize (PyImage * self, PyObject * value, void * closure)
254
265
{
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)))
259
270
        {
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},
303
314
        {NULL}