ai_filters.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_vector.h"
14 #include "ai_types.h"
15 
16 // forward declaration
17 struct AtAOVSampleIterator;
18 
36 typedef struct AtFilterNodeMethods {
37  AtByte (*FilterOutputType)(const AtNode*, const AtParamValue*, AtByte);
38  void (*FilterPixel)(AtNode*, AtParamValue*, AtAOVSampleIterator*, void*, AtByte);
40 
42 #define AI_FILTER_NODE_EXPORT_METHODS(tag) \
43 AI_INSTANCE_COMMON_METHODS \
44 filter_output_type; \
45 filter_pixel; \
46 static AtFilterNodeMethods ai_filter_mtds = { \
47  FilterOutputType, \
48  FilterPixel \
49 }; \
50 static AtNodeMethods ai_node_mtds = { \
51  &ai_common_mtds, \
52  &ai_filter_mtds \
53 }; \
54 AtNodeMethods *tag = &ai_node_mtds;
55 
76 #define filter_output_type \
77 static AtByte FilterOutputType(const AtNode* node, const AtParamValue* params, AtByte input_type)
78 
93 #define filter_pixel \
94 static void FilterPixel(AtNode* node, AtParamValue* params, AtAOVSampleIterator* iterator, void* data_out, AtByte data_type)
95 
96 /* \}*/
97 
102 AI_API void AiFilterInitialize(AtNode* node, bool requires_depth, const char** required_aovs, void* data);
103 AI_API void AiFilterUpdate(AtNode* node, float width);
104 AI_API void AiFilterDestroy(AtNode* node);
105 AI_API void* AiFilterGetLocalData(const AtNode *node);
106 /* \}*/
107 
112 AI_API void AiAOVSampleIteratorInitPixel(AtAOVSampleIterator* iter, int x, int y);
113 AI_API void AiAOVSampleIteratorReset(AtAOVSampleIterator* iter);
114 AI_API bool AiAOVSampleIteratorGetNext(AtAOVSampleIterator* iter);
115 AI_API bool AiAOVSampleIteratorGetNextDepth(AtAOVSampleIterator* iter);
116 AI_API AtPoint2 AiAOVSampleIteratorGetOffset(const AtAOVSampleIterator* iter);
117 AI_API float AiAOVSampleIteratorGetInvDensity(const AtAOVSampleIterator* iter);
118 AI_API int AiAOVSampleIteratorGetDepth(const AtAOVSampleIterator* iter);
119 AI_API bool AiAOVSampleIteratorHasValue(const AtAOVSampleIterator* iter);
120 AI_API bool AiAOVSampleIteratorHasAOVValue(const AtAOVSampleIterator* iter, const char* name, AtByte type);
121 /* \}*/
122 
127 AI_API bool AiAOVSampleIteratorGetBool(const AtAOVSampleIterator* iter);
128 AI_API int AiAOVSampleIteratorGetInt (const AtAOVSampleIterator* iter);
129 AI_API float AiAOVSampleIteratorGetFlt (const AtAOVSampleIterator* iter);
130 AI_API AtRGB AiAOVSampleIteratorGetRGB (const AtAOVSampleIterator* iter);
131 AI_API AtRGBA AiAOVSampleIteratorGetRGBA(const AtAOVSampleIterator* iter);
132 AI_API AtVector AiAOVSampleIteratorGetVec (const AtAOVSampleIterator* iter);
133 AI_API AtPoint AiAOVSampleIteratorGetPnt (const AtAOVSampleIterator* iter);
134 AI_API AtPoint2 AiAOVSampleIteratorGetPnt2(const AtAOVSampleIterator* iter);
135 AI_API const void* AiAOVSampleIteratorGetPtr (const AtAOVSampleIterator* iter);
136 /* \}*/
137 
142 AI_API bool AiAOVSampleIteratorGetAOVBool(const AtAOVSampleIterator* iter, const char* name);
143 AI_API int AiAOVSampleIteratorGetAOVInt (const AtAOVSampleIterator* iter, const char* name);
144 AI_API float AiAOVSampleIteratorGetAOVFlt (const AtAOVSampleIterator* iter, const char* name);
145 AI_API AtRGB AiAOVSampleIteratorGetAOVRGB (const AtAOVSampleIterator* iter, const char* name);
146 AI_API AtRGBA AiAOVSampleIteratorGetAOVRGBA(const AtAOVSampleIterator* iter, const char* name);
147 AI_API AtVector AiAOVSampleIteratorGetAOVVec (const AtAOVSampleIterator* iter, const char* name);
148 AI_API AtPoint AiAOVSampleIteratorGetAOVPnt (const AtAOVSampleIterator* iter, const char* name);
149 AI_API AtPoint2 AiAOVSampleIteratorGetAOVPnt2(const AtAOVSampleIterator* iter, const char* name);
150 AI_API const void* AiAOVSampleIteratorGetAOVPtr (const AtAOVSampleIterator* iter, const char* name);
151 /* \}*/
152 
153 /*\}*/

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