[Bf-blender-cvs] [c818bd10fe0] new-object-types: Merge branch 'master' into new-object-types

Brecht Van Lommel noreply at git.blender.org
Mon Mar 16 11:29:41 CET 2020


Commit: c818bd10fe08edafeb014da11a6e35a02b886d62
Author: Brecht Van Lommel
Date:   Mon Mar 16 11:23:57 2020 +0100
Branches: new-object-types
https://developer.blender.org/rBc818bd10fe08edafeb014da11a6e35a02b886d62

Merge branch 'master' into new-object-types

===================================================================



===================================================================

diff --cc intern/cycles/render/image_vdb.cpp
index f61a73d9d1d,00000000000..e4282b14cb2
mode 100644,000000..100644
--- a/intern/cycles/render/image_vdb.cpp
+++ b/intern/cycles/render/image_vdb.cpp
@@@ -1,179 -1,0 +1,176 @@@
 +/*
 + * Copyright 2011-2020 Blender Foundation
 + *
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + * http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +#include "render/image_vdb.h"
 +
 +#ifdef WITH_OPENVDB
 +#  include <openvdb/openvdb.h>
 +#  include <openvdb/tools/Dense.h>
 +#endif
 +
 +CCL_NAMESPACE_BEGIN
 +
 +VDBImageLoader::VDBImageLoader(const string &grid_name) : grid_name(grid_name)
 +{
 +}
 +
 +VDBImageLoader::~VDBImageLoader()
 +{
 +}
 +
 +bool VDBImageLoader::load_metadata(ImageMetaData &metadata)
 +{
 +#ifdef WITH_OPENVDB
 +  if (!grid) {
 +    return false;
 +  }
 +
 +  bbox = grid->evalActiveVoxelBoundingBox();
 +  if (bbox.empty()) {
 +    return false;
 +  }
 +
 +  /* Set dimensions. */
 +  openvdb::Coord dim = bbox.dim();
 +  openvdb::Coord min = bbox.min();
 +  metadata.width = dim.x();
 +  metadata.height = dim.y();
 +  metadata.depth = dim.z();
 +
 +  /* Set data type. */
 +  if (grid->isType<openvdb::FloatGrid>()) {
 +    metadata.channels = 1;
 +  }
 +  else if (grid->isType<openvdb::Vec3fGrid>()) {
 +    metadata.channels = 3;
 +  }
 +  else if (grid->isType<openvdb::BoolGrid>()) {
 +    metadata.channels = 1;
 +  }
 +  else if (grid->isType<openvdb::DoubleGrid>()) {
 +    metadata.channels = 1;
 +  }
 +  else if (grid->isType<openvdb::Int32Grid>()) {
 +    metadata.channels = 1;
 +  }
 +  else if (grid->isType<openvdb::Int64Grid>()) {
 +    metadata.channels = 1;
 +  }
 +  else if (grid->isType<openvdb::Vec3IGrid>()) {
 +    metadata.channels = 3;
 +  }
 +  else if (grid->isType<openvdb::Vec3dGrid>()) {
 +    metadata.channels = 3;
 +  }
 +  else if (grid->isType<openvdb::MaskGrid>()) {
 +    metadata.channels = 1;
 +  }
 +  else {
 +    return false;
 +  }
 +
 +  if (metadata.channels == 1) {
 +    metadata.type = IMAGE_DATA_TYPE_FLOAT;
 +  }
 +  else {
 +    metadata.type = IMAGE_DATA_TYPE_FLOAT4;
 +  }
 +
 +  /* Set transform from object space to voxel index. */
 +  openvdb::math::Mat4f grid_matrix = grid->transform().baseMap()->getAffineMap()->getMat4();
 +  Transform index_to_object;
 +  for (int col = 0; col < 4; col++) {
 +    for (int row = 0; row < 3; row++) {
-       index_to_object[row][col] = grid_matrix[col][row];
++      index_to_object[row][col] = (float)grid_matrix[col][row];
 +    }
 +  }
 +
 +  Transform texture_to_index = transform_translate(min.x(), min.y(), min.z()) *
 +                               transform_scale(dim.x(), dim.y(), dim.z());
 +
 +  metadata.transform_3d = transform_inverse(index_to_object * texture_to_index);
 +  metadata.use_transform_3d = true;
 +
 +  return true;
 +#else
 +  (void)metadata;
 +  return false;
 +#endif
 +}
 +
- bool VDBImageLoader::load_pixels(const ImageMetaData &metadata,
-                                  void *pixels,
-                                  const size_t,
-                                  const bool associate_alpha)
++bool VDBImageLoader::load_pixels(const ImageMetaData &, void *pixels, const size_t, const bool)
 +{
 +  if (grid->isType<openvdb::FloatGrid>()) {
 +    openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (float *)pixels);
 +    openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::FloatGrid>(grid), dense);
 +  }
 +  else if (grid->isType<openvdb::Vec3fGrid>()) {
 +    openvdb::tools::Dense<openvdb::Vec3f, openvdb::tools::LayoutXYZ> dense(
 +        bbox, (openvdb::Vec3f *)pixels);
 +    openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::Vec3fGrid>(grid), dense);
 +  }
 +  else if (grid->isType<openvdb::BoolGrid>()) {
 +    openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (float *)pixels);
 +    openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::BoolGrid>(grid), dense);
 +  }
 +  else if (grid->isType<openvdb::DoubleGrid>()) {
 +    openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (float *)pixels);
 +    openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::DoubleGrid>(grid), dense);
 +  }
 +  else if (grid->isType<openvdb::Int32Grid>()) {
 +    openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (float *)pixels);
 +    openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::Int32Grid>(grid), dense);
 +  }
 +  else if (grid->isType<openvdb::Int64Grid>()) {
 +    openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (float *)pixels);
 +    openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::Int64Grid>(grid), dense);
 +  }
 +  else if (grid->isType<openvdb::Vec3IGrid>()) {
 +    openvdb::tools::Dense<openvdb::Vec3f, openvdb::tools::LayoutXYZ> dense(
 +        bbox, (openvdb::Vec3f *)pixels);
 +    openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::Vec3IGrid>(grid), dense);
 +  }
 +  else if (grid->isType<openvdb::Vec3dGrid>()) {
 +    openvdb::tools::Dense<openvdb::Vec3f, openvdb::tools::LayoutXYZ> dense(
 +        bbox, (openvdb::Vec3f *)pixels);
 +    openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::Vec3dGrid>(grid), dense);
 +  }
 +  else if (grid->isType<openvdb::MaskGrid>()) {
 +    openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (float *)pixels);
 +    openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::MaskGrid>(grid), dense);
 +  }
 +
 +  return true;
 +}
 +
 +string VDBImageLoader::name() const
 +{
 +  return grid_name;
 +}
 +
 +bool VDBImageLoader::equals(const ImageLoader &other) const
 +{
 +  const VDBImageLoader &other_loader = (const VDBImageLoader &)other;
 +  return grid == other_loader.grid;
 +}
 +
 +void VDBImageLoader::cleanup()
 +{
 +  /* Free OpenVDB grid memory as soon as we can. */
 +  grid.reset();
 +}
 +
 +CCL_NAMESPACE_END
diff --cc source/blender/blenkernel/intern/object.c
index b506229a066,d7247518f9e..f0e1c297e10
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@@ -510,34 -507,24 +510,34 @@@ bool BKE_object_support_modifier_type_c
  
    mti = modifierType_getInfo(modifier_type);
  
 -  /* only geometry objects should be able to get modifiers [#25291] */
 -  if (!ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_LATTICE)) {
 -    return false;
 +  /* Only geometry objects should be able to get modifiers [#25291] */
 +  if (ob->type == OB_HAIR) {
 +    return (mti->modifyHair != NULL) || (mti->flags & eModifierTypeFlag_AcceptsVertexCosOnly);
    }
 -
 -  if (ob->type == OB_LATTICE && (mti->flags & eModifierTypeFlag_AcceptsLattice) == 0) {
 -    return false;
 +  else if (ob->type == OB_POINTCLOUD) {
 +    return (mti->modifyPointCloud != NULL) ||
 +           (mti->flags & eModifierTypeFlag_AcceptsVertexCosOnly);
 +  }
 +  else if (ob->type == OB_VOLUME) {
 +    return (mti->modifyVolume != NULL);
    }
 +  else if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_LATTICE)) {
 +    if (ob->type == OB_LATTICE && (mti->flags & eModifierTypeFlag_AcceptsVertexCosOnly) == 0) {
 +      return false;
 +    }
  
 -  if (!((mti->flags & eModifierTypeFlag_AcceptsCVs) ||
 -        (ob->type == OB_MESH && (mti->flags & eModifierTypeFlag_AcceptsMesh)))) {
 -    return false;
 +    if (!((mti->flags & eModifierTypeFlag_AcceptsCVs) ||
 +          (ob->type == OB_MESH && (mti->flags & eModifierTypeFlag_AcceptsMesh)))) {
 +      return false;
 +    }
 +
 +    return true;
    }
  
 -  return true;
 +  return false;
  }
  
- void BKE_object_link_modifiers(Scene *scene, struct Object *ob_dst, const struct Object *ob_src)
+ void BKE_object_link_modifiers(struct Object *ob_dst, const struct Object *ob_src)
  {
    ModifierData *md;
    BKE_object_free_modifiers(ob_dst, 0);



More information about the Bf-blender-cvs mailing list