Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/opensubdiv/internal/opensubdiv_converter_factory.cc')
-rw-r--r--intern/opensubdiv/internal/opensubdiv_converter_factory.cc130
1 files changed, 55 insertions, 75 deletions
diff --git a/intern/opensubdiv/internal/opensubdiv_converter_factory.cc b/intern/opensubdiv/internal/opensubdiv_converter_factory.cc
index e07880b7d8d..0c1514f2fea 100644
--- a/intern/opensubdiv/internal/opensubdiv_converter_factory.cc
+++ b/intern/opensubdiv/internal/opensubdiv_converter_factory.cc
@@ -34,29 +34,27 @@
#include "opensubdiv_converter_capi.h"
using opensubdiv_capi::min;
-using opensubdiv_capi::vector;
using opensubdiv_capi::stack;
+using opensubdiv_capi::vector;
struct TopologyRefinerData {
- const OpenSubdiv_Converter* converter;
+ const OpenSubdiv_Converter *converter;
};
namespace OpenSubdiv {
namespace OPENSUBDIV_VERSION {
namespace Far {
-template <>
-inline bool
-TopologyRefinerFactory<TopologyRefinerData>::resizeComponentTopology(
- TopologyRefiner& refiner,
- const TopologyRefinerData& cb_data) {
- const OpenSubdiv_Converter* converter = cb_data.converter;
+template<>
+inline bool TopologyRefinerFactory<TopologyRefinerData>::resizeComponentTopology(
+ TopologyRefiner &refiner, const TopologyRefinerData &cb_data)
+{
+ const OpenSubdiv_Converter *converter = cb_data.converter;
// Faces and face-vertices.
const int num_faces = converter->getNumFaces(converter);
setNumBaseFaces(refiner, num_faces);
for (int face_index = 0; face_index < num_faces; ++face_index) {
- const int num_face_vertices =
- converter->getNumFaceVertices(converter, face_index);
+ const int num_face_vertices = converter->getNumFaceVertices(converter, face_index);
setNumBaseFaceVertices(refiner, face_index, num_face_vertices);
}
// Vertices.
@@ -70,31 +68,26 @@ TopologyRefinerFactory<TopologyRefinerData>::resizeComponentTopology(
const int num_edges = converter->getNumEdges(converter);
setNumBaseEdges(refiner, num_edges);
for (int edge_index = 0; edge_index < num_edges; ++edge_index) {
- const int num_edge_faces =
- converter->getNumEdgeFaces(converter, edge_index);
+ const int num_edge_faces = converter->getNumEdgeFaces(converter, edge_index);
setNumBaseEdgeFaces(refiner, edge_index, num_edge_faces);
}
// Vertex-faces and vertex-edges.
for (int vertex_index = 0; vertex_index < num_vertices; ++vertex_index) {
- const int num_vert_edges =
- converter->getNumVertexEdges(converter, vertex_index);
- const int num_vert_faces =
- converter->getNumVertexFaces(converter, vertex_index);
+ const int num_vert_edges = converter->getNumVertexEdges(converter, vertex_index);
+ const int num_vert_faces = converter->getNumVertexFaces(converter, vertex_index);
setNumBaseVertexEdges(refiner, vertex_index, num_vert_edges);
setNumBaseVertexFaces(refiner, vertex_index, num_vert_faces);
}
return true;
}
-template <>
-inline bool
-TopologyRefinerFactory<TopologyRefinerData>::assignComponentTopology(
- TopologyRefiner& refiner,
- const TopologyRefinerData& cb_data) {
+template<>
+inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTopology(
+ TopologyRefiner &refiner, const TopologyRefinerData &cb_data)
+{
using Far::IndexArray;
- const OpenSubdiv_Converter* converter = cb_data.converter;
- const bool full_topology_specified =
- converter->specifiesFullTopology(converter);
+ const OpenSubdiv_Converter *converter = cb_data.converter;
+ const bool full_topology_specified = converter->specifiesFullTopology(converter);
// Face relations.
const int num_faces = converter->getNumFaces(converter);
for (int face_index = 0; face_index < num_faces; ++face_index) {
@@ -125,47 +118,41 @@ TopologyRefinerFactory<TopologyRefinerData>::assignComponentTopology(
for (int vertex_index = 0; vertex_index < num_vertices; ++vertex_index) {
// Vertex-faces.
IndexArray dst_vertex_faces = getBaseVertexFaces(refiner, vertex_index);
- const int num_vertex_faces =
- converter->getNumVertexFaces(converter, vertex_index);
+ const int num_vertex_faces = converter->getNumVertexFaces(converter, vertex_index);
vertex_faces.resize(num_vertex_faces);
converter->getVertexFaces(converter, vertex_index, &vertex_faces[0]);
// Vertex-edges.
IndexArray dst_vertex_edges = getBaseVertexEdges(refiner, vertex_index);
- const int num_vertex_edges =
- converter->getNumVertexEdges(converter, vertex_index);
+ const int num_vertex_edges = converter->getNumVertexEdges(converter, vertex_index);
vertex_edges.resize(num_vertex_edges);
converter->getVertexEdges(converter, vertex_index, &vertex_edges[0]);
- memcpy(&dst_vertex_edges[0], &vertex_edges[0],
- sizeof(int) * num_vertex_edges);
- memcpy(&dst_vertex_faces[0], &vertex_faces[0],
- sizeof(int) * num_vertex_faces);
+ memcpy(&dst_vertex_edges[0], &vertex_edges[0], sizeof(int) * num_vertex_edges);
+ memcpy(&dst_vertex_faces[0], &vertex_faces[0], sizeof(int) * num_vertex_faces);
}
populateBaseLocalIndices(refiner);
return true;
}
-template <>
+template<>
inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTags(
- TopologyRefiner& refiner,
- const TopologyRefinerData& cb_data) {
+ TopologyRefiner &refiner, const TopologyRefinerData &cb_data)
+{
using OpenSubdiv::Sdc::Crease;
- const OpenSubdiv_Converter* converter = cb_data.converter;
- const bool full_topology_specified =
- converter->specifiesFullTopology(converter);
+ const OpenSubdiv_Converter *converter = cb_data.converter;
+ const bool full_topology_specified = converter->specifiesFullTopology(converter);
const int num_edges = converter->getNumEdges(converter);
for (int edge_index = 0; edge_index < num_edges; ++edge_index) {
- const float sharpness =
- converter->getEdgeSharpness(converter, edge_index);
+ const float sharpness = converter->getEdgeSharpness(converter, edge_index);
if (sharpness < 1e-6f) {
continue;
}
if (full_topology_specified) {
setBaseEdgeSharpness(refiner, edge_index, sharpness);
- } else {
+ }
+ else {
int edge_vertices[2];
converter->getEdgeVertices(converter, edge_index, edge_vertices);
- const int base_edge_index = findBaseEdge(
- refiner, edge_vertices[0], edge_vertices[1]);
+ const int base_edge_index = findBaseEdge(refiner, edge_vertices[0], edge_vertices[1]);
if (base_edge_index == OpenSubdiv::Far::INDEX_INVALID) {
printf("OpenSubdiv Error: failed to find reconstructed edge\n");
return false;
@@ -181,8 +168,7 @@ inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTags(
for (int vertex_index = 0; vertex_index < num_vertices; ++vertex_index) {
ConstIndexArray vertex_edges = getBaseVertexEdges(refiner, vertex_index);
if (converter->isInfiniteSharpVertex(converter, vertex_index)) {
- setBaseVertexSharpness(
- refiner, vertex_index, Crease::SHARPNESS_INFINITE);
+ setBaseVertexSharpness(refiner, vertex_index, Crease::SHARPNESS_INFINITE);
continue;
}
float sharpness = converter->getVertexSharpness(converter, vertex_index);
@@ -199,12 +185,11 @@ inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTags(
return true;
}
-template <>
-inline bool
-TopologyRefinerFactory<TopologyRefinerData>::assignFaceVaryingTopology(
- TopologyRefiner& refiner,
- const TopologyRefinerData& cb_data) {
- const OpenSubdiv_Converter* converter = cb_data.converter;
+template<>
+inline bool TopologyRefinerFactory<TopologyRefinerData>::assignFaceVaryingTopology(
+ TopologyRefiner &refiner, const TopologyRefinerData &cb_data)
+{
+ const OpenSubdiv_Converter *converter = cb_data.converter;
const int num_layers = converter->getNumUVLayers(converter);
if (num_layers <= 0) {
// No UV maps, we can skip any face-varying data.
@@ -219,11 +204,9 @@ TopologyRefinerFactory<TopologyRefinerData>::assignFaceVaryingTopology(
// TODO(sergey): Need to check whether converter changed the winding of
// face to match OpenSubdiv's expectations.
for (int face_index = 0; face_index < num_faces; ++face_index) {
- Far::IndexArray dst_face_uvs =
- getBaseFaceFVarValues(refiner, face_index, channel);
+ Far::IndexArray dst_face_uvs = getBaseFaceFVarValues(refiner, face_index, channel);
for (int corner = 0; corner < dst_face_uvs.size(); ++corner) {
- const int uv_index =
- converter->getFaceCornerUVIndex(converter, face_index, corner);
+ const int uv_index = converter->getFaceCornerUVIndex(converter, face_index, corner);
dst_face_uvs[corner] = uv_index;
}
}
@@ -232,10 +215,10 @@ TopologyRefinerFactory<TopologyRefinerData>::assignFaceVaryingTopology(
return true;
}
-template <>
+template<>
inline void TopologyRefinerFactory<TopologyRefinerData>::reportInvalidTopology(
- TopologyError /*errCode*/, const char* msg,
- const TopologyRefinerData& /*mesh*/) {
+ TopologyError /*errCode*/, const char *msg, const TopologyRefinerData & /*mesh*/)
+{
printf("OpenSubdiv Error: %s\n", msg);
}
@@ -247,9 +230,9 @@ namespace opensubdiv_capi {
namespace {
-OpenSubdiv::Sdc::Options::VtxBoundaryInterpolation
-getVtxBoundaryInterpolationFromCAPI(
- OpenSubdiv_VtxBoundaryInterpolation boundary_interpolation) {
+OpenSubdiv::Sdc::Options::VtxBoundaryInterpolation getVtxBoundaryInterpolationFromCAPI(
+ OpenSubdiv_VtxBoundaryInterpolation boundary_interpolation)
+{
using OpenSubdiv::Sdc::Options;
switch (boundary_interpolation) {
case OSD_VTX_BOUNDARY_NONE:
@@ -265,31 +248,28 @@ getVtxBoundaryInterpolationFromCAPI(
} // namespace
-OpenSubdiv::Far::TopologyRefiner* createOSDTopologyRefinerFromConverter(
- OpenSubdiv_Converter* converter) {
- using OpenSubdiv::Sdc::Options;
+OpenSubdiv::Far::TopologyRefiner *createOSDTopologyRefinerFromConverter(
+ OpenSubdiv_Converter *converter)
+{
using OpenSubdiv::Far::TopologyRefinerFactory;
- const OpenSubdiv::Sdc::SchemeType scheme_type =
- getSchemeTypeFromCAPI(converter->getSchemeType(converter));
- const Options::FVarLinearInterpolation linear_interpolation =
- getFVarLinearInterpolationFromCAPI(
- converter->getFVarLinearInterpolation(converter));
+ using OpenSubdiv::Sdc::Options;
+ const OpenSubdiv::Sdc::SchemeType scheme_type = getSchemeTypeFromCAPI(
+ converter->getSchemeType(converter));
+ const Options::FVarLinearInterpolation linear_interpolation = getFVarLinearInterpolationFromCAPI(
+ converter->getFVarLinearInterpolation(converter));
Options options;
options.SetVtxBoundaryInterpolation(
- getVtxBoundaryInterpolationFromCAPI(
- converter->getVtxBoundaryInterpolation(converter)));
+ getVtxBoundaryInterpolationFromCAPI(converter->getVtxBoundaryInterpolation(converter)));
options.SetCreasingMethod(Options::CREASE_UNIFORM);
options.SetFVarLinearInterpolation(linear_interpolation);
- TopologyRefinerFactory<TopologyRefinerData>::Options topology_options(
- scheme_type, options);
+ TopologyRefinerFactory<TopologyRefinerData>::Options topology_options(scheme_type, options);
#ifdef OPENSUBDIV_VALIDATE_TOPOLOGY
topology_options.validateFullTopology = true;
#endif
TopologyRefinerData cb_data;
cb_data.converter = converter;
- return TopologyRefinerFactory<TopologyRefinerData>::Create(
- cb_data, topology_options);
+ return TopologyRefinerFactory<TopologyRefinerData>::Create(cb_data, topology_options);
}
} // namespace opensubdiv_capi