blender/intern/cycles/scene/procedural.h
Brecht Van Lommel d7d40745fa Cycles: changes to source code folders structure
* Split render/ into scene/ and session/. The scene/ folder now contains the
  scene and its nodes. The session/ folder contains the render session and
  associated data structures like drivers and render buffers.
* Move top level kernel headers into new folders kernel/camera/, kernel/film/,
  kernel/light/, kernel/sample/, kernel/util/
* Move integrator related kernel headers into kernel/integrator/
* Move OSL shaders from kernel/shaders/ to kernel/osl/shaders/

For patches and branches, git merge and rebase should be able to detect the
renames and move over code to the right file.
2021-10-26 15:36:39 +02:00

74 lines
1.9 KiB
C++

/*
* Copyright 2011-2018 Blender Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "graph/node.h"
CCL_NAMESPACE_BEGIN
class Progress;
class Scene;
/* A Procedural is a Node which can create other Nodes before rendering starts.
*
* The Procedural is supposed to be the owner of any nodes that it creates. It can also create
* Nodes directly in the Scene (through Scene.create_node), it should still be set as the owner of
* those Nodes.
*/
class Procedural : public Node, public NodeOwner {
public:
NODE_ABSTRACT_DECLARE
explicit Procedural(const NodeType *type);
virtual ~Procedural();
/* Called each time the ProceduralManager is tagged for an update, this function is the entry
* point for the data generated by this Procedural. */
virtual void generate(Scene *scene, Progress &progress) = 0;
/* Create a node and set this Procedural as the owner. */
template<typename T> T *create_node()
{
T *node = new T();
node->set_owner(this);
return node;
}
/* Delete a Node created and owned by this Procedural. */
template<typename T> void delete_node(T *node)
{
assert(node->get_owner() == this);
delete node;
}
};
class ProceduralManager {
bool need_update_;
public:
ProceduralManager();
~ProceduralManager();
void update(Scene *scene, Progress &progress);
void tag_update();
bool need_update() const;
};
CCL_NAMESPACE_END