OpenSubdiv.OPENSUBDIV_VERSION.Bfr
OpenSubdiv.OPENSUBDIV_VERSION.Far
OpenSubdiv.OPENSUBDIV_VERSION.Osd
OpenSubdiv.OPENSUBDIV_VERSION.Sdc
OpenSubdiv.OPENSUBDIV_VERSION.Vtr

OpenSubdiv.OPENSUBDIV_VERSION.Bfr.SurfaceFactoryCacheThreaded

SurfaceFactoryCacheThreaded是OpenSubdiv库中的一个类,用于管理三角形网格曲面的工厂缓存,以支持高性能多线程处理。它可以在多个线程之间共享曲面数据,并在需要时更新缓存。以下是该类的一些常用方法和属性:

方法:

GetSurfaceFactory() -> Bfr.SurfaceFactory

返回一个SurfaceFactory对象,该对象可以用于创建和管理网格曲面。

Clear()

清除缓存中的所有曲面数据。该方法通常用于释放内存或在清除现有曲面数据后重新加载。

SetLimitMemory(limits: int)

设置缓存中可存储的最大内存量。如果超出该限制,较早的数据将被自动删除。该方法可用于优化缓存性能和占用内存。

SetIsFrozen(freeze: bool)

冻结或解除冻结缓存。该方法通常用于在对缓存进行读取或写入操作时防止其他线程对其进行修改或访问。

SetVertexLimit(limit: int)

设置缓存中每个曲面可包含的最大顶点数量。该方法通常用于控制曲面数据的复杂度和细节级别。

SetPatchTableFactory(f: Bfr.PatchTableFactory)

设置PatchTable对象的工厂。该对象用于创建和解析三角形网格的细分补丁。

Update(nfaces: int, ptr: void, rash: int)

更新缓存中的曲面数据。该方法接受三个参数:

  • nfaces: int:曲面的总面数。
  • ptr: void:一个指向顶点数据的指针。
  • rash: int:顶点数据的总字节数。

属性:

face_factory

一个SurfaceFactory对象,用于创建和管理网格曲面。

max_memory_mb

缓存中可存储的最大内存量(以兆字节为单位)。

is_frozen

一个布尔值,指示缓存是否被冻结。

max_verts_per_face

缓存中每个曲面可包含的最大顶点数量。

patchtable_factory

一个PatchTable对象的工厂,用于创建和解析三角形网格的细分补丁。

示例代码:

import OpenSubdiv

# 创建一个SurfaceFactoryCacheThreaded对象
cache = OpenSubdiv.OPENSUBDIV_VERSION.Bfr.SurfaceFactoryCacheThreaded()

# 获取一个SurfaceFactory对象
factory = cache.GetSurfaceFactory()

# 从顶点数据创建一个新的曲面
nfaces = 10
verts = [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0]
rash = len(verts) * 4
surface = factory.Create(nfaces, verts, rash)

# 将曲面添加到缓存中
cache.Update(nfaces, verts, rash)

# 从缓存中取回曲面数据
cached_surface = factory.Create(nfaces)

# 清除缓存
cache.Clear()

该示例演示了如何使用SurfaceFactoryCacheThreaded类来创建、存储和检索曲面数据。在此示例中,我们使用SurfaceFactory对象创建一个名为surface的新曲面,并使用Update方法将其添加到缓存中。我们随后从缓存中取回曲面数据,并使用Clear方法清除缓存。