-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathofxsMipmap.h
91 lines (80 loc) · 3.05 KB
/
ofxsMipmap.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; -*- */
/* ***** BEGIN LICENSE BLOCK *****
* This file is part of openfx-supportext <https://github.com/NatronGitHub/openfx-supportext>,
* (C) 2018-2021 The Natron Developers
* (C) 2013-2018 INRIA
*
* openfx-supportext 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.
*
* openfx-supportext 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 openfx-supportext. If not, see <http://www.gnu.org/licenses/gpl-2.0.html>
* ***** END LICENSE BLOCK ***** */
/*
* OFX mipmapping help functions
*/
#ifndef openfx_supportext_ofxsMipmap_h
#define openfx_supportext_ofxsMipmap_h
#include <cmath>
#include <cassert>
#include <vector>
#include "ofxsImageEffect.h"
namespace OFX {
void ofxsScalePixelData(OFX::ImageEffect* instance,
const OfxRectI & originalRenderWindow,
const OfxRectI & renderWindow,
unsigned int levels,
const void* srcPixelData,
OFX::PixelComponentEnum srcPixelComponents,
OFX::BitDepthEnum srcPixelDepth,
const OfxRectI & srcBounds,
int srcRowBytes,
void* dstPixelData,
OFX::PixelComponentEnum dstPixelComponents,
OFX::BitDepthEnum dstPixelDepth,
const OfxRectI & dstBounds,
int dstRowBytes);
struct MipMap
{
std::size_t memSize;
OFX::ImageMemory* data;
OfxRectI bounds;
MipMap()
: memSize(0)
, data(NULL)
, bounds()
{
}
~MipMap()
{
delete data;
data = 0;
}
};
//Contains all levels of details > 0, sort by decreasing LoD
typedef std::vector<MipMap> MipMapsVector;
/**
@brief Given the original image, this function builds all mipmap levels
up to maxLevel and stores them in the mipmaps vector, in decreasing LoD.
The original image will not be stored in the mipmaps vector.
@param mipmaps[out] The mipmaps vector should contains at least maxLevel
entries
**/
void ofxsBuildMipMaps(OFX::ImageEffect* instance,
const OfxRectI & renderWindow,
const void* srcPixelData,
OFX::PixelComponentEnum srcPixelComponents,
OFX::BitDepthEnum srcPixelDepth,
const OfxRectI & srcBounds,
int srcRowBytes,
unsigned int maxLevel,
MipMapsVector & mipmaps);
} // OFX
#endif // ifndef openfx_supportext_ofxsMipmap_h