OpenVDB
9.0.1
|
.c
files.openvdb::ax::ast
) and can be used by clients for more granular control and modifications to an AST. Importantly, the AST API contains the openvdb::ax::ast::parse() method, which invokes the C/C++ functions built by the grammar to iteratively construct an AST from a provided character string. PointDataGrids
. They are not expected to be created directly; instead these objects are returned by the AX Compiler depending on the selected Compiler::compile() function. VolumeExecutable
which stops it working on PointDataGrids
but it's not particular useful in it's current form and can be confusing so it is explicitly disallowed. execute
methods. When we talk about the thread safety of these classes we are referring to the invocation of their execution method with the same argument data by multiple threads, not how many threads the executables themselves use (which can be configured by the grainSize()
setting). Importantly, for a given VDB grid or VDB Points attribute "foo":execute()
. Any attempt to modify the data whilst executables attempt to access it will result in undefined behaviour.nullptr
on failure. It is guaranteed to never throw a code generation runtime error and expects the caller to either query or setup the state of the logger to handle warnings and errors. The latter internally creates a default logger which swallows warnings and prints all possible errors to std::cerr
. Note that the latter will throw a runtime error on failure and is thus guaranteed to never return a nullptr
. openvdb::math::Mat
types that exist in OpenVDB library - however, historically, these types are not "registered Grid types" by default by OpenVDB. This means that, although you could theoretically create an openvdb::Mat3dGrid
OpenVDB may not support the reading or writing of these grid types out the box. Whilst this may change in the future, there may exist other examples of types in AX which suffer from the same limitation of existing geometry types in OpenVDB. bool@myattr
) requires both the AX compiler and the underlying geometry to support the given type. As mentioned above, there may be times where this isn't the case. Consider the following: int32
values is not supported for serialization of OpenVDB points or volumes (we assume the type can at least be instantiated). Whilst this code may execute, serializing this data to disk may fail due to unregistered OpenVDB types. AX does not register any additional OpenVDB types. This choice is left to downstream software. In this example, to allow for serialization of vec4
types, some variant of the following can be implemented in your application.