Commit b374fb5
committed
refactor: de-virtualize IC and TS
Background: The ImageCache and TextureSystem had historically been
implemented as pure virtual abstract base classe defining an
interface, then a hidden concrete subclass. The flexibility this was
intended to provide was never really used; instead the imagined main
client for the flexibility, OSL, has a different mechanism for
customizing the texture system (via their RendererServices
class). Meanwhile, this has made the interfaces to IC and TS
impossible to change without breaking the ABI.
So this PR does the following:
* ImageCache and TextureSytem are full de-virtualized, and are now
concrete classes, no hidden subclassing, no virtual methods. As
such, removing or changing existing methods will be an ABI break,
but adding new methods is not.
* Each use a PIMPL idiom, where all the data amd internal methods
are hidden from the public enterface and do not affect the ABI.
* Roughly speaking, we added the PIMPL pointers and made the
ImageCacheImpl/TextureSystemImpl -- what used to be the hidden
concrete subclasses -- into the hidden PIMPL classes.
* Moved a lot of classes that used to be in a "pvt" namespace into the
main namespace. If they are opaque types not exposed in public
headers or as symbols exported from the library, it doesn't matter,
so this just removes some arbitrary clutter.
* Had to rearrange some of the recently added heapsize/footprint code,
moved some inline functions in the headers into methods of the
classes, defined in the cpp files.
This itself is a huge ABI change, so will only be merged into master,
to become part of the 3.0 release. This is not an API change, though!
This is all about the internals, and should not require any client
software to change a single line of code.
I may do further simplification or refactoring of this code in the
future, but that will all be smaller and have no further API/ABI
changes that break compatibility.
Although the structure of the class hierarchy has changed around, none
of the logic about how IC and TS actually *work* has changed, so there
should be no change in observable behavior.1 parent 7faf944 commit b374fb5
File tree
11 files changed
+1534
-732
lines changed- src
- include/OpenImageIO
- libtexture
11 files changed
+1534
-732
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
28 | | - | |
29 | | - | |
30 | 28 | | |
31 | | - | |
32 | 29 | | |
33 | 30 | | |
34 | 31 | | |
| |||
1369 | 1366 | | |
1370 | 1367 | | |
1371 | 1368 | | |
1372 | | - | |
| 1369 | + | |
1373 | 1370 | | |
1374 | 1371 | | |
1375 | 1372 | | |
| |||
1638 | 1635 | | |
1639 | 1636 | | |
1640 | 1637 | | |
1641 | | - | |
| 1638 | + | |
1642 | 1639 | | |
1643 | 1640 | | |
1644 | 1641 | | |
| |||
Large diffs are not rendered by default.
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
203 | 203 | | |
204 | 204 | | |
205 | 205 | | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
206 | 254 | | |
207 | 255 | | |
208 | 256 | | |
| |||
225 | 273 | | |
226 | 274 | | |
227 | 275 | | |
| 276 | + | |
| 277 | + | |
228 | 278 | | |
229 | 279 | | |
230 | 280 | | |
| |||
594 | 644 | | |
595 | 645 | | |
596 | 646 | | |
597 | | - | |
598 | | - | |
599 | 647 | | |
0 commit comments