Cleanup: replace doxy @ with backslash

The rest of Blender uses backslashes.
This commit is contained in:
Campbell Barton 2018-09-05 14:56:29 +10:00
parent 1be265afc0
commit 44d4a61ed0
130 changed files with 817 additions and 817 deletions

View File

@ -31,26 +31,26 @@ extern "C" {
#include "DNA_node_types.h"
/**
* @defgroup Model The data model of the compositor
* @defgroup Memory The memory management stuff
* @defgroup Execution The execution logic
* @defgroup Conversion Conversion logic
* @defgroup Node All nodes of the compositor
* @defgroup Operation All operations of the compositor
* \defgroup Model The data model of the compositor
* \defgroup Memory The memory management stuff
* \defgroup Execution The execution logic
* \defgroup Conversion Conversion logic
* \defgroup Node All nodes of the compositor
* \defgroup Operation All operations of the compositor
*
* @page Introduction of the Blender Compositor
* \page Introduction of the Blender Compositor
*
* @section bcomp Blender compositor
* \section bcomp Blender compositor
* This project redesigns the internals of Blender's compositor. The project has been executed in 2011 by At Mind.
* At Mind is a technology company located in Amsterdam, The Netherlands.
* The project has been crowd-funded. This code has been released under GPL2 to be used in Blender.
*
* @section goals The goals of the project
* \section goals The goals of the project
* the new compositor has 2 goals.
* - Make a faster compositor (speed of calculation)
* - Make the compositor work faster for you (workflow)
*
* @section speed Faster compositor
* \section speed Faster compositor
* The speedup has been done by making better use of the hardware Blenders is working on. The previous compositor only
* used a single threaded model to calculate a node. The only exception to this is the Defocus node.
* Only when it is possible to calculate two full nodes in parallel a second thread was used.
@ -59,27 +59,27 @@ extern "C" {
* In the new compositor we want to use as much of threads as possible. Even new OpenCL capable GPU-hardware can be
* used for calculation.
*
* @section workflow Work faster
* \section workflow Work faster
* The previous compositor only showed the final image. The compositor could wait a long time before seeing the result
* of his work. The new compositor will work in a way that it will focus on getting information back to the user.
* It will prioritize its work to get earlier user feedback.
*
* @page memory Memory model
* \page memory Memory model
* The main issue is the type of memory model to use. Blender is used by consumers and professionals.
* Ranging from low-end machines to very high-end machines.
* The system should work on high-end machines and on low-end machines.
*
*
* @page executing Executing
* @section prepare Prepare execution
* \page executing Executing
* \section prepare Prepare execution
*
* during the preparation of the execution All ReadBufferOperation will receive an offset.
* This offset is used during execution as an optimization trick
* Next all operations will be initialized for execution @see NodeOperation.initExecution
* Next all ExecutionGroup's will be initialized for execution @see ExecutionGroup.initExecution
* this all is controlled from @see ExecutionSystem.execute
* Next all operations will be initialized for execution \see NodeOperation.initExecution
* Next all ExecutionGroup's will be initialized for execution \see ExecutionGroup.initExecution
* this all is controlled from \see ExecutionSystem.execute
*
* @section priority Render priority
* \section priority Render priority
* Render priority is an priority of an output node. A user has a different need of Render priorities of output nodes
* than during editing.
* for example. the Active ViewerNode has top priority during editing, but during rendering a CompositeNode has.
@ -88,11 +88,11 @@ extern "C" {
* priority do match.
* When match the ExecutionGroup will be executed (this happens in serial)
*
* @see ExecutionSystem.execute control of the Render priority
* @see NodeOperation.getRenderPriority receive the render priority
* @see ExecutionGroup.execute the main loop to execute a whole ExecutionGroup
* \see ExecutionSystem.execute control of the Render priority
* \see NodeOperation.getRenderPriority receive the render priority
* \see ExecutionGroup.execute the main loop to execute a whole ExecutionGroup
*
* @section order Chunk order
* \section order Chunk order
*
* When a ExecutionGroup is executed, first the order of chunks are determined.
* The settings are stored in the ViewerNode inside the ExecutionGroup. ExecutionGroups that have no viewer-node,
@ -109,11 +109,11 @@ extern "C" {
* - [@ref ChunkExecutionState.COM_ES_SCHEDULED]: All dependencies are met, chunk is scheduled, but not finished
* - [@ref ChunkExecutionState.COM_ES_EXECUTED]: Chunk is finished
*
* @see ExecutionGroup.execute
* @see ViewerOperation.getChunkOrder
* @see OrderOfChunks
* \see ExecutionGroup.execute
* \see ViewerOperation.getChunkOrder
* \see OrderOfChunks
*
* @section interest Area of interest
* \section interest Area of interest
* An ExecutionGroup can have dependencies to other ExecutionGroup's. Data passing from one ExecutionGroup to another
* one are stored in 'chunks'.
* If not all input chunks are available the chunk execution will not be scheduled.
@ -206,40 +206,40 @@ extern "C" {
*
* </pre>
*
* @see ExecutionGroup.execute Execute a complete ExecutionGroup. Halts until finished or breaked by user
* @see ExecutionGroup.scheduleChunkWhenPossible Tries to schedule a single chunk,
* \see ExecutionGroup.execute Execute a complete ExecutionGroup. Halts until finished or breaked by user
* \see ExecutionGroup.scheduleChunkWhenPossible Tries to schedule a single chunk,
* checks if all input data is available. Can trigger dependent chunks to be calculated
* @see ExecutionGroup.scheduleAreaWhenPossible Tries to schedule an area. This can be multiple chunks
* \see ExecutionGroup.scheduleAreaWhenPossible Tries to schedule an area. This can be multiple chunks
* (is called from [@ref ExecutionGroup.scheduleChunkWhenPossible])
* @see ExecutionGroup.scheduleChunk Schedule a chunk on the WorkScheduler
* @see NodeOperation.determineDependingAreaOfInterest Influence the area of interest of a chunk.
* @see WriteBufferOperation Operation to write to a MemoryProxy/MemoryBuffer
* @see ReadBufferOperation Operation to read from a MemoryProxy/MemoryBuffer
* @see MemoryProxy proxy for information about memory image (a image consist out of multiple chunks)
* @see MemoryBuffer Allocated memory for a single chunk
* \see ExecutionGroup.scheduleChunk Schedule a chunk on the WorkScheduler
* \see NodeOperation.determineDependingAreaOfInterest Influence the area of interest of a chunk.
* \see WriteBufferOperation Operation to write to a MemoryProxy/MemoryBuffer
* \see ReadBufferOperation Operation to read from a MemoryProxy/MemoryBuffer
* \see MemoryProxy proxy for information about memory image (a image consist out of multiple chunks)
* \see MemoryBuffer Allocated memory for a single chunk
*
* @section workscheduler WorkScheduler
* \section workscheduler WorkScheduler
* the WorkScheduler is implemented as a static class. the responsibility of the WorkScheduler is to balance
* WorkPackages to the available and free devices.
* the work-scheduler can work in 2 states. For witching these between the state you need to recompile blender
*
* @subsection multithread Multi threaded
* \subsection multithread Multi threaded
* Default the work-scheduler will place all work as WorkPackage in a queue.
* For every CPUcore a working thread is created. These working threads will ask the WorkScheduler if there is work
* for a specific Device.
* the work-scheduler will find work for the device and the device will be asked to execute the WorkPackage
*
* @subsection singlethread Single threaded
* \subsection singlethread Single threaded
* For debugging reasons the multi-threading can be disabled. This is done by changing the COM_CURRENT_THREADING_MODEL
* to COM_TM_NOTHREAD. When compiling the work-scheduler
* will be changes to support no threading and run everything on the CPU.
*
* @section devices Devices
* \section devices Devices
* A Device within the compositor context is a Hardware component that can used to calculate chunks.
* This chunk is encapsulated in a WorkPackage.
* the WorkScheduler controls the devices and selects the device where a WorkPackage will be calculated.
*
* @subsection WS_Devices Workscheduler
* \subsection WS_Devices Workscheduler
* The WorkScheduler controls all Devices. When initializing the compositor the WorkScheduler selects
* all devices that will be used during compositor.
* There are two types of Devices, CPUDevice and OpenCLDevice.
@ -251,63 +251,63 @@ extern "C" {
*
* A thread will read the work-list and sends a workpackage to its device.
*
* @see WorkScheduler.schedule method that is called to schedule a chunk
* @see Device.execute method called to execute a chunk
* \see WorkScheduler.schedule method that is called to schedule a chunk
* \see Device.execute method called to execute a chunk
*
* @subsection CPUDevice CPUDevice
* \subsection CPUDevice CPUDevice
* When a CPUDevice gets a WorkPackage the Device will get the inputbuffer that is needed to calculate the chunk.
* Allocation is already done by the ExecutionGroup.
* The outputbuffer of the chunk is being created.
* The OutputOperation of the ExecutionGroup is called to execute the area of the outputbuffer.
*
* @see ExecutionGroup
* @see NodeOperation.executeRegion executes a single chunk of a NodeOperation
* @see CPUDevice.execute
* \see ExecutionGroup
* \see NodeOperation.executeRegion executes a single chunk of a NodeOperation
* \see CPUDevice.execute
*
* @subsection GPUDevice OpenCLDevice
* \subsection GPUDevice OpenCLDevice
*
* To be completed!
* @see NodeOperation.executeOpenCLRegion
* @see OpenCLDevice.execute
* \see NodeOperation.executeOpenCLRegion
* \see OpenCLDevice.execute
*
* @section executePixel executing a pixel
* \section executePixel executing a pixel
* Finally the last step, the node functionality :)
*
* @page newnode Creating new nodes
* \page newnode Creating new nodes
*/
/**
* @brief The main method that is used to execute the compositor tree.
* \brief The main method that is used to execute the compositor tree.
* It can be executed during editing (blenkernel/node.c) or rendering
* (renderer/pipeline.c)
*
* @param rd [struct RenderData]
* \param rd [struct RenderData]
* Render data for this composite, this won't always belong to a scene.
*
* @param editingtree [struct bNodeTree]
* \param editingtree [struct bNodeTree]
* reference to the compositor editing tree
*
* @param rendering [true false]
* \param rendering [true false]
* This parameter determines whether the function is called from rendering (true) or editing (false).
* based on this setting the system will work differently:
* - during rendering only Composite & the File output node will be calculated
* @see NodeOperation.isOutputProgram(int rendering) of the specific operations
* \see NodeOperation.isOutputProgram(int rendering) of the specific operations
*
* - during editing all output nodes will be calculated
* @see NodeOperation.isOutputProgram(int rendering) of the specific operations
* \see NodeOperation.isOutputProgram(int rendering) of the specific operations
*
* - another quality setting can be used bNodeTree. The quality is determined by the bNodeTree fields.
* quality can be modified by the user from within the node panels.
* @see bNodeTree.edit_quality
* @see bNodeTree.render_quality
* \see bNodeTree.edit_quality
* \see bNodeTree.render_quality
*
* - output nodes can have different priorities in the WorkScheduler.
* This is implemented in the COM_execute function.
*
* @param viewSettings
* \param viewSettings
* reference to view settings used for color management
*
* @param displaySettings
* \param displaySettings
* reference to display settings used for color management
*
* OCIO_TODO: this options only used in rare cases, namely in output file node,
@ -320,13 +320,13 @@ void COM_execute(RenderData *rd, Scene *scene, bNodeTree *editingtree, int rende
const char *viewName);
/**
* @brief Deinitialize the compositor caches and allocated memory.
* \brief Deinitialize the compositor caches and allocated memory.
* Use COM_clearCaches to only free the caches.
*/
void COM_deinitialize(void);
/**
* @brief Clear all compositor caches. (Compositor system will still remain available).
* \brief Clear all compositor caches. (Compositor system will still remain available).
* To deinitialize the compositor use the COM_deinitialize method.
*/
// void COM_clearCaches(void); // NOT YET WRITTEN

View File

@ -24,42 +24,42 @@
#define __COM_DEFINES_H__
/**
* @brief possible data types for sockets
* @ingroup Model
* \brief possible data types for sockets
* \ingroup Model
*/
typedef enum DataType {
/** @brief Value data type */
/** \brief Value data type */
COM_DT_VALUE = 1,
/** @brief Vector data type */
/** \brief Vector data type */
COM_DT_VECTOR = 2,
/** @brief Color data type */
/** \brief Color data type */
COM_DT_COLOR = 4
} DataType;
/**
* @brief Possible quality settings
* @see CompositorContext.quality
* @ingroup Execution
* \brief Possible quality settings
* \see CompositorContext.quality
* \ingroup Execution
*/
typedef enum CompositorQuality {
/** @brief High quality setting */
/** \brief High quality setting */
COM_QUALITY_HIGH = 0,
/** @brief Medium quality setting */
/** \brief Medium quality setting */
COM_QUALITY_MEDIUM = 1,
/** @brief Low quality setting */
/** \brief Low quality setting */
COM_QUALITY_LOW = 2
} CompositorQuality;
/**
* @brief Possible priority settings
* @ingroup Execution
* \brief Possible priority settings
* \ingroup Execution
*/
typedef enum CompositorPriority {
/** @brief High quality setting */
/** \brief High quality setting */
COM_PRIORITY_HIGH = 2,
/** @brief Medium quality setting */
/** \brief Medium quality setting */
COM_PRIORITY_MEDIUM = 1,
/** @brief Low quality setting */
/** \brief Low quality setting */
COM_PRIORITY_LOW = 0
} CompositorPriority;
@ -87,17 +87,17 @@ typedef enum CompositorPriority {
#define COM_CURRENT_THREADING_MODEL COM_TM_QUEUE
// chunk order
/**
* @brief The order of chunks to be scheduled
* @ingroup Execution
* \brief The order of chunks to be scheduled
* \ingroup Execution
*/
typedef enum OrderOfChunks {
/** @brief order from a distance to centerX/centerY */
/** \brief order from a distance to centerX/centerY */
COM_TO_CENTER_OUT = 0,
/** @brief order randomly */
/** \brief order randomly */
COM_TO_RANDOM = 1,
/** @brief no ordering */
/** \brief no ordering */
COM_TO_TOP_DOWN = 2,
/** @brief experimental ordering with 9 hotspots */
/** \brief experimental ordering with 9 hotspots */
COM_TO_RULE_OF_THIRDS = 3
} OrderOfChunks;

View File

@ -26,16 +26,16 @@
#include "COM_Device.h"
/**
* @brief class representing a CPU device.
* @note for every hardware thread in the system a CPUDevice instance will exist in the workscheduler
* \brief class representing a CPU device.
* \note for every hardware thread in the system a CPUDevice instance will exist in the workscheduler
*/
class CPUDevice : public Device {
public:
CPUDevice(int thread_id);
/**
* @brief execute a WorkPackage
* @param work the WorkPackage to execute
* \brief execute a WorkPackage
* \param work the WorkPackage to execute
*/
void execute(WorkPackage *work);

View File

@ -32,98 +32,98 @@
#include "COM_defines.h"
/**
* @brief Overall context of the compositor
* \brief Overall context of the compositor
*/
class CompositorContext {
private:
/**
* @brief The rendering field describes if we are rendering (F12) or if we are editing (Node editor)
* \brief The rendering field describes if we are rendering (F12) or if we are editing (Node editor)
* This field is initialized in ExecutionSystem and must only be read from that point on.
* @see ExecutionSystem
* \see ExecutionSystem
*/
bool m_rendering;
/**
* @brief The quality of the composite.
* \brief The quality of the composite.
* This field is initialized in ExecutionSystem and must only be read from that point on.
* @see ExecutionSystem
* \see ExecutionSystem
*/
CompositorQuality m_quality;
Scene *m_scene;
/**
* @brief Reference to the render data that is being composited.
* \brief Reference to the render data that is being composited.
* This field is initialized in ExecutionSystem and must only be read from that point on.
* @see ExecutionSystem
* \see ExecutionSystem
*/
RenderData *m_rd;
/**
* @brief reference to the bNodeTree
* \brief reference to the bNodeTree
* This field is initialized in ExecutionSystem and must only be read from that point on.
* @see ExecutionSystem
* \see ExecutionSystem
*/
bNodeTree *m_bnodetree;
/**
* @brief Preview image hash table
* \brief Preview image hash table
* This field is initialized in ExecutionSystem and must only be read from that point on.
*/
bNodeInstanceHash *m_previews;
/**
* @brief does this system have active opencl devices?
* \brief does this system have active opencl devices?
*/
bool m_hasActiveOpenCLDevices;
/**
* @brief Skip slow nodes
* \brief Skip slow nodes
*/
bool m_fastCalculation;
/* @brief color management settings */
/* \brief color management settings */
const ColorManagedViewSettings *m_viewSettings;
const ColorManagedDisplaySettings *m_displaySettings;
/**
* @brief active rendering view name
* \brief active rendering view name
*/
const char *m_viewName;
public:
/**
* @brief constructor initializes the context with default values.
* \brief constructor initializes the context with default values.
*/
CompositorContext();
/**
* @brief set the rendering field of the context
* \brief set the rendering field of the context
*/
void setRendering(bool rendering) { this->m_rendering = rendering; }
/**
* @brief get the rendering field of the context
* \brief get the rendering field of the context
*/
bool isRendering() const { return this->m_rendering; }
/**
* @brief set the scene of the context
* \brief set the scene of the context
*/
void setRenderData(RenderData *rd) { this->m_rd = rd; }
/**
* @brief set the bnodetree of the context
* \brief set the bnodetree of the context
*/
void setbNodeTree(bNodeTree *bnodetree) { this->m_bnodetree = bnodetree; }
/**
* @brief get the bnodetree of the context
* \brief get the bnodetree of the context
*/
const bNodeTree *getbNodeTree() const { return this->m_bnodetree; }
/**
* @brief get the scene of the context
* \brief get the scene of the context
*/
const RenderData *getRenderData() const { return this->m_rd; }
@ -131,67 +131,67 @@ public:
Scene *getScene() const { return m_scene; }
/**
* @brief set the preview image hash table
* \brief set the preview image hash table
*/
void setPreviewHash(bNodeInstanceHash *previews) { this->m_previews = previews; }
/**
* @brief get the preview image hash table
* \brief get the preview image hash table
*/
bNodeInstanceHash *getPreviewHash() const { return this->m_previews; }
/**
* @brief set view settings of color color management
* \brief set view settings of color color management
*/
void setViewSettings(const ColorManagedViewSettings *viewSettings) { this->m_viewSettings = viewSettings; }
/**
* @brief get view settings of color color management
* \brief get view settings of color color management
*/
const ColorManagedViewSettings *getViewSettings() const { return this->m_viewSettings; }
/**
* @brief set display settings of color color management
* \brief set display settings of color color management
*/
void setDisplaySettings(const ColorManagedDisplaySettings *displaySettings) { this->m_displaySettings = displaySettings; }
/**
* @brief get display settings of color color management
* \brief get display settings of color color management
*/
const ColorManagedDisplaySettings *getDisplaySettings() const { return this->m_displaySettings; }
/**
* @brief set the quality
* \brief set the quality
*/
void setQuality(CompositorQuality quality) { this->m_quality = quality; }
/**
* @brief get the quality
* \brief get the quality
*/
const CompositorQuality getQuality() const { return this->m_quality; }
/**
* @brief get the current framenumber of the scene in this context
* \brief get the current framenumber of the scene in this context
*/
const int getFramenumber() const;
/**
* @brief has this system active openclDevices?
* \brief has this system active openclDevices?
*/
const bool getHasActiveOpenCLDevices() const { return this->m_hasActiveOpenCLDevices; }
/**
* @brief set has this system active openclDevices?
* \brief set has this system active openclDevices?
*/
void setHasActiveOpenCLDevices(bool hasAvtiveOpenCLDevices) { this->m_hasActiveOpenCLDevices = hasAvtiveOpenCLDevices; }
/**
* @brief get the active rendering view
* \brief get the active rendering view
*/
const char *getViewName() const { return this->m_viewName; }
/**
* @brief set the active rendering view
* \brief set the active rendering view
*/
void setViewName(const char *viewName) { this->m_viewName = viewName; }

View File

@ -36,48 +36,48 @@ class NodeOperationOutput;
class NodeOperationBuilder;
/**
* @brief Conversion methods for the compositor
* \brief Conversion methods for the compositor
*/
class Converter {
public:
/**
* @brief Convert/wraps a bNode in its Node instance.
* \brief Convert/wraps a bNode in its Node instance.
*
* For all nodetypes a wrapper class is created.
*
* @note When adding a new node to blender, this method needs to be changed to return the correct Node instance.
* \note When adding a new node to blender, this method needs to be changed to return the correct Node instance.
*
* @see Node
* \see Node
*/
static Node *convert(bNode *b_node);
/**
* @brief True if the node is considered 'fast'.
* \brief True if the node is considered 'fast'.
*
* Slow nodes will be skipped if fast execution is required.
*/
static bool is_fast_node(bNode *b_node);
/**
* @brief This method will add a datetype conversion rule when the to-socket does not support the from-socket actual data type.
* \brief This method will add a datetype conversion rule when the to-socket does not support the from-socket actual data type.
*
* @note this method is called when conversion is needed.
* \note this method is called when conversion is needed.
*
* @param link the NodeLink what needs conversion
* @param system the ExecutionSystem to add the conversion to.
* @see NodeLink - a link between two sockets
* \param link the NodeLink what needs conversion
* \param system the ExecutionSystem to add the conversion to.
* \see NodeLink - a link between two sockets
*/
static NodeOperation *convertDataType(NodeOperationOutput *from, NodeOperationInput *to);
/**
* @brief This method will add a resolution rule based on the settings of the NodeInput.
* \brief This method will add a resolution rule based on the settings of the NodeInput.
*
* @note Conversion logic is implemented in this method
* @see InputSocketResizeMode for the possible conversions.
* \note Conversion logic is implemented in this method
* \see InputSocketResizeMode for the possible conversions.
*
* @param link the NodeLink what needs conversion
* @param system the ExecutionSystem to add the conversion to.
* @see NodeLink - a link between two sockets
* \param link the NodeLink what needs conversion
* \param system the ExecutionSystem to add the conversion to.
* \see NodeLink - a link between two sockets
*/
static void convertResolution(NodeOperationBuilder &builder, NodeOperationOutput *fromSocket, NodeOperationInput *toSocket);

View File

@ -26,7 +26,7 @@
#include "COM_WorkPackage.h"
/**
* @brief Abstract class for device implementations to be used by the Compositor.
* \brief Abstract class for device implementations to be used by the Compositor.
* devices are queried, initialized and used by the WorkScheduler.
* work are packaged as a WorkPackage instance.
*/
@ -34,24 +34,24 @@ class Device {
public:
/**
* @brief Declaration of the virtual destructor
* @note resolve warning gcc 4.7
* \brief Declaration of the virtual destructor
* \note resolve warning gcc 4.7
*/
virtual ~Device() {}
/**
* @brief initialize the device
* \brief initialize the device
*/
virtual bool initialize() { return true; }
/**
* @brief deinitialize the device
* \brief deinitialize the device
*/
virtual void deinitialize() {}
/**
* @brief execute a WorkPackage
* @param work the WorkPackage to execute
* \brief execute a WorkPackage
* \param work the WorkPackage to execute
*/
virtual void execute(WorkPackage *work) = 0;

View File

@ -185,9 +185,9 @@ void ExecutionGroup::execute(ExecutionSystem *graph)
{
const CompositorContext &context = graph->getContext();
const bNodeTree *bTree = context.getbNodeTree();
if (this->m_width == 0 || this->m_height == 0) {return; } /// @note: break out... no pixels to calculate.
if (bTree->test_break && bTree->test_break(bTree->tbh)) {return; } /// @note: early break out for blur and preview nodes
if (this->m_numberOfChunks == 0) {return; } /// @note: early break out
if (this->m_width == 0 || this->m_height == 0) {return; } /// \note: break out... no pixels to calculate.
if (bTree->test_break && bTree->test_break(bTree->tbh)) {return; } /// \note: early break out for blur and preview nodes
if (this->m_numberOfChunks == 0) {return; } /// \note: early break out
unsigned int chunkNumber;
this->m_executionStartTime = PIL_check_seconds_timer();

View File

@ -39,28 +39,28 @@ class ReadBufferOperation;
class Device;
/**
* @brief the execution state of a chunk in an ExecutionGroup
* @ingroup Execution
* \brief the execution state of a chunk in an ExecutionGroup
* \ingroup Execution
*/
typedef enum ChunkExecutionState {
/**
* @brief chunk is not yet scheduled
* \brief chunk is not yet scheduled
*/
COM_ES_NOT_SCHEDULED = 0,
/**
* @brief chunk is scheduled, but not yet executed
* \brief chunk is scheduled, but not yet executed
*/
COM_ES_SCHEDULED = 1,
/**
* @brief chunk is executed.
* \brief chunk is executed.
*/
COM_ES_EXECUTED = 2
} ChunkExecutionState;
/**
* @brief Class ExecutionGroup is a group of Operations that are executed as one.
* \brief Class ExecutionGroup is a group of Operations that are executed as one.
* This grouping is used to combine Operations that can be executed as one whole when multi-processing.
* @ingroup Execution
* \ingroup Execution
*/
class ExecutionGroup {
public:
@ -70,86 +70,86 @@ private:
// fields
/**
* @brief list of operations in this ExecutionGroup
* \brief list of operations in this ExecutionGroup
*/
Operations m_operations;
/**
* @brief is this ExecutionGroup an input ExecutionGroup
* \brief is this ExecutionGroup an input ExecutionGroup
* an input execution group is a group that is at the end of the calculation (the output is important for the user)
*/
int m_isOutput;
/**
* @brief Width of the output
* \brief Width of the output
*/
unsigned int m_width;
/**
* @brief Height of the output
* \brief Height of the output
*/
unsigned int m_height;
/**
* @brief size of a single chunk, being Width or of height
* \brief size of a single chunk, being Width or of height
* a chunk is always a square, except at the edges of the MemoryBuffer
*/
unsigned int m_chunkSize;
/**
* @brief number of chunks in the x-axis
* \brief number of chunks in the x-axis
*/
unsigned int m_numberOfXChunks;
/**
* @brief number of chunks in the y-axis
* \brief number of chunks in the y-axis
*/
unsigned int m_numberOfYChunks;
/**
* @brief total number of chunks
* \brief total number of chunks
*/
unsigned int m_numberOfChunks;
/**
* @brief contains this ExecutionGroup a complex NodeOperation.
* \brief contains this ExecutionGroup a complex NodeOperation.
*/
bool m_complex;
/**
* @brief can this ExecutionGroup be scheduled on an OpenCLDevice
* \brief can this ExecutionGroup be scheduled on an OpenCLDevice
*/
bool m_openCL;
/**
* @brief Is this Execution group SingleThreaded
* \brief Is this Execution group SingleThreaded
*/
bool m_singleThreaded;
/**
* @brief what is the maximum number field of all ReadBufferOperation in this ExecutionGroup.
* @note this is used to construct the MemoryBuffers that will be passed during execution.
* \brief what is the maximum number field of all ReadBufferOperation in this ExecutionGroup.
* \note this is used to construct the MemoryBuffers that will be passed during execution.
*/
unsigned int m_cachedMaxReadBufferOffset;
/**
* @brief a cached vector of all read operations in the execution group.
* \brief a cached vector of all read operations in the execution group.
*/
Operations m_cachedReadOperations;
/**
* @brief reference to the original bNodeTree, this field is only set for the 'top' execution group.
* @note can only be used to call the callbacks for progress, status and break
* \brief reference to the original bNodeTree, this field is only set for the 'top' execution group.
* \note can only be used to call the callbacks for progress, status and break
*/
const bNodeTree *m_bTree;
/**
* @brief total number of chunks that have been calculated for this ExecutionGroup
* \brief total number of chunks that have been calculated for this ExecutionGroup
*/
unsigned int m_chunksFinished;
/**
* @brief the chunkExecutionStates holds per chunk the execution state. this state can be
* \brief the chunkExecutionStates holds per chunk the execution state. this state can be
* - COM_ES_NOT_SCHEDULED: not scheduled
* - COM_ES_SCHEDULED: scheduled
* - COM_ES_EXECUTED: executed
@ -157,92 +157,92 @@ private:
ChunkExecutionState *m_chunkExecutionStates;
/**
* @brief indicator when this ExecutionGroup has valid Operations in its vector for Execution
* @note When building the ExecutionGroup Operations are added via recursion. First a WriteBufferOperations is added, then the
* @note Operation containing the settings that is important for the ExecutiongGroup is added,
* @note When this occurs, these settings are copied over from the node to the ExecutionGroup
* @note and the Initialized flag is set to true.
* @see complex
* @see openCL
* \brief indicator when this ExecutionGroup has valid Operations in its vector for Execution
* \note When building the ExecutionGroup Operations are added via recursion. First a WriteBufferOperations is added, then the
* \note Operation containing the settings that is important for the ExecutiongGroup is added,
* \note When this occurs, these settings are copied over from the node to the ExecutionGroup
* \note and the Initialized flag is set to true.
* \see complex
* \see openCL
*/
bool m_initialized;
/**
* @brief denotes boundary for border compositing
* @note measured in pixel space
* \brief denotes boundary for border compositing
* \note measured in pixel space
*/
rcti m_viewerBorder;
/**
* @brief start time of execution
* \brief start time of execution
*/
double m_executionStartTime;
// methods
/**
* @brief check whether parameter operation can be added to the execution group
* @param operation the operation to be added
* \brief check whether parameter operation can be added to the execution group
* \param operation the operation to be added
*/
bool canContainOperation(NodeOperation *operation);
/**
* @brief calculate the actual chunk size of this execution group.
* @note A chunk size is an unsigned int that is both the height and width of a chunk.
* @note The chunk size will not be stored in the chunkSize field. This needs to be done
* @note by the calling method.
* \brief calculate the actual chunk size of this execution group.
* \note A chunk size is an unsigned int that is both the height and width of a chunk.
* \note The chunk size will not be stored in the chunkSize field. This needs to be done
* \note by the calling method.
*/
unsigned int determineChunkSize();
/**
* @brief Determine the rect (minx, maxx, miny, maxy) of a chunk at a position.
* @note Only gives useful results ater the determination of the chunksize
* @see determineChunkSize()
* \brief Determine the rect (minx, maxx, miny, maxy) of a chunk at a position.
* \note Only gives useful results ater the determination of the chunksize
* \see determineChunkSize()
*/
void determineChunkRect(rcti *rect, const unsigned int xChunk, const unsigned int yChunk) const;
/**
* @brief determine the number of chunks, based on the chunkSize, width and height.
* @note The result are stored in the fields numberOfChunks, numberOfXChunks, numberOfYChunks
* \brief determine the number of chunks, based on the chunkSize, width and height.
* \note The result are stored in the fields numberOfChunks, numberOfXChunks, numberOfYChunks
*/
void determineNumberOfChunks();
/**
* @brief try to schedule a specific chunk.
* @note scheduling succeeds when all input requirements are met and the chunks hasn't been scheduled yet.
* @param graph
* @param xChunk
* @param yChunk
* @return [true:false]
* \brief try to schedule a specific chunk.
* \note scheduling succeeds when all input requirements are met and the chunks hasn't been scheduled yet.
* \param graph
* \param xChunk
* \param yChunk
* \return [true:false]
* true: package(s) are scheduled
* false: scheduling is deferred (depending workpackages are scheduled)
*/
bool scheduleChunkWhenPossible(ExecutionSystem *graph, int xChunk, int yChunk);
/**
* @brief try to schedule a specific area.
* @note Check if a certain area is available, when not available this are will be checked.
* @note This method is called from other ExecutionGroup's.
* @param graph
* @param rect
* @return [true:false]
* \brief try to schedule a specific area.
* \note Check if a certain area is available, when not available this are will be checked.
* \note This method is called from other ExecutionGroup's.
* \param graph
* \param rect
* \return [true:false]
* true: package(s) are scheduled
* false: scheduling is deferred (depending workpackages are scheduled)
*/
bool scheduleAreaWhenPossible(ExecutionSystem *graph, rcti *rect);
/**
* @brief add a chunk to the WorkScheduler.
* @param chunknumber
* \brief add a chunk to the WorkScheduler.
* \param chunknumber
*/
bool scheduleChunk(unsigned int chunkNumber);
/**
* @brief determine the area of interest of a certain input area
* @note This method only evaluates a single ReadBufferOperation
* @param input the input area
* @param readOperation The ReadBufferOperation where the area needs to be evaluated
* @param output the area needed of the ReadBufferOperation. Result
* \brief determine the area of interest of a certain input area
* \note This method only evaluates a single ReadBufferOperation
* \param input the input area
* \param readOperation The ReadBufferOperation where the area needs to be evaluated
* \param output the area needed of the ReadBufferOperation. Result
*/
void determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
@ -253,116 +253,116 @@ public:
// methods
/**
* @brief add an operation to this ExecutionGroup
* @note this method will add input of the operations recursively
* @note this method can create multiple ExecutionGroup's
* @param system
* @param operation
* @return True if the operation was successfully added
* \brief add an operation to this ExecutionGroup
* \note this method will add input of the operations recursively
* \note this method can create multiple ExecutionGroup's
* \param system
* \param operation
* \return True if the operation was successfully added
*/
bool addOperation(NodeOperation *operation);
/**
* @brief is this ExecutionGroup an output ExecutionGroup
* @note An OutputExecution group are groups containing a
* @note ViewerOperation, CompositeOperation, PreviewOperation.
* @see NodeOperation.isOutputOperation
* \brief is this ExecutionGroup an output ExecutionGroup
* \note An OutputExecution group are groups containing a
* \note ViewerOperation, CompositeOperation, PreviewOperation.
* \see NodeOperation.isOutputOperation
*/
const int isOutputExecutionGroup() const { return this->m_isOutput; }
/**
* @brief set whether this ExecutionGroup is an output
* @param isOutput
* \brief set whether this ExecutionGroup is an output
* \param isOutput
*/
void setOutputExecutionGroup(int isOutput) { this->m_isOutput = isOutput; }
/**
* @brief determine the resolution of this ExecutionGroup
* @param resolution
* \brief determine the resolution of this ExecutionGroup
* \param resolution
*/
void determineResolution(unsigned int resolution[2]);
/**
* @brief set the resolution of this executiongroup
* @param resolution
* \brief set the resolution of this executiongroup
* \param resolution
*/
void setResolution(unsigned int resolution[2]) { this->m_width = resolution[0]; this->m_height = resolution[1]; }
/**
* @brief get the width of this execution group
* \brief get the width of this execution group
*/
unsigned int getWidth() const { return m_width; }
/**
* @brief get the height of this execution group
* \brief get the height of this execution group
*/
unsigned int getHeight() const { return m_height; }
/**
* @brief does this ExecutionGroup contains a complex NodeOperation
* \brief does this ExecutionGroup contains a complex NodeOperation
*/
bool isComplex() const { return m_complex; }
/**
* @brief get the output operation of this ExecutionGroup
* @return NodeOperation *output operation
* \brief get the output operation of this ExecutionGroup
* \return NodeOperation *output operation
*/
NodeOperation *getOutputOperation() const;
/**
* @brief compose multiple chunks into a single chunk
* @return Memorybuffer *consolidated chunk
* \brief compose multiple chunks into a single chunk
* \return Memorybuffer *consolidated chunk
*/
MemoryBuffer *constructConsolidatedMemoryBuffer(MemoryProxy *memoryProxy, rcti *output);
/**
* @brief initExecution is called just before the execution of the whole graph will be done.
* @note The implementation will calculate the chunkSize of this execution group.
* \brief initExecution is called just before the execution of the whole graph will be done.
* \note The implementation will calculate the chunkSize of this execution group.
*/
void initExecution();
/**
* @brief get all inputbuffers needed to calculate an chunk
* @note all inputbuffers must be executed
* @param chunkNumber the chunk to be calculated
* @return (MemoryBuffer **) the inputbuffers
* \brief get all inputbuffers needed to calculate an chunk
* \note all inputbuffers must be executed
* \param chunkNumber the chunk to be calculated
* \return (MemoryBuffer **) the inputbuffers
*/
MemoryBuffer **getInputBuffersCPU();
/**
* @brief get all inputbuffers needed to calculate an chunk
* @note all inputbuffers must be executed
* @param chunkNumber the chunk to be calculated
* @return (MemoryBuffer **) the inputbuffers
* \brief get all inputbuffers needed to calculate an chunk
* \note all inputbuffers must be executed
* \param chunkNumber the chunk to be calculated
* \return (MemoryBuffer **) the inputbuffers
*/
MemoryBuffer **getInputBuffersOpenCL(int chunkNumber);
/**
* @brief allocate the outputbuffer of a chunk
* @param chunkNumber the number of the chunk in the ExecutionGroup
* @param rect the rect of that chunk
* @see determineChunkRect
* \brief allocate the outputbuffer of a chunk
* \param chunkNumber the number of the chunk in the ExecutionGroup
* \param rect the rect of that chunk
* \see determineChunkRect
*/
MemoryBuffer *allocateOutputBuffer(int chunkNumber, rcti *rect);
/**
* @brief after a chunk is executed the needed resources can be freed or unlocked.
* @param chunknumber
* @param memorybuffers
* \brief after a chunk is executed the needed resources can be freed or unlocked.
* \param chunknumber
* \param memorybuffers
*/
void finalizeChunkExecution(int chunkNumber, MemoryBuffer **memoryBuffers);
/**
* @brief deinitExecution is called just after execution the whole graph.
* @note It will release all needed resources
* \brief deinitExecution is called just after execution the whole graph.
* \note It will release all needed resources
*/
void deinitExecution();
/**
* @brief schedule an ExecutionGroup
* @note this method will return when all chunks have been calculated, or the execution has breaked (by user)
* \brief schedule an ExecutionGroup
* \note this method will return when all chunks have been calculated, or the execution has breaked (by user)
*
* first the order of the chunks will be determined. This is determined by finding the ViewerOperation and get the relevant information from it.
* - ChunkOrdering
@ -371,43 +371,43 @@ public:
*
* After determining the order of the chunks the chunks will be scheduled
*
* @see ViewerOperation
* @param system
* \see ViewerOperation
* \param system
*/
void execute(ExecutionSystem *system);
/**
* @brief this method determines the MemoryProxy's where this execution group depends on.
* @note After this method determineDependingAreaOfInterest can be called to determine
* @note the area of the MemoryProxy.creator that has to be executed.
* @param memoryProxies result
* \brief this method determines the MemoryProxy's where this execution group depends on.
* \note After this method determineDependingAreaOfInterest can be called to determine
* \note the area of the MemoryProxy.creator that has to be executed.
* \param memoryProxies result
*/
void determineDependingMemoryProxies(vector<MemoryProxy *> *memoryProxies);
/**
* @brief Determine the rect (minx, maxx, miny, maxy) of a chunk.
* @note Only gives useful results ater the determination of the chunksize
* @see determineChunkSize()
* \brief Determine the rect (minx, maxx, miny, maxy) of a chunk.
* \note Only gives useful results ater the determination of the chunksize
* \see determineChunkSize()
*/
void determineChunkRect(rcti *rect, const unsigned int chunkNumber) const;
/**
* @brief can this ExecutionGroup be scheduled on an OpenCLDevice
* @see WorkScheduler.schedule
* \brief can this ExecutionGroup be scheduled on an OpenCLDevice
* \see WorkScheduler.schedule
*/
bool isOpenCL();
void setChunksize(int chunksize) { this->m_chunkSize = chunksize; }
/**
* @brief get the Render priority of this ExecutionGroup
* @see ExecutionSystem.execute
* \brief get the Render priority of this ExecutionGroup
* \see ExecutionSystem.execute
*/
CompositorPriority getRenderPriotrity();
/**
* @brief set border for viewer operation
* @note all the coordinates are assumed to be in normalized space
* \brief set border for viewer operation
* \note all the coordinates are assumed to be in normalized space
*/
void setViewerBorder(float xmin, float xmax, float ymin, float ymax);

View File

@ -33,23 +33,23 @@ class ExecutionGroup;
#include "COM_NodeOperation.h"
/**
* @page execution Execution model
* \page execution Execution model
* In order to get to an efficient model for execution, several steps are being done. these steps are explained below.
*
* @section EM_Step1 Step 1: translating blender node system to the new compsitor system
* \section EM_Step1 Step 1: translating blender node system to the new compsitor system
* Blenders node structure is based on C structs (DNA). These structs are not efficient in the new architecture.
* We want to use classes in order to simplify the system.
* during this step the blender node_tree is evaluated and converted to a CPP node system.
*
* @see ExecutionSystem
* @see Converter.convert
* @see Node
* \see ExecutionSystem
* \see Converter.convert
* \see Node
*
* @section EM_Step2 Step2: translating nodes to operations
* \section EM_Step2 Step2: translating nodes to operations
* Ungrouping the GroupNodes. Group nodes are node_tree's in node_tree's.
* The new system only supports a single level of node_tree. We will 'flatten' the system in a single level.
* @see GroupNode
* @see ExecutionSystemHelper.ungroup
* \see GroupNode
* \see ExecutionSystemHelper.ungroup
*
* Every node has the ability to convert itself to operations. The node itself is responsible to create a correct
* NodeOperation setup based on its internal settings.
@ -59,11 +59,11 @@ class ExecutionGroup;
* based on the selected Mixtype a different operation will be used.
* for more information see the page about creating new Nodes. [@subpage newnode]
*
* @see ExecutionSystem.convertToOperations
* @see Node.convertToOperations
* @see NodeOperation base class for all operations in the system
* \see ExecutionSystem.convertToOperations
* \see Node.convertToOperations
* \see NodeOperation base class for all operations in the system
*
* @section EM_Step3 Step3: add additional conversions to the operation system
* \section EM_Step3 Step3: add additional conversions to the operation system
* - Data type conversions: the system has 3 data types COM_DT_VALUE, COM_DT_VECTOR, COM_DT_COLOR.
* The user can connect a Value socket to a color socket.
* As values are ordered differently than colors a conversion happens.
@ -77,10 +77,10 @@ class ExecutionGroup;
* - [@ref InputSocketResizeMode.COM_SC_STRETCH]: The width and the height of both images are aligned
* - [@ref InputSocketResizeMode.COM_SC_NO_RESIZE]: bottom left of the images are aligned.
*
* @see Converter.convertDataType Datatype conversions
* @see Converter.convertResolution Image size conversions
* \see Converter.convertDataType Datatype conversions
* \see Converter.convertResolution Image size conversions
*
* @section EM_Step4 Step4: group operations in executions groups
* \section EM_Step4 Step4: group operations in executions groups
* ExecutionGroup are groups of operations that are calculated as being one bigger operation.
* All operations will be part of an ExecutionGroup.
* Complex nodes will be added to separate groups. Between ExecutionGroup's the data will be stored in MemoryBuffers.
@ -101,14 +101,14 @@ class ExecutionGroup;
* |cFAA | |cFAA | |cFAA | |cFAA |
* +------+ +------+ +-------+ +-------+
* </pre>
* @see ExecutionSystem.groupOperations method doing this step
* @see ExecutionSystem.addReadWriteBufferOperations
* @see NodeOperation.isComplex
* @see ExecutionGroup class representing the ExecutionGroup
* \see ExecutionSystem.groupOperations method doing this step
* \see ExecutionSystem.addReadWriteBufferOperations
* \see NodeOperation.isComplex
* \see ExecutionGroup class representing the ExecutionGroup
*/
/**
* @brief the ExecutionSystem contains the whole compositor tree.
* \brief the ExecutionSystem contains the whole compositor tree.
*/
class ExecutionSystem {
public:
@ -117,17 +117,17 @@ public:
private:
/**
* @brief the context used during execution
* \brief the context used during execution
*/
CompositorContext m_context;
/**
* @brief vector of operations
* \brief vector of operations
*/
Operations m_operations;
/**
* @brief vector of groups
* \brief vector of groups
*/
Groups m_groups;
@ -144,11 +144,11 @@ private: //methods
public:
/**
* @brief Create a new ExecutionSystem and initialize it with the
* \brief Create a new ExecutionSystem and initialize it with the
* editingtree.
*
* @param editingtree [bNodeTree *]
* @param rendering [true false]
* \param editingtree [bNodeTree *]
* \param rendering [true false]
*/
ExecutionSystem(RenderData *rd, Scene *scene, bNodeTree *editingtree, bool rendering, bool fastcalculation,
const ColorManagedViewSettings *viewSettings, const ColorManagedDisplaySettings *displaySettings,
@ -162,7 +162,7 @@ public:
void set_operations(const Operations &operations, const Groups &groups);
/**
* @brief execute this system
* \brief execute this system
* - initialize the NodeOperation's and ExecutionGroup's
* - schedule the output ExecutionGroup's based on their priority
* - deinitialize the ExecutionGroup's and NodeOperation's
@ -170,7 +170,7 @@ public:
void execute();
/**
* @brief get the reference to the compositor context
* \brief get the reference to the compositor context
*/
const CompositorContext &getContext() const { return this->m_context; }

View File

@ -35,15 +35,15 @@ extern "C" {
}
/**
* @brief state of a memory buffer
* @ingroup Memory
* \brief state of a memory buffer
* \ingroup Memory
*/
typedef enum MemoryBufferState {
/** @brief memory has been allocated on creator device and CPU machine, but kernel has not been executed */
/** \brief memory has been allocated on creator device and CPU machine, but kernel has not been executed */
COM_MB_ALLOCATED = 1,
/** @brief memory is available for use, content has been created */
/** \brief memory is available for use, content has been created */
COM_MB_AVAILABLE = 2,
/** @brief chunk is consolidated from other chunks. special state.*/
/** \brief chunk is consolidated from other chunks. special state.*/
COM_MB_TEMPORARILY = 6
} MemoryBufferState;
@ -56,44 +56,44 @@ typedef enum MemoryBufferExtend {
class MemoryProxy;
/**
* @brief a MemoryBuffer contains access to the data of a chunk
* \brief a MemoryBuffer contains access to the data of a chunk
*/
class MemoryBuffer {
private:
/**
* @brief proxy of the memory (same for all chunks in the same buffer)
* \brief proxy of the memory (same for all chunks in the same buffer)
*/
MemoryProxy *m_memoryProxy;
/**
* @brief the type of buffer COM_DT_VALUE, COM_DT_VECTOR, COM_DT_COLOR
* \brief the type of buffer COM_DT_VALUE, COM_DT_VECTOR, COM_DT_COLOR
*/
DataType m_datatype;
/**
* @brief region of this buffer inside relative to the MemoryProxy
* \brief region of this buffer inside relative to the MemoryProxy
*/
rcti m_rect;
/**
* brief refers to the chunknumber within the executiongroup where related to the MemoryProxy
* @see memoryProxy
* \see memoryProxy
*/
unsigned int m_chunkNumber;
/**
* @brief state of the buffer
* \brief state of the buffer
*/
MemoryBufferState m_state;
/**
* @brief the actual float buffer/data
* \brief the actual float buffer/data
*/
float *m_buffer;
/**
* @brief the number of channels of a single value in the buffer.
* \brief the number of channels of a single value in the buffer.
* For value buffers this is 1, vector 3 and color 4
*/
unsigned int m_num_channels;
@ -103,40 +103,40 @@ private:
public:
/**
* @brief construct new MemoryBuffer for a chunk
* \brief construct new MemoryBuffer for a chunk
*/
MemoryBuffer(MemoryProxy *memoryProxy, unsigned int chunkNumber, rcti *rect);
/**
* @brief construct new temporarily MemoryBuffer for an area
* \brief construct new temporarily MemoryBuffer for an area
*/
MemoryBuffer(MemoryProxy *memoryProxy, rcti *rect);
/**
* @brief construct new temporarily MemoryBuffer for an area
* \brief construct new temporarily MemoryBuffer for an area
*/
MemoryBuffer(DataType datatype, rcti *rect);
/**
* @brief destructor
* \brief destructor
*/
~MemoryBuffer();
/**
* @brief read the ChunkNumber of this MemoryBuffer
* \brief read the ChunkNumber of this MemoryBuffer
*/
unsigned int getChunkNumber() { return this->m_chunkNumber; }
unsigned int get_num_channels() { return this->m_num_channels; }
/**
* @brief get the data of this MemoryBuffer
* @note buffer should already be available in memory
* \brief get the data of this MemoryBuffer
* \note buffer should already be available in memory
*/
float *getBuffer() { return this->m_buffer; }
/**
* @brief after execution the state will be set to available by calling this method
* \brief after execution the state will be set to available by calling this method
*/
void setCreatedState()
{
@ -273,36 +273,36 @@ public:
void readEWA(float *result, const float uv[2], const float derivatives[2][2]);
/**
* @brief is this MemoryBuffer a temporarily buffer (based on an area, not on a chunk)
* \brief is this MemoryBuffer a temporarily buffer (based on an area, not on a chunk)
*/
inline const bool isTemporarily() const { return this->m_state == COM_MB_TEMPORARILY; }
/**
* @brief add the content from otherBuffer to this MemoryBuffer
* @param otherBuffer source buffer
* \brief add the content from otherBuffer to this MemoryBuffer
* \param otherBuffer source buffer
*
* @note take care when running this on a new buffer since it wont fill in
* \note take care when running this on a new buffer since it wont fill in
* uninitialized values in areas where the buffers don't overlap.
*/
void copyContentFrom(MemoryBuffer *otherBuffer);
/**
* @brief get the rect of this MemoryBuffer
* \brief get the rect of this MemoryBuffer
*/
rcti *getRect() { return &this->m_rect; }
/**
* @brief get the width of this MemoryBuffer
* \brief get the width of this MemoryBuffer
*/
int getWidth() const;
/**
* @brief get the height of this MemoryBuffer
* \brief get the height of this MemoryBuffer
*/
int getHeight() const;
/**
* @brief clear the buffer. Make all pixels black transparent.
* \brief clear the buffer. Make all pixels black transparent.
*/
void clear();

View File

@ -31,40 +31,40 @@ class ExecutionGroup;
class WriteBufferOperation;
/**
* @brief A MemoryProxy is a unique identifier for a memory buffer.
* \brief A MemoryProxy is a unique identifier for a memory buffer.
* A single MemoryProxy is used among all chunks of the same buffer,
* the MemoryBuffer only stores the data of a single chunk.
* @ingroup Memory
* \ingroup Memory
*/
class MemoryProxy {
private:
/**
* @brief reference to the ouput operation of the executiongroup
* \brief reference to the ouput operation of the executiongroup
*/
WriteBufferOperation *m_writeBufferOperation;
/**
* @brief reference to the executor. the Execution group that can fill a chunk
* \brief reference to the executor. the Execution group that can fill a chunk
*/
ExecutionGroup *m_executor;
/**
* @brief datatype of this MemoryProxy
* \brief datatype of this MemoryProxy
*/
/* DataType m_datatype; */ /* UNUSED */
/**
* @brief channel information of this buffer
* \brief channel information of this buffer
*/
/* ChannelInfo m_channelInfo[COM_NUMBER_OF_CHANNELS]; */ /* UNUSED */
/**
* @brief the allocated memory
* \brief the allocated memory
*/
MemoryBuffer *m_buffer;
/**
* @brief datatype of this MemoryProxy
* \brief datatype of this MemoryProxy
*/
DataType m_datatype;
@ -72,40 +72,40 @@ public:
MemoryProxy(DataType type);
/**
* @brief set the ExecutionGroup that can be scheduled to calculate a certain chunk.
* @param group the ExecutionGroup to set
* \brief set the ExecutionGroup that can be scheduled to calculate a certain chunk.
* \param group the ExecutionGroup to set
*/
void setExecutor(ExecutionGroup *executor) { this->m_executor = executor; }
/**
* @brief get the ExecutionGroup that can be scheduled to calculate a certain chunk.
* \brief get the ExecutionGroup that can be scheduled to calculate a certain chunk.
*/
ExecutionGroup *getExecutor() { return this->m_executor; }
/**
* @brief set the WriteBufferOperation that is responsible for writing to this MemoryProxy
* @param operation
* \brief set the WriteBufferOperation that is responsible for writing to this MemoryProxy
* \param operation
*/
void setWriteBufferOperation(WriteBufferOperation *operation) { this->m_writeBufferOperation = operation; }
/**
* @brief get the WriteBufferOperation that is responsible for writing to this MemoryProxy
* @return WriteBufferOperation
* \brief get the WriteBufferOperation that is responsible for writing to this MemoryProxy
* \return WriteBufferOperation
*/
WriteBufferOperation *getWriteBufferOperation() { return this->m_writeBufferOperation; }
/**
* @brief allocate memory of size width x height
* \brief allocate memory of size width x height
*/
void allocate(unsigned int width, unsigned int height);
/**
* @brief free the allocated memory
* \brief free the allocated memory
*/
void free();
/**
* @brief get the allocated memory
* \brief get the allocated memory
*/
inline MemoryBuffer *getBuffer() { return this->m_buffer; }

View File

@ -48,43 +48,43 @@ public:
private:
/**
* @brief stores the reference to the SDNA bNode struct
* \brief stores the reference to the SDNA bNode struct
*/
bNodeTree *m_editorNodeTree;
/**
* @brief stores the reference to the SDNA bNode struct
* \brief stores the reference to the SDNA bNode struct
*/
bNode *m_editorNode;
/**
* @brief the list of actual inputsockets @see NodeInput
* \brief the list of actual inputsockets \see NodeInput
*/
Inputs m_inputsockets;
/**
* @brief the list of actual outputsockets @see NodeOutput
* \brief the list of actual outputsockets \see NodeOutput
*/
Outputs m_outputsockets;
/**
* @brief Is this node part of the active group
* \brief Is this node part of the active group
*/
bool m_inActiveGroup;
/**
* @brief Instance key to identify the node in an instance hash table
* \brief Instance key to identify the node in an instance hash table
*/
bNodeInstanceKey m_instanceKey;
protected:
/**
* @brief get access to the vector of input sockets
* \brief get access to the vector of input sockets
*/
const Inputs &getInputSockets() const { return this->m_inputsockets; }
/**
* @brief get access to the vector of input sockets
* \brief get access to the vector of input sockets
*/
const Outputs &getOutputSockets() const { return this->m_outputsockets; }
@ -93,55 +93,55 @@ public:
virtual ~Node();
/**
* @brief get the reference to the SDNA bNode struct
* \brief get the reference to the SDNA bNode struct
*/
bNode *getbNode() const {return m_editorNode;}
/**
* @brief get the reference to the SDNA bNodeTree struct
* \brief get the reference to the SDNA bNodeTree struct
*/
bNodeTree *getbNodeTree() const {return m_editorNodeTree;}
/**
* @brief set the reference to the bNode
* @note used in Node instances to receive the storage/settings and complex node for highlight during execution
* @param bNode
* \brief set the reference to the bNode
* \note used in Node instances to receive the storage/settings and complex node for highlight during execution
* \param bNode
*/
void setbNode(bNode *node) {this->m_editorNode = node;}
/**
* @brief set the reference to the bNodeTree
* @param bNodeTree
* \brief set the reference to the bNodeTree
* \param bNodeTree
*/
void setbNodeTree(bNodeTree *nodetree) {this->m_editorNodeTree = nodetree;}
/**
* @brief Return the number of input sockets of this node.
* \brief Return the number of input sockets of this node.
*/
const unsigned int getNumberOfInputSockets() const { return this->m_inputsockets.size(); }
/**
* @brief Return the number of output sockets of this node.
* \brief Return the number of output sockets of this node.
*/
const unsigned int getNumberOfOutputSockets() const { return this->m_outputsockets.size(); }
/**
* get the reference to a certain outputsocket
* @param index
* \param index
* the index of the needed outputsocket
*/
NodeOutput *getOutputSocket(const unsigned int index) const;
/**
* get the reference to the first outputsocket
* @param index
* \param index
* the index of the needed outputsocket
*/
inline NodeOutput *getOutputSocket() const { return getOutputSocket(0); }
/**
* get the reference to a certain inputsocket
* @param index
* \param index
* the index of the needed inputsocket
*/
NodeInput *getInputSocket(const unsigned int index) const;
@ -152,26 +152,26 @@ public:
bool isInputNode() const { return m_inputsockets.empty(); }
/**
* @brief Is this node in the active group (the group that is being edited)
* @param isInActiveGroup
* \brief Is this node in the active group (the group that is being edited)
* \param isInActiveGroup
*/
void setIsInActiveGroup(bool value) { this->m_inActiveGroup = value; }
/**
* @brief Is this node part of the active group
* \brief Is this node part of the active group
* the active group is the group that is currently being edited. When no group is edited,
* the active group will be the main tree (all nodes that are not part of a group will be active)
* @return bool [false:true]
* \return bool [false:true]
*/
inline bool isInActiveGroup() const { return this->m_inActiveGroup; }
/**
* @brief convert node to operation
* \brief convert node to operation
*
* @todo this must be described further
* \todo this must be described further
*
* @param system the ExecutionSystem where the operations need to be added
* @param context reference to the CompositorContext
* \param system the ExecutionSystem where the operations need to be added
* \param context reference to the CompositorContext
*/
virtual void convertToOperations(NodeConverter &converter, const CompositorContext &context) const = 0;
@ -191,17 +191,17 @@ public:
protected:
/**
* @brief add an NodeInput to the collection of inputsockets
* @note may only be called in an constructor
* @param socket the NodeInput to add
* \brief add an NodeInput to the collection of inputsockets
* \note may only be called in an constructor
* \param socket the NodeInput to add
*/
void addInputSocket(DataType datatype);
void addInputSocket(DataType datatype, bNodeSocket *socket);
/**
* @brief add an NodeOutput to the collection of outputsockets
* @note may only be called in an constructor
* @param socket the NodeOutput to add
* \brief add an NodeOutput to the collection of outputsockets
* \note may only be called in an constructor
* \param socket the NodeOutput to add
*/
void addOutputSocket(DataType datatype);
void addOutputSocket(DataType datatype, bNodeSocket *socket);
@ -212,8 +212,8 @@ protected:
/**
* @brief NodeInput are sockets that can receive data/input
* @ingroup Model
* \brief NodeInput are sockets that can receive data/input
* \ingroup Model
*/
class NodeInput {
private:
@ -223,7 +223,7 @@ private:
DataType m_datatype;
/**
* @brief link connected to this NodeInput.
* \brief link connected to this NodeInput.
* An input socket can only have a single link
*/
NodeOutput *m_link;
@ -246,8 +246,8 @@ public:
/**
* @brief NodeOutput are sockets that can send data/input
* @ingroup Model
* \brief NodeOutput are sockets that can send data/input
* \ingroup Model
*/
class NodeOutput {
private:

View File

@ -176,7 +176,7 @@ NodeOutput *NodeGraph::find_output(const NodeRange &node_range, bNodeSocket *b_s
void NodeGraph::add_bNodeLink(const NodeRange &node_range, bNodeLink *b_nodelink)
{
/// @note: ignore invalid links
/// \note: ignore invalid links
if (!(b_nodelink->flag & NODE_LINK_VALID))
return;
if ((b_nodelink->fromsock->flag & SOCK_UNAVAIL) || (b_nodelink->tosock->flag & SOCK_UNAVAIL))

View File

@ -52,30 +52,30 @@ class NodeOperationInput;
class NodeOperationOutput;
/**
* @brief Resize modes of inputsockets
* \brief Resize modes of inputsockets
* How are the input and working resolutions matched
* @ingroup Model
* \ingroup Model
*/
typedef enum InputResizeMode {
/** @brief Center the input image to the center of the working area of the node, no resizing occurs */
/** \brief Center the input image to the center of the working area of the node, no resizing occurs */
COM_SC_CENTER = NS_CR_CENTER,
/** @brief The bottom left of the input image is the bottom left of the working area of the node, no resizing occurs */
/** \brief The bottom left of the input image is the bottom left of the working area of the node, no resizing occurs */
COM_SC_NO_RESIZE = NS_CR_NONE,
/** @brief Fit the width of the input image to the width of the working area of the node */
/** \brief Fit the width of the input image to the width of the working area of the node */
COM_SC_FIT_WIDTH = NS_CR_FIT_WIDTH,
/** @brief Fit the height of the input image to the height of the working area of the node */
/** \brief Fit the height of the input image to the height of the working area of the node */
COM_SC_FIT_HEIGHT = NS_CR_FIT_HEIGHT,
/** @brief Fit the width or the height of the input image to the width or height of the working area of the node, image will be larger than the working area */
/** \brief Fit the width or the height of the input image to the width or height of the working area of the node, image will be larger than the working area */
COM_SC_FIT = NS_CR_FIT,
/** @brief Fit the width and the height of the input image to the width and height of the working area of the node, image will be equally larger than the working area */
/** \brief Fit the width and the height of the input image to the width and height of the working area of the node, image will be equally larger than the working area */
COM_SC_STRETCH = NS_CR_STRETCH
} InputResizeMode;
/**
* @brief NodeOperation contains calculation logic
* \brief NodeOperation contains calculation logic
*
* Subclasses needs to implement the execution method (defined in SocketReader) to implement logic.
* @ingroup Model
* \ingroup Model
*/
class NodeOperation : public SocketReader {
public:
@ -87,12 +87,12 @@ private:
Outputs m_outputs;
/**
* @brief the index of the input socket that will be used to determine the resolution
* \brief the index of the input socket that will be used to determine the resolution
*/
unsigned int m_resolutionInputSocketIndex;
/**
* @brief is this operation a complex one.
* \brief is this operation a complex one.
*
* Complex operations are typically doing many reads to calculate the output of a single pixel.
* Mostly Filter types (Blurs, Convolution, Defocus etc) need this to be set to true.
@ -100,29 +100,29 @@ private:
bool m_complex;
/**
* @brief can this operation be scheduled on an OpenCL device.
* @note Only applicable if complex is True
* \brief can this operation be scheduled on an OpenCL device.
* \note Only applicable if complex is True
*/
bool m_openCL;
/**
* @brief mutex reference for very special node initializations
* @note only use when you really know what you are doing.
* \brief mutex reference for very special node initializations
* \note only use when you really know what you are doing.
* this mutex is used to share data among chunks in the same operation
* @see TonemapOperation for an example of usage
* @see NodeOperation.initMutex initializes this mutex
* @see NodeOperation.deinitMutex deinitializes this mutex
* @see NodeOperation.getMutex retrieve a pointer to this mutex.
* \see TonemapOperation for an example of usage
* \see NodeOperation.initMutex initializes this mutex
* \see NodeOperation.deinitMutex deinitializes this mutex
* \see NodeOperation.getMutex retrieve a pointer to this mutex.
*/
ThreadMutex m_mutex;
/**
* @brief reference to the editing bNodeTree, used for break and update callback
* \brief reference to the editing bNodeTree, used for break and update callback
*/
const bNodeTree *m_btree;
/**
* @brief set to truth when resolution for this operation is set
* \brief set to truth when resolution for this operation is set
*/
bool m_isResolutionSet;
@ -141,25 +141,25 @@ public:
bool isInputOperation() const { return m_inputs.empty(); }
/**
* @brief determine the resolution of this node
* @note this method will not set the resolution, this is the responsibility of the caller
* @param resolution the result of this operation
* @param preferredResolution the preferable resolution as no resolution could be determined
* \brief determine the resolution of this node
* \note this method will not set the resolution, this is the responsibility of the caller
* \param resolution the result of this operation
* \param preferredResolution the preferable resolution as no resolution could be determined
*/
virtual void determineResolution(unsigned int resolution[2], unsigned int preferredResolution[2]);
/**
* @brief isOutputOperation determines whether this operation is an output of the ExecutionSystem during rendering or editing.
* \brief isOutputOperation determines whether this operation is an output of the ExecutionSystem during rendering or editing.
*
* Default behaviour if not overridden, this operation will not be evaluated as being an output of the ExecutionSystem.
*
* @see ExecutionSystem
* @group check
* @param rendering [true false]
* \see ExecutionSystem
* \group check
* \param rendering [true false]
* true: rendering
* false: editing
*
* @return bool the result of this method
* \return bool the result of this method
*/
virtual bool isOutputOperation(bool /*rendering*/) const { return false; }
@ -169,26 +169,26 @@ public:
virtual void initExecution();
/**
* @brief when a chunk is executed by a CPUDevice, this method is called
* @ingroup execution
* @param rect the rectangle of the chunk (location and size)
* @param chunkNumber the chunkNumber to be calculated
* @param memoryBuffers all input MemoryBuffer's needed
* \brief when a chunk is executed by a CPUDevice, this method is called
* \ingroup execution
* \param rect the rectangle of the chunk (location and size)
* \param chunkNumber the chunkNumber to be calculated
* \param memoryBuffers all input MemoryBuffer's needed
*/
virtual void executeRegion(rcti * /*rect*/,
unsigned int /*chunkNumber*/) {}
/**
* @brief when a chunk is executed by an OpenCLDevice, this method is called
* @ingroup execution
* @note this method is only implemented in WriteBufferOperation
* @param context the OpenCL context
* @param program the OpenCL program containing all compositor kernels
* @param queue the OpenCL command queue of the device the chunk is executed on
* @param rect the rectangle of the chunk (location and size)
* @param chunkNumber the chunkNumber to be calculated
* @param memoryBuffers all input MemoryBuffer's needed
* @param outputBuffer the outputbuffer to write to
* \brief when a chunk is executed by an OpenCLDevice, this method is called
* \ingroup execution
* \note this method is only implemented in WriteBufferOperation
* \param context the OpenCL context
* \param program the OpenCL program containing all compositor kernels
* \param queue the OpenCL command queue of the device the chunk is executed on
* \param rect the rectangle of the chunk (location and size)
* \param chunkNumber the chunkNumber to be calculated
* \param memoryBuffers all input MemoryBuffer's needed
* \param outputBuffer the outputbuffer to write to
*/
virtual void executeOpenCLRegion(OpenCLDevice * /*device*/,
rcti * /*rect*/,
@ -197,16 +197,16 @@ public:
MemoryBuffer * /*outputBuffer*/) {}
/**
* @brief custom handle to add new tasks to the OpenCL command queue in order to execute a chunk on an GPUDevice
* @ingroup execution
* @param context the OpenCL context
* @param program the OpenCL program containing all compositor kernels
* @param queue the OpenCL command queue of the device the chunk is executed on
* @param outputMemoryBuffer the allocated memory buffer in main CPU memory
* @param clOutputBuffer the allocated memory buffer in OpenCLDevice memory
* @param inputMemoryBuffers all input MemoryBuffer's needed
* @param clMemToCleanUp all created cl_mem references must be added to this list. Framework will clean this after execution
* @param clKernelsToCleanUp all created cl_kernel references must be added to this list. Framework will clean this after execution
* \brief custom handle to add new tasks to the OpenCL command queue in order to execute a chunk on an GPUDevice
* \ingroup execution
* \param context the OpenCL context
* \param program the OpenCL program containing all compositor kernels
* \param queue the OpenCL command queue of the device the chunk is executed on
* \param outputMemoryBuffer the allocated memory buffer in main CPU memory
* \param clOutputBuffer the allocated memory buffer in OpenCLDevice memory
* \param inputMemoryBuffers all input MemoryBuffer's needed
* \param clMemToCleanUp all created cl_mem references must be added to this list. Framework will clean this after execution
* \param clKernelsToCleanUp all created cl_kernel references must be added to this list. Framework will clean this after execution
*/
virtual void executeOpenCL(OpenCLDevice * /*device*/,
MemoryBuffer * /*outputMemoryBuffer*/,
@ -221,8 +221,8 @@ public:
}
/**
* @brief set the resolution
* @param resolution the resolution to set
* \brief set the resolution
* \param resolution the resolution to set
*/
void setResolution(unsigned int resolution[2]) {
if (!isResolutionSet()) {
@ -236,7 +236,7 @@ public:
void getConnectedInputSockets(Inputs *sockets);
/**
* @brief is this operation complex
* \brief is this operation complex
*
* Complex operations are typically doing many reads to calculate the output of a single pixel.
* Mostly Filter types (Blurs, Convolution, Defocus etc) need this to be set to true.
@ -246,46 +246,46 @@ public:
virtual bool isSetOperation() const { return false; }
/**
* @brief is this operation of type ReadBufferOperation
* @return [true:false]
* @see ReadBufferOperation
* \brief is this operation of type ReadBufferOperation
* \return [true:false]
* \see ReadBufferOperation
*/
virtual const bool isReadBufferOperation() const { return false; }
/**
* @brief is this operation of type WriteBufferOperation
* @return [true:false]
* @see WriteBufferOperation
* \brief is this operation of type WriteBufferOperation
* \return [true:false]
* \see WriteBufferOperation
*/
virtual const bool isWriteBufferOperation() const { return false; }
/**
* @brief is this operation the active viewer output
* \brief is this operation the active viewer output
* user can select an ViewerNode to be active (the result of this node will be drawn on the backdrop)
* @return [true:false]
* @see BaseViewerOperation
* \return [true:false]
* \see BaseViewerOperation
*/
virtual const bool isActiveViewerOutput() const { return false; }
virtual bool determineDependingAreaOfInterest(rcti *input, ReadBufferOperation *readOperation, rcti *output);
/**
* @brief set the index of the input socket that will determine the resolution of this operation
* @param index the index to set
* \brief set the index of the input socket that will determine the resolution of this operation
* \param index the index to set
*/
void setResolutionInputSocketIndex(unsigned int index);
/**
* @brief get the render priority of this node.
* @note only applicable for output operations like ViewerOperation
* @return CompositorPriority
* \brief get the render priority of this node.
* \note only applicable for output operations like ViewerOperation
* \return CompositorPriority
*/
virtual const CompositorPriority getRenderPriority() const { return COM_PRIORITY_LOW; }
/**
* @brief can this NodeOperation be scheduled on an OpenCLDevice
* @see WorkScheduler.schedule
* @see ExecutionGroup.addOperation
* \brief can this NodeOperation be scheduled on an OpenCLDevice
* \see WorkScheduler.schedule
* \see ExecutionGroup.addOperation
*/
bool isOpenCL() const { return this->m_openCL; }
@ -321,7 +321,7 @@ protected:
void unlockMutex();
/**
* @brief set whether this operation is complex
* \brief set whether this operation is complex
*
* Complex operations are typically doing many reads to calculate the output of a single pixel.
* Mostly Filter types (Blurs, Convolution, Defocus etc) need this to be set to true.
@ -329,7 +329,7 @@ protected:
void setComplex(bool complex) { this->m_complex = complex; }
/**
* @brief set if this NodeOperation can be scheduled on a OpenCLDevice
* \brief set if this NodeOperation can be scheduled on a OpenCLDevice
*/
void setOpenCL(bool openCL) { this->m_openCL = openCL; }
@ -347,7 +347,7 @@ private:
NodeOperation *m_operation;
/** Datatype of this socket. Is used for automatically data transformation.
* @section data-conversion
* \section data-conversion
*/
DataType m_datatype;
@ -385,7 +385,7 @@ private:
NodeOperation *m_operation;
/** Datatype of this socket. Is used for automatically data transformation.
* @section data-conversion
* \section data-conversion
*/
DataType m_datatype;
@ -396,9 +396,9 @@ public:
DataType getDataType() const { return m_datatype; }
/**
* @brief determine the resolution of this data going through this socket
* @param resolution the result of this operation
* @param preferredResolution the preferable resolution as no resolution could be determined
* \brief determine the resolution of this data going through this socket
* \param resolution the result of this operation
* \param preferredResolution the preferable resolution as no resolution could be determined
*/
void determineResolution(unsigned int resolution[2], unsigned int preferredResolution[2]);

View File

@ -33,70 +33,70 @@ class OpenCLDevice;
using std::list;
/**
* @brief device representing an GPU OpenCL device.
* \brief device representing an GPU OpenCL device.
* an instance of this class represents a single cl_device
*/
class OpenCLDevice : public Device {
private:
/**
* @brief opencl context
* \brief opencl context
*/
cl_context m_context;
/**
* @brief opencl device
* \brief opencl device
*/
cl_device_id m_device;
/**
* @brief opencl program
* \brief opencl program
*/
cl_program m_program;
/**
* @brief opencl command queue
* \brief opencl command queue
*/
cl_command_queue m_queue;
/**
* @brief opencl vendor ID
* \brief opencl vendor ID
*/
cl_int m_vendorID;
public:
/**
* @brief constructor with opencl device
* @param context
* @param device
* @param program
* @param vendorID
* \brief constructor with opencl device
* \param context
* \param device
* \param program
* \param vendorID
*/
OpenCLDevice(cl_context context, cl_device_id device, cl_program program, cl_int vendorId);
/**
* @brief initialize the device
* \brief initialize the device
* During initialization the OpenCL cl_command_queue is created
* the command queue is stored in the field queue.
* @see queue
* \see queue
*/
bool initialize();
/**
* @brief deinitialize the device
* \brief deinitialize the device
* During deintiialization the command queue is cleared
*/
void deinitialize();
/**
* @brief execute a WorkPackage
* @param work the WorkPackage to execute
* \brief execute a WorkPackage
* \param work the WorkPackage to execute
*/
void execute(WorkPackage *work);
/**
* @brief determine an image format
* @param memorybuffer
* \brief determine an image format
* \param memorybuffer
*/
static const cl_image_format *determineImageFormat(MemoryBuffer *memoryBuffer);

View File

@ -37,31 +37,31 @@ typedef enum PixelSampler {
class MemoryBuffer;
/**
* @brief Helper class for reading socket data.
* \brief Helper class for reading socket data.
* Only use this class for dispatching (un-ary and n-ary) executions.
* @ingroup Execution
* \ingroup Execution
*/
class SocketReader {
private:
protected:
/**
* @brief Holds the width of the output of this operation.
* \brief Holds the width of the output of this operation.
*/
unsigned int m_width;
/**
* @brief Holds the height of the output of this operation.
* \brief Holds the height of the output of this operation.
*/
unsigned int m_height;
/**
* @brief calculate a single pixel
* @note this method is called for non-complex
* @param result is a float[4] array to store the result
* @param x the x-coordinate of the pixel to calculate in image space
* @param y the y-coordinate of the pixel to calculate in image space
* @param inputBuffers chunks that can be read by their ReadBufferOperation.
* \brief calculate a single pixel
* \note this method is called for non-complex
* \param result is a float[4] array to store the result
* \param x the x-coordinate of the pixel to calculate in image space
* \param y the y-coordinate of the pixel to calculate in image space
* \param inputBuffers chunks that can be read by their ReadBufferOperation.
*/
virtual void executePixelSampled(float /*output*/[4],
float /*x*/,
@ -69,27 +69,27 @@ protected:
PixelSampler /*sampler*/) { }
/**
* @brief calculate a single pixel
* @note this method is called for complex
* @param result is a float[4] array to store the result
* @param x the x-coordinate of the pixel to calculate in image space
* @param y the y-coordinate of the pixel to calculate in image space
* @param inputBuffers chunks that can be read by their ReadBufferOperation.
* @param chunkData chunk specific data a during execution time.
* \brief calculate a single pixel
* \note this method is called for complex
* \param result is a float[4] array to store the result
* \param x the x-coordinate of the pixel to calculate in image space
* \param y the y-coordinate of the pixel to calculate in image space
* \param inputBuffers chunks that can be read by their ReadBufferOperation.
* \param chunkData chunk specific data a during execution time.
*/
virtual void executePixel(float output[4], int x, int y, void * /*chunkData*/) {
executePixelSampled(output, x, y, COM_PS_NEAREST);
}
/**
* @brief calculate a single pixel using an EWA filter
* @note this method is called for complex
* @param result is a float[4] array to store the result
* @param x the x-coordinate of the pixel to calculate in image space
* @param y the y-coordinate of the pixel to calculate in image space
* @param dx
* @param dy
* @param inputBuffers chunks that can be read by their ReadBufferOperation.
* \brief calculate a single pixel using an EWA filter
* \note this method is called for complex
* \param result is a float[4] array to store the result
* \param x the x-coordinate of the pixel to calculate in image space
* \param y the y-coordinate of the pixel to calculate in image space
* \param dx
* \param dy
* \param inputBuffers chunks that can be read by their ReadBufferOperation.
*/
virtual void executePixelFiltered(float /*output*/[4],
float /*x*/, float /*y*/,

View File

@ -28,35 +28,35 @@ class ExecutionGroup;
#include "COM_ExecutionGroup.h"
/**
* @brief contains data about work that can be scheduled
* @see WorkScheduler
* \brief contains data about work that can be scheduled
* \see WorkScheduler
*/
class WorkPackage {
private:
/**
* @brief executionGroup with the operations-setup to be evaluated
* \brief executionGroup with the operations-setup to be evaluated
*/
ExecutionGroup *m_executionGroup;
/**
* @brief number of the chunk to be executed
* \brief number of the chunk to be executed
*/
unsigned int m_chunkNumber;
public:
/**
* constructor
* @param group the ExecutionGroup
* @param chunkNumber the number of the chunk
* \param group the ExecutionGroup
* \param chunkNumber the number of the chunk
*/
WorkPackage(ExecutionGroup *group, unsigned int chunkNumber);
/**
* @brief get the ExecutionGroup
* \brief get the ExecutionGroup
*/
ExecutionGroup *getExecutionGroup() const { return this->m_executionGroup; }
/**
* @brief get the number of the chunk
* \brief get the number of the chunk
*/
unsigned int getChunkNumber() const { return this->m_chunkNumber; }

View File

@ -49,25 +49,25 @@
#endif
/// @brief list of all CPUDevices. for every hardware thread an instance of CPUDevice is created
/// \brief list of all CPUDevices. for every hardware thread an instance of CPUDevice is created
static vector<CPUDevice*> g_cpudevices;
static ThreadLocal(CPUDevice *) g_thread_device;
#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
/// @brief list of all thread for every CPUDevice in cpudevices a thread exists
/// \brief list of all thread for every CPUDevice in cpudevices a thread exists
static ListBase g_cputhreads;
static bool g_cpuInitialized = false;
/// @brief all scheduled work for the cpu
/// \brief all scheduled work for the cpu
static ThreadQueue *g_cpuqueue;
static ThreadQueue *g_gpuqueue;
#ifdef COM_OPENCL_ENABLED
static cl_context g_context;
static cl_program g_program;
/// @brief list of all OpenCLDevices. for every OpenCL GPU device an instance of OpenCLDevice is created
/// \brief list of all OpenCLDevices. for every OpenCL GPU device an instance of OpenCLDevice is created
static vector<OpenCLDevice *> g_gpudevices;
/// @brief list of all thread for every GPUDevice in cpudevices a thread exists
/// \brief list of all thread for every GPUDevice in cpudevices a thread exists
static ListBase g_gputhreads;
/// @brief all scheduled work for the gpu
/// \brief all scheduled work for the gpu
#ifdef COM_OPENCL_ENABLED
static bool g_openclActive = false;
static bool g_openclInitialized = false;

View File

@ -31,43 +31,43 @@ extern "C" {
#include "COM_defines.h"
#include "COM_Device.h"
/** @brief the workscheduler
* @ingroup execution
/** \brief the workscheduler
* \ingroup execution
*/
class WorkScheduler {
#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
/**
* @brief are we being stopped.
* \brief are we being stopped.
*/
static bool isStopping();
/**
* @brief main thread loop for cpudevices
* \brief main thread loop for cpudevices
* inside this loop new work is queried and being executed
*/
static void *thread_execute_cpu(void *data);
/**
* @brief main thread loop for gpudevices
* \brief main thread loop for gpudevices
* inside this loop new work is queried and being executed
*/
static void *thread_execute_gpu(void *data);
#endif
public:
/**
* @brief schedule a chunk of a group to be calculated.
* \brief schedule a chunk of a group to be calculated.
* An execution group schedules a chunk in the WorkScheduler
* when ExecutionGroup.isOpenCL is set the work will be handled by a OpenCLDevice
* otherwise the work is scheduled for an CPUDevice
* @see ExecutionGroup.execute
* @param group the execution group
* @param chunkNumber the number of the chunk in the group to be executed
* \see ExecutionGroup.execute
* \param group the execution group
* \param chunkNumber the number of the chunk in the group to be executed
*/
static void schedule(ExecutionGroup *group, int chunkNumber);
/**
* @brief initialize the WorkScheduler
* \brief initialize the WorkScheduler
*
* during initialization the mutexes are initialized.
* there are two mutexes (for every device type one)
@ -80,36 +80,36 @@ public:
static void initialize(bool use_opencl, int num_cpu_threads);
/**
* @brief deinitialize the WorkScheduler
* \brief deinitialize the WorkScheduler
* free all allocated resources
*/
static void deinitialize();
/**
* @brief Start the execution
* \brief Start the execution
* this methods will start the WorkScheduler. Inside this method all threads are initialized.
* for every device a thread is created.
* @see initialize Initialization and query of the number of devices
* \see initialize Initialization and query of the number of devices
*/
static void start(CompositorContext &context);
/**
* @brief stop the execution
* \brief stop the execution
* All created thread by the start method are destroyed.
* @see start
* \see start
*/
static void stop();
/**
* @brief wait for all work to be completed.
* \brief wait for all work to be completed.
*/
static void finish();
/**
* @brief Are there OpenCL capable GPU devices initialized?
* \brief Are there OpenCL capable GPU devices initialized?
* the result of this method is stored in the CompositorContext
* A node can generate a different operation tree when OpenCLDevices exists.
* @see CompositorContext.getHasActiveOpenCLDevices
* \see CompositorContext.getHasActiveOpenCLDevices
*/
static bool hasGPUDevices();

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief AlphaOverNode
* @ingroup Node
* \brief AlphaOverNode
* \ingroup Node
*/
class AlphaOverNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief BilateralBlurNode
* @ingroup Node
* \brief BilateralBlurNode
* \ingroup Node
*/
class BilateralBlurNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief BlurNode
* @ingroup Node
* \brief BlurNode
* \ingroup Node
*/
class BlurNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief BokehBlurNode
* @ingroup Node
* \brief BokehBlurNode
* \ingroup Node
*/
class BokehBlurNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief BokehImageNode
* @ingroup Node
* \brief BokehImageNode
* \ingroup Node
*/
class BokehImageNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief BoxMaskNode
* @ingroup Node
* \brief BoxMaskNode
* \ingroup Node
*/
class BoxMaskNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief BrightnessNode
* @ingroup Node
* \brief BrightnessNode
* \ingroup Node
*/
class BrightnessNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "COM_Node.h"
/**
* @brief ChannelMatteNode
* @ingroup Node
* \brief ChannelMatteNode
* \ingroup Node
*/
class ChannelMatteNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "COM_Node.h"
/**
* @brief ChromaMatteNode
* @ingroup Node
* \brief ChromaMatteNode
* \ingroup Node
*/
class ChromaMatteNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief ColorBalanceNode
* @ingroup Node
* \brief ColorBalanceNode
* \ingroup Node
*/
class ColorBalanceNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief ColorCorrectionNode
* @ingroup Node
* \brief ColorCorrectionNode
* \ingroup Node
*/
class ColorCorrectionNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief ColorCurveNode
* @ingroup Node
* \brief ColorCurveNode
* \ingroup Node
*/
class ColorCurveNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "COM_Node.h"
/**
* @brief ColorMatteNode
* @ingroup Node
* \brief ColorMatteNode
* \ingroup Node
*/
class ColorMatteNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief ColorNode
* @ingroup Node
* \brief ColorNode
* \ingroup Node
*/
class ColorNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief ColorRampNode
* @ingroup Node
* \brief ColorRampNode
* \ingroup Node
*/
class ColorRampNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief ColorSpillNode
* @ingroup Node
* \brief ColorSpillNode
* \ingroup Node
*/
class ColorSpillNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
#include "DNA_node_types.h"
/**
* @brief ColorToBWNode
* @ingroup Node
* \brief ColorToBWNode
* \ingroup Node
*/
class ColorToBWNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
#include "DNA_node_types.h"
/**
* @brief CompositorNode
* @ingroup Node
* \brief CompositorNode
* \ingroup Node
*/
class CompositorNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "COM_Node.h"
/**
* @brief ConvertAlphaNode
* @ingroup Node
* \brief ConvertAlphaNode
* \ingroup Node
*/
class ConvertAlphaNode : public Node {
public:

View File

@ -29,8 +29,8 @@ extern "C" {
}
/**
* @brief CornerPinNode
* @ingroup Node
* \brief CornerPinNode
* \ingroup Node
*/
class CornerPinNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief CropNode
* @ingroup Node
* \brief CropNode
* \ingroup Node
*/
class CropNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "COM_Node.h"
/**
* @brief CryptomatteNode
* @ingroup Node
* \brief CryptomatteNode
* \ingroup Node
*/
class CryptomatteNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief DefocusNode
* @ingroup Node
* \brief DefocusNode
* \ingroup Node
*/
class DefocusNode : public Node {
public:

View File

@ -24,8 +24,8 @@
#include "COM_Node.h"
/**
* @brief DespeckleNode
* @ingroup Node
* \brief DespeckleNode
* \ingroup Node
*/
class DespeckleNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief DifferenceMatteNode
* @ingroup Node
* \brief DifferenceMatteNode
* \ingroup Node
*/
class DifferenceMatteNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief DilateErodeNode
* @ingroup Node
* \brief DilateErodeNode
* \ingroup Node
*/
class DilateErodeNode : public Node {
NodeBlurData m_alpha_blur; /* only used for blurring alpha, since the dilate/erode node doesnt have this */

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief DirectionalBlurNode
* @ingroup Node
* \brief DirectionalBlurNode
* \ingroup Node
*/
class DirectionalBlurNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "COM_Node.h"
/**
* @brief DisplaceNode
* @ingroup Node
* \brief DisplaceNode
* \ingroup Node
*/
class DisplaceNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "COM_Node.h"
/**
* @brief DistanceMatteNode
* @ingroup Node
* \brief DistanceMatteNode
* \ingroup Node
*/
class DistanceMatteNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief DoubleEdgeMaskNode
* @ingroup Node
* \brief DoubleEdgeMaskNode
* \ingroup Node
*/
class DoubleEdgeMaskNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief EllipseMaskNode
* @ingroup Node
* \brief EllipseMaskNode
* \ingroup Node
*/
class EllipseMaskNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief FilterNode
* @ingroup Node
* \brief FilterNode
* \ingroup Node
*/
class FilterNode : public Node {
public:

View File

@ -36,7 +36,7 @@ void FlipNode::convertToOperations(NodeConverter &converter, const CompositorCon
NodeOutput *outputSocket = this->getOutputSocket(0);
FlipOperation *operation = new FlipOperation();
switch (this->getbNode()->custom1) {
case 0: /// @TODO: I didn't find any constants in the old implementation, should I introduce them.
case 0: /// \TODO: I didn't find any constants in the old implementation, should I introduce them.
operation->setFlipX(true);
operation->setFlipY(false);
break;

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief FlipNode
* @ingroup Node
* \brief FlipNode
* \ingroup Node
*/
class FlipNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief GammaNode
* @ingroup Node
* \brief GammaNode
* \ingroup Node
*/
class GammaNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief GlareNode
* @ingroup Node
* \brief GlareNode
* \ingroup Node
*/
class GlareNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief HueSaturationValueCorrectNode
* @ingroup Node
* \brief HueSaturationValueCorrectNode
* \ingroup Node
*/
class HueSaturationValueCorrectNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief HueSaturationValueNode
* @ingroup Node
* \brief HueSaturationValueNode
* \ingroup Node
*/
class HueSaturationValueNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief IDMaskNode
* @ingroup Node
* \brief IDMaskNode
* \ingroup Node
*/
class IDMaskNode : public Node {
public:

View File

@ -30,8 +30,8 @@ extern "C" {
}
/**
* @brief ImageNode
* @ingroup Node
* \brief ImageNode
* \ingroup Node
*/
class ImageNode : public Node {
private:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief InpaintNode
* @ingroup Node
* \brief InpaintNode
* \ingroup Node
*/
class InpaintNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief InvertNode
* @ingroup Node
* \brief InvertNode
* \ingroup Node
*/
class InvertNode : public Node {
public:

View File

@ -24,8 +24,8 @@
#include "COM_Node.h"
/**
* @brief KeyingNode
* @ingroup Node
* \brief KeyingNode
* \ingroup Node
*/
class KeyingNode : public Node {
protected:

View File

@ -25,8 +25,8 @@
#include "DNA_node_types.h"
/**
* @brief KeyingScreenNode
* @ingroup Node
* \brief KeyingScreenNode
* \ingroup Node
*/
class KeyingScreenNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief LensDistortionNode
* @ingroup Node
* \brief LensDistortionNode
* \ingroup Node
*/
class LensDistortionNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "COM_Node.h"
/**
* @brief LuminanceMatteNode
* @ingroup Node
* \brief LuminanceMatteNode
* \ingroup Node
*/
class LuminanceMatteNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
#include "DNA_node_types.h"
/**
* @brief MapRangeNode
* @ingroup Node
* \brief MapRangeNode
* \ingroup Node
*/
class MapRangeNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "COM_Node.h"
/**
* @brief MapUVNode
* @ingroup Node
* \brief MapUVNode
* \ingroup Node
*/
class MapUVNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
#include "DNA_node_types.h"
/**
* @brief MapValueNode
* @ingroup Node
* \brief MapValueNode
* \ingroup Node
*/
class MapValueNode : public Node {
public:

View File

@ -28,8 +28,8 @@
#include "DNA_node_types.h"
/**
* @brief MaskNode
* @ingroup Node
* \brief MaskNode
* \ingroup Node
*/
class MaskNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief MathNode
* @ingroup Node
* \brief MathNode
* \ingroup Node
*/
class MathNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
#include "DNA_node_types.h"
/**
* @brief MixNode
* @ingroup Node
* \brief MixNode
* \ingroup Node
*/
class MixNode : public Node {
public:

View File

@ -27,8 +27,8 @@
#include "DNA_node_types.h"
/**
* @brief MovieClipNode
* @ingroup Node
* \brief MovieClipNode
* \ingroup Node
*/
class MovieClipNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief MovieDistortionNode
* @ingroup Node
* \brief MovieDistortionNode
* \ingroup Node
*/
class MovieDistortionNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief NormalNode
* @ingroup Node
* \brief NormalNode
* \ingroup Node
*/
class NormalNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "COM_Node.h"
/**
* @brief NormalizeNode
* @ingroup Node
* \brief NormalizeNode
* \ingroup Node
*/
class NormalizeNode : public Node {
public:

View File

@ -28,8 +28,8 @@
#include "DNA_node_types.h"
/**
* @brief OutputFileNode
* @ingroup Node
* \brief OutputFileNode
* \ingroup Node
*/
class OutputFileNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief PixelateNode
* @ingroup Node
* \brief PixelateNode
* \ingroup Node
*/
class PixelateNode : public Node {
public:

View File

@ -27,8 +27,8 @@ extern "C" {
}
/**
* @brief PlaneTrackDeformNode
* @ingroup Node
* \brief PlaneTrackDeformNode
* \ingroup Node
*/
class PlaneTrackDeformNode : public Node {
public:

View File

@ -27,8 +27,8 @@
struct Render;
/**
* @brief RenderLayersNode
* @ingroup Node
* \brief RenderLayersNode
* \ingroup Node
*/
class RenderLayersNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief RotateNode
* @ingroup Node
* \brief RotateNode
* \ingroup Node
*/
class RotateNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief ScaleNode
* @ingroup Node
* \brief ScaleNode
* \ingroup Node
*/
class ScaleNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief SetAlphaNode
* @ingroup Node
* \brief SetAlphaNode
* \ingroup Node
*/
class SetAlphaNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief SocketProxyNode
* @ingroup Node
* \brief SocketProxyNode
* \ingroup Node
*/
class SocketProxyNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
#include "DNA_node_types.h"
/**
* @brief SplitViewerNode
* @ingroup Node
* \brief SplitViewerNode
* \ingroup Node
*/
class SplitViewerNode : public Node {
public:

View File

@ -27,8 +27,8 @@
#include "DNA_node_types.h"
/**
* @brief Stabilize2dNode
* @ingroup Node
* \brief Stabilize2dNode
* \ingroup Node
*/
class Stabilize2dNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "COM_Node.h"
/**
* @brief SunBeamsNode
* @ingroup Node
* \brief SunBeamsNode
* \ingroup Node
*/
class SunBeamsNode : public Node {
public:

View File

@ -27,8 +27,8 @@
#include "COM_NodeOperation.h"
#include "DNA_node_types.h"
/**
* @brief SwitchNode
* @ingroup Node
* \brief SwitchNode
* \ingroup Node
*/
class SwitchNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_NodeOperation.h"
#include "DNA_node_types.h"
/**
* @brief SwitchViewNode
* @ingroup Node
* \brief SwitchViewNode
* \ingroup Node
*/
class SwitchViewNode : public Node {
public:

View File

@ -24,8 +24,8 @@
#include "DNA_node_types.h"
/**
* @brief TextureNode
* @ingroup Node
* \brief TextureNode
* \ingroup Node
*/
class TextureNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief TimeNode
* @ingroup Node
* \brief TimeNode
* \ingroup Node
*/
class TimeNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief TonemapNode
* @ingroup Node
* \brief TonemapNode
* \ingroup Node
*/
class TonemapNode : public Node {
public:

View File

@ -25,8 +25,8 @@
#include "DNA_node_types.h"
/**
* @brief TrackPositionNode
* @ingroup Node
* \brief TrackPositionNode
* \ingroup Node
*/
class TrackPositionNode : public Node {
public:

View File

@ -27,8 +27,8 @@
#include "DNA_node_types.h"
/**
* @brief TransformNode
* @ingroup Node
* \brief TransformNode
* \ingroup Node
*/
class TransformNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief TranslateNode
* @ingroup Node
* \brief TranslateNode
* \ingroup Node
*/
class TranslateNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief ValueNode
* @ingroup Node
* \brief ValueNode
* \ingroup Node
*/
class ValueNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief VectorBlurNode
* @ingroup Node
* \brief VectorBlurNode
* \ingroup Node
*/
class VectorBlurNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief VectorCurveNode
* @ingroup Node
* \brief VectorCurveNode
* \ingroup Node
*/
class VectorCurveNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief ViewLevelsNode
* @ingroup Node
* \brief ViewLevelsNode
* \ingroup Node
*/
class ViewLevelsNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
#include "DNA_node_types.h"
/**
* @brief ViewerNode
* @ingroup Node
* \brief ViewerNode
* \ingroup Node
*/
class ViewerNode : public Node {
public:

View File

@ -26,8 +26,8 @@
#include "COM_Node.h"
/**
* @brief ZCombineNode
* @ingroup Node
* \brief ZCombineNode
* \ingroup Node
*/
class ZCombineNode : public Node {
public:

Some files were not shown because too many files have changed in this diff Show More