53 lines
2.4 KiB
C++
53 lines
2.4 KiB
C++
/* SPDX-FileCopyrightText: 2023 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#pragma once
|
|
|
|
namespace blender::compositor {
|
|
|
|
/* -------------------------------------------------------------------------------------------------
|
|
* Cached Resource.
|
|
*
|
|
* A cached resource is any resource that can be cached across compositor evaluations and across
|
|
* multiple operations. Cached resources are managed by an instance of a StaticCacheManager, stored
|
|
* in an instance of a CachedResourceContainer, and are freed when they are no longer needed, a
|
|
* state which is represented by the `needed` member in the class. For more information on the
|
|
* caching mechanism, see the StaticCacheManager class.
|
|
*
|
|
* To add a new cached resource:
|
|
*
|
|
* - Create a key class that can be used to identify the resource in a Map if needed.
|
|
* - Create a derived class from CachedResource to represent the resource.
|
|
* - Create a derived class from CachedResourceContainer to store the resources.
|
|
* - Add an instance of the container to StaticCacheManager and call its reset method.
|
|
*
|
|
* See the existing cached resources for reference. */
|
|
class CachedResource {
|
|
public:
|
|
/* A flag that represents the needed status of the cached resource. See the StaticCacheManager
|
|
* class for more information on how this member is utilized in the caching mechanism. */
|
|
bool needed = true;
|
|
};
|
|
|
|
/* -------------------------------------------------------------------------------------------------
|
|
* Cached Resource Container.
|
|
*
|
|
* A cached resource container stores all the cached resources for a specific cached resource type.
|
|
* The cached resources are typically stored in a map identified by a key type. The reset method
|
|
* should be implemented as described in StaticCacheManager::reset. An appropriate getter method
|
|
* should be provided that properly sets the CachedResource::needed flag as described in the
|
|
* description of the StaticCacheManager class.
|
|
*
|
|
* See the existing cached resources for reference. */
|
|
class CachedResourceContainer {
|
|
public:
|
|
/* Reset the container by deleting the cached resources that are no longer needed because they
|
|
* weren't used in the last evaluation and prepare the remaining cached resources to track their
|
|
* needed status in the next evaluation. See the description of the StaticCacheManager class for
|
|
* more information. This should be called in StaticCacheManager::reset. */
|
|
virtual void reset() = 0;
|
|
};
|
|
|
|
} // namespace blender::compositor
|