ai_procedural.h
Go to the documentation of this file.
1// Copyright 2021 Autodesk, Inc. All rights reserved.
2//
3// Use of this software is subject to the terms of the Autodesk license
4// agreement provided at the time of installation or download, or which
5// otherwise accompanies this software in either electronic or hard copy form.
6
12#pragma once
13#include "ai_map.h"
14#include "ai_version.h"
15#ifdef AI_CPU_COMPILER
16
17// forward declaration
18struct AtBBox;
19struct AtNode;
20class AtUniverse;
21
62typedef int (*AtProcInit)(AtNode* node, void** user_ptr);
63
78typedef int (*AtProcCleanup)(const AtNode* node, void* user_ptr);
79
96typedef int (*AtProcNumNodes)(const AtNode* node, void* user_ptr);
97
116typedef AtNode* (*AtProcGetNode)(const AtNode* node, void* user_ptr, int i);
117
122{
123 AI_PROC_BOXES = 0,
124 AI_PROC_POINTS,
125 AI_PROC_POLYGONS,
126};
127
154typedef int (*AtProcViewport)(const AtNode* node, AtUniverse* universe, AtProcViewportMode mode, const AtParamValueMap* params);
155
162};
163
172typedef int (*AtProcFuncPtr)(AtProceduralNodeMethods* methods);
173
175#define AI_PROCEDURAL_NODE_EXPORT_METHODS(tag) \
176AI_INSTANCE_COMMON_SHAPE_METHODS \
177procedural_init; \
178procedural_cleanup; \
179procedural_num_nodes; \
180procedural_get_node; \
181static AtProceduralNodeMethods ai_proc_mtds = { \
182 ProceduralInit, \
183 ProceduralCleanup, \
184 ProceduralNumNodes, \
185 ProceduralGetNode, \
186 NULL, \
187}; \
188static AtNodeMethods ai_node_mtds = { \
189 &ai_common_mtds, \
190 &ai_proc_mtds \
191}; \
192const AtNodeMethods* tag = &ai_node_mtds;
193
194#define procedural_init \
195static int ProceduralInit(AtNode* node, void** user_ptr)
196
197#define procedural_cleanup \
198static int ProceduralCleanup(const AtNode* node, void* user_ptr)
199
200#define procedural_num_nodes \
201static int ProceduralNumNodes(const AtNode* node, void* user_ptr)
202
203#define procedural_get_node \
204static AtNode* ProceduralGetNode(const AtNode* node, void* user_ptr, int i)
205
206#define procedural_update \
207static void Update(AtRenderSession* render_session, AtNode* node); \
208AI_OPTIONAL_METHOD_INSTALL(ai_common_mtds, Update) \
209static void Update(AtRenderSession* render_session, AtNode* node)
210
211#define procedural_finish \
212static void Finish(AtNode* node); \
213AI_OPTIONAL_METHOD_INSTALL(ai_common_mtds, Finish) \
214static void Finish(AtNode* node)
215
216#define procedural_viewport \
217static int ProceduralViewport(const AtNode* node, AtUniverse* universe, AtProcViewportMode mode, const AtParamValueMap* params); \
218AI_OPTIONAL_METHOD_INSTALL(ai_proc_mtds, ProceduralViewport) \
219static int ProceduralViewport(const AtNode* node, AtUniverse* universe, AtProcViewportMode mode, const AtParamValueMap* params)
220
262AI_API int AiProceduralViewport(const AtNode* node, AtUniverse* universe, AtProcViewportMode mode = AI_PROC_BOXES, const AtParamValueMap* params = NULL);
263
264/*\}*/
265#endif // AI_CPU_COMPILER
Key/Value storage.
Version number information and checking of backwards-compatibility.
AtProcViewport ProceduralViewport
This is called to get a viewport representation of the given procedural node.
Definition: ai_procedural.h:161
int(* AtProcNumNodes)(const AtNode *node, void *user_ptr)
Procedural node count method.
Definition: ai_procedural.h:96
AtProcViewportMode
Enum with the different modes available for a procedural viewport representation.
Definition: ai_procedural.h:122
int(* AtProcCleanup)(const AtNode *node, void *user_ptr)
Procedural cleanup method.
Definition: ai_procedural.h:78
AtProcCleanup Cleanup
This is called last and should clean up any (temporary) memory used by the procedural.
Definition: ai_procedural.h:158
int(* AtProcViewport)(const AtNode *node, AtUniverse *universe, AtProcViewportMode mode, const AtParamValueMap *params)
Procedural viewport representation method.
Definition: ai_procedural.h:154
int(* AtProcFuncPtr)(AtProceduralNodeMethods *methods)
Procedural function pointer entry-point symbol.
Definition: ai_procedural.h:172
AtNode *(* AtProcGetNode)(const AtNode *node, void *user_ptr, int i)
Procedural node fetching method.
Definition: ai_procedural.h:116
AI_API int AiProceduralViewport(const AtNode *node, AtUniverse *universe, AtProcViewportMode mode=AI_PROC_BOXES, const AtParamValueMap *params=NULL)
Procedural viewport representation method.
Definition: ai_procedural.cpp:6
AtProcInit Init
This is called before expanding the procedural.
Definition: ai_procedural.h:157
AtProcNumNodes NumNodes
This is called to find out how many nodes this procedural will generate.
Definition: ai_procedural.h:159
int(* AtProcInit)(AtNode *node, void **user_ptr)
Procedural init method.
Definition: ai_procedural.h:62
AtProcGetNode GetNode
This is called NumNodes times, once for each node the procedural creates.
Definition: ai_procedural.h:160
3D axis-aligned bounding box (uses single-precision)
Definition: ai_bbox.h:33
This represents a node in Arnold.
Definition: ai_procedural.h:156
This represents a universe in Arnold.

© 2022 Autodesk, Inc. · All rights reserved · www.arnoldrenderer.com