Vaiva Kazanaviciute
play_w_madness
About Me
EXPERTISE
VFX Artist
INDUSTRY
Film/TV
Houdini Skills
ADVANCED
Digital Assets | Pyro FX | VEX | Python
INTERMEDIATE
Procedural Modeling | Solaris | Mantra | Karma | Fluids | Destruction FX | PDG
BEGINNER
Realtime FX
Availability
Not Specified
Recent Forum Posts
Pink lines in viewport July 1, 2024, 12:37 p.m.
On the button strip to the right of the viewport there's a "display primitive normals" toggle
Need help with improving this flip simulation June 28, 2024, 1:08 p.m.
Looks like container boundaries, it's too shallow and there's not enough padding above the water level
What is the data storage method of Houdini Opencl? June 15, 2024, 2:50 p.m.
From https://www.sidefx.com/docs/hdk/_s_i_m___geometry_8h_source.html [www.sidefx.com] :
From https://www.sidefx.com/docs/hdk/_g_a___c_e_attribute_8h_source.html [www.sidefx.com] :
So, I imagine a correct way of obtaining a handle to a GPU buffer would be to obtain GA_CEAttribute ptr from SIM_Geometry
that you get from SIM_Object
that you get from GAS_SubSolver::solveGasSubclass override in your solver class.
And judging by SIM_Geometry public interface, I think it's not going to alloc/build a new buffer for attrib if there already exists one and it wasn't flushed
/// Attempt to build a GPU-backed attribute from our geometry. /// Returns 0 on failure. /// You do not own the resulting GA_CEAttribute. GA_CEAttribute* SIM_Geometry::getReadableCEAttribute(GA_AttributeOwner owner, const UT_StringRef &aname, GA_StorageClass storage, int &tuplesize, bool isarray, bool docopy) const { return getReadableCEAttributePrec(owner, aname, storage, GA_PRECISION_32, tuplesize, isarray, docopy); } virtual GA_CEAttribute* SIM_Geometry::getReadableCEAttributePrec(GA_AttributeOwner owner, const UT_StringRef &aname, GA_StorageClass storage, GA_Precision prec, int &tuplesize, bool isarray, bool docopy) const;
From https://www.sidefx.com/docs/hdk/_g_a___c_e_attribute_8h_source.html [www.sidefx.com] :
cl::Buffer GA_CEAttribute::buffer() const { return myBuffer; } cl::Buffer GA_CEAttribute::indexBuffer() const { return myIndexBuffer; }
So, I imagine a correct way of obtaining a handle to a GPU buffer would be to obtain GA_CEAttribute ptr from SIM_Geometry
that you get from SIM_Object
that you get from GAS_SubSolver::solveGasSubclass override in your solver class.
And judging by SIM_Geometry public interface, I think it's not going to alloc/build a new buffer for attrib if there already exists one and it wasn't flushed