ai_drivers.h
1 /*
2  * Arnold API header file
3  * Copyright (c) 1998-2009 Marcos Fajardo, (c) 2009-2013 Solid Angle SL
4  */
5 
11 #pragma once
12 #include <ai_nodes.h>
13 #include <ai_api.h>
14 #include <ai_bbox.h>
15 #include <ai_types.h>
16 
17 // forward declaration
18 struct AtOutputIterator;
19 struct AtAOVSampleIterator;
20 
42 typedef struct AtDriverNodeMethods {
43  bool (*DriverSupportsPixelType)(const AtNode*, AtByte);
44  const char** (*DriverExtension)();
45  void (*DriverOpen)(AtNode*, struct AtOutputIterator*, AtBBox2, AtBBox2, int);
46  bool (*DriverNeedsBucket)(AtNode*, int, int, int, int, int);
47  void (*DriverPrepareBucket)(AtNode*, int, int, int, int, int);
48  void (*DriverProcessBucket)(AtNode*, struct AtOutputIterator*, struct AtAOVSampleIterator*, int, int, int, int, int);
49  void (*DriverWriteBucket)(AtNode*, struct AtOutputIterator*, struct AtAOVSampleIterator*, int, int, int, int);
50  void (*DriverClose)(AtNode*, struct AtOutputIterator*);
52 
54 #define AI_DRIVER_NODE_EXPORT_METHODS(tag) \
55 AI_INSTANCE_COMMON_METHODS \
56 driver_supports_pixel_type; \
57 driver_extension; \
58 driver_open; \
59 driver_needs_bucket; \
60 driver_prepare_bucket; \
61 driver_process_bucket; \
62 driver_write_bucket; \
63 driver_close; \
64 static AtDriverNodeMethods ai_driver_mtds = { \
65  DriverSupportsPixelType, \
66  DriverExtension, \
67  DriverOpen, \
68  DriverNeedsBucket, \
69  DriverPrepareBucket, \
70  DriverProcessBucket, \
71  DriverWriteBucket, \
72  DriverClose, \
73 }; \
74 static AtNodeMethods ai_node_mtds = { \
75  &ai_common_mtds, \
76  &ai_driver_mtds \
77 }; \
78 AtNodeMethods *tag = &ai_node_mtds;
79 
92 #define driver_supports_pixel_type \
93 static bool DriverSupportsPixelType(const AtNode* node, AtByte pixel_type)
94 
101 #define driver_extension \
102 static const char** DriverExtension()
103 
116 #define driver_open \
117 static void DriverOpen(AtNode* node, struct AtOutputIterator* iterator, AtBBox2 display_window, AtBBox2 data_window, int bucket_size)
118 
134 #define driver_needs_bucket \
135 static bool DriverNeedsBucket(AtNode* node, int bucket_xo, int bucket_yo, int bucket_size_x, int bucket_size_y, int tid)
136 
153 #define driver_prepare_bucket \
154 static void DriverPrepareBucket(AtNode* node, int bucket_xo, int bucket_yo, int bucket_size_x, int bucket_size_y, int tid)
155 
174 #define driver_process_bucket \
175 static void DriverProcessBucket(AtNode* node, struct AtOutputIterator* iterator, struct AtAOVSampleIterator* sample_iterator, int bucket_xo, int bucket_yo, int bucket_size_x, int bucket_size_y, int tid)
176 
193 #define driver_write_bucket \
194 static void DriverWriteBucket(AtNode* node, struct AtOutputIterator* iterator, struct AtAOVSampleIterator* sample_iterator, int bucket_xo, int bucket_yo, int bucket_size_x, int bucket_size_y)
195 
204 #define driver_close \
205 static void DriverClose(AtNode* node, struct AtOutputIterator* iterator)
206 /* \}*/
207 
213 AI_API void AiDriverInitialize(AtNode* node, bool supports_multiple_outputs, void* data);
214 AI_API void AiRawDriverInitialize(AtNode* node, const char** required_aovs, bool requires_depth, void* data);
215 AI_API void AiDriverDestroy(AtNode* node);
216 AI_API void* AiDriverGetLocalData(const AtNode* node);
217 AI_API void AiDriverGetMatrices(AtMatrix world_to_camera, AtMatrix world_to_screen);
218 AI_API const char** AiDriverExtension(const AtNodeEntry* node_entry);
219 
220 AI_API bool AiOutputIteratorGetNext(struct AtOutputIterator* iter, const char** output_name, int* pixel_type, const void** bucket_data);
221 AI_API void AiOutputIteratorReset(struct AtOutputIterator* iter);
222 
223 AI_API const AtNodeEntry* AiFindDriverType(const char* extension);
224 
225 /* \}*/
226 
227 /*\}*/

© 2009-2013 Solid Angle SL · all rights reserved · www.solidangle.com