~ubuntu-branches/ubuntu/trusty/libavg/trusty-proposed

« back to all changes in this revision

Viewing changes to src/graphics/BmpTextureMover.cpp

  • Committer: Package Import Robot
  • Author(s): OXullo Intersecans
  • Date: 2011-12-06 22:44:56 UTC
  • mfrom: (1.1.6)
  • Revision ID: package-import@ubuntu.com-20111206224456-qc7250z3ya1vi8s9
Tags: 1.7.0-0ubuntu1
* New upstream release (LP: #899183)
* Remove patches 0002-libav-0.7.patch, 0003-fglrx-segfault-on-startup.patch
  now merged to upstream
* Remove unnecessary .la files
* Update debian/watch file
* Fix debian/copyright dep-5 compliancy
* Update standards to version 3.9.2
* Add man pages for avg_checktouch, avg_checkvsync, avg_showsvg
* Minor debian/rules enhancement
* Add librsvg2-dev, libgdk-pixbuf2.0-dev to Build-Depends
* Proper transition to dh_python2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
2
//  libavg - Media Playback Engine. 
 
3
//  Copyright (C) 2003-2011 Ulrich von Zadow
 
4
//
 
5
//  This library is free software; you can redistribute it and/or
 
6
//  modify it under the terms of the GNU Lesser General Public
 
7
//  License as published by the Free Software Foundation; either
 
8
//  version 2 of the License, or (at your option) any later version.
 
9
//
 
10
//  This library 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 GNU
 
13
//  Lesser General Public License for more details.
 
14
//
 
15
//  You should have received a copy of the GNU Lesser General Public
 
16
//  License along with this library; if not, write to the Free Software
 
17
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
18
//
 
19
//  Current versions can be found at www.libavg.de
 
20
//
 
21
 
 
22
#include "BmpTextureMover.h"
 
23
 
 
24
#include "Bitmap.h"
 
25
#include "GLTexture.h"
 
26
 
 
27
#include "../base/Logger.h"
 
28
#include "../base/Exception.h"
 
29
 
 
30
#include <iostream>
 
31
#include <cstring>
 
32
 
 
33
using namespace std;
 
34
using namespace boost;
 
35
 
 
36
namespace avg {
 
37
    
 
38
BmpTextureMover::BmpTextureMover(const IntPoint& size, PixelFormat pf)
 
39
    : TextureMover(size, pf)
 
40
{
 
41
    m_pBmp = BitmapPtr(new Bitmap(size, pf));
 
42
}
 
43
 
 
44
BmpTextureMover::~BmpTextureMover()
 
45
{
 
46
}
 
47
 
 
48
void BmpTextureMover::moveBmpToTexture(BitmapPtr pBmp, GLTexture& tex)
 
49
{
 
50
    AVG_ASSERT(pBmp->getSize() == tex.getSize());
 
51
    AVG_ASSERT(getSize() == pBmp->getSize());
 
52
    AVG_ASSERT(pBmp->getPixelFormat() == getPF());
 
53
    tex.activate();
 
54
    unsigned char * pStartPos = pBmp->getPixels();
 
55
    IntPoint size = tex.getSize();
 
56
    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, size.x, size.y,
 
57
            tex.getGLFormat(getPF()), tex.getGLType(getPF()), 
 
58
            pStartPos);
 
59
    OGLErrorCheck(AVG_ERR_VIDEO_GENERAL, 
 
60
            "BmpTextureMover::moveBmpToTexture: glTexSubImage2D()");
 
61
}
 
62
 
 
63
BitmapPtr BmpTextureMover::moveTextureToBmp(GLTexture& tex, int mipmapLevel)
 
64
{
 
65
    AVG_ASSERT(getSize() == tex.getGLSize());
 
66
    BitmapPtr pBmp;
 
67
    IntPoint activeSize;    
 
68
    if (mipmapLevel == 0) {
 
69
        activeSize = tex.getSize();
 
70
        pBmp = BitmapPtr(new Bitmap(tex.getGLSize(), getPF()));
 
71
    } else {
 
72
        activeSize = tex.getMipmapSize(mipmapLevel);
 
73
        pBmp = BitmapPtr(new Bitmap(activeSize, getPF()));
 
74
    }
 
75
 
 
76
    tex.activate(GL_TEXTURE0);
 
77
 
 
78
    unsigned char * pStartPos = pBmp->getPixels();
 
79
    glGetTexImage(GL_TEXTURE_2D, mipmapLevel, GLTexture::getGLFormat(getPF()), 
 
80
            GLTexture::getGLType(getPF()), pStartPos);
 
81
    OGLErrorCheck(AVG_ERR_VIDEO_GENERAL, 
 
82
            "BmpTextureMover::moveTextureToBmp: glGetTexImage()");
 
83
    
 
84
    if (activeSize != tex.getGLSize()) {
 
85
        BitmapPtr pTempBmp = pBmp;
 
86
        pBmp = BitmapPtr(new Bitmap(activeSize, getPF(), pStartPos, 
 
87
                pTempBmp->getStride(), true));
 
88
    }
 
89
    
 
90
    return pBmp;
 
91
}
 
92
 
 
93
BitmapPtr BmpTextureMover::lock()
 
94
{
 
95
    return m_pBmp;
 
96
}
 
97
 
 
98
void BmpTextureMover::unlock()
 
99
{
 
100
}
 
101
 
 
102
void BmpTextureMover::moveToTexture(GLTexture& tex)
 
103
{
 
104
    moveBmpToTexture(m_pBmp, tex);
 
105
}
 
106
 
 
107
}