[Bf-blender-cvs] [87ed11f0a71] soc-2018-npr: DO NOT MERGE - revert opensubdiv commit 9a0634a253421c02dbb6d2864db49e4d382ea2a3

Sebastian Parborg noreply at git.blender.org
Mon Jul 16 03:28:46 CEST 2018


Commit: 87ed11f0a71801f45a0579371057e149c2f7bfb6
Author: Sebastian Parborg
Date:   Thu Jun 28 12:39:31 2018 +0200
Branches: soc-2018-npr
https://developer.blender.org/rB87ed11f0a71801f45a0579371057e149c2f7bfb6

DO NOT MERGE - revert opensubdiv commit 9a0634a253421c02dbb6d2864db49e4d382ea2a3

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

M	intern/opensubdiv/opensubdiv_converter.cc

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

diff --git a/intern/opensubdiv/opensubdiv_converter.cc b/intern/opensubdiv/opensubdiv_converter.cc
index ea41a56768f..0ad72c88a12 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -32,12 +32,8 @@
 
 #include <opensubdiv/far/topologyRefinerFactory.h>
 
-#include "MEM_guardedalloc.h"
-
 #include "opensubdiv_converter_capi.h"
 #include "opensubdiv_intern.h"
-#include "opensubdiv_topology_refiner.h"
-
 
 #include <stack>
 
@@ -53,11 +49,6 @@ inline void reverse_face_verts(int *face_verts, int num_verts)
 	face_verts[0] = last_vert;
 }
 
-struct TopologyRefinerData {
-	const OpenSubdiv_Converter& conv;
-	std::vector<float> *uvs;
-};
-
 }  /* namespace */
 #endif /* OPENSUBDIV_ORIENT_TOPOLOGY */
 
@@ -146,11 +137,10 @@ inline void check_oriented_vert_connectivity(const int num_vert_edges,
 }  /* namespace */
 
 template <>
-inline bool TopologyRefinerFactory<TopologyRefinerData>::resizeComponentTopology(
+inline bool TopologyRefinerFactory<OpenSubdiv_Converter>::resizeComponentTopology(
         TopologyRefiner& refiner,
-        const TopologyRefinerData& cb_data)
+        const OpenSubdiv_Converter& conv)
 {
-	const OpenSubdiv_Converter& conv = cb_data.conv;
 	/* Faces and face-verts */
 	const int num_faces = conv.get_num_faces(&conv);
 	setNumBaseFaces(refiner, num_faces);
@@ -178,11 +168,10 @@ inline bool TopologyRefinerFactory<TopologyRefinerData>::resizeComponentTopology
 }
 
 template <>
-inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTopology(
+inline bool TopologyRefinerFactory<OpenSubdiv_Converter>::assignComponentTopology(
 	  TopologyRefiner& refiner,
-	  const TopologyRefinerData &cb_data)
+        const OpenSubdiv_Converter& conv)
 {
-	const OpenSubdiv_Converter& conv = cb_data.conv;
 	using Far::IndexArray;
 	/* Face relations. */
 	const int num_faces = conv.get_num_faces(&conv);
@@ -437,11 +426,10 @@ inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTopology
 };
 
 template <>
-inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTags(
+inline bool TopologyRefinerFactory<OpenSubdiv_Converter>::assignComponentTags(
         TopologyRefiner& refiner,
-        const TopologyRefinerData& cb_data)
+        const OpenSubdiv_Converter& conv)
 {
-	const OpenSubdiv_Converter& conv = cb_data.conv;
 	typedef OpenSubdiv::Sdc::Crease Crease;
 
 	int num_edges = conv.get_num_edges(&conv);
@@ -488,52 +476,14 @@ inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTags(
 }
 
 template <>
-inline void TopologyRefinerFactory<TopologyRefinerData>::reportInvalidTopology(
+inline void TopologyRefinerFactory<OpenSubdiv_Converter>::reportInvalidTopology(
         TopologyError /*errCode*/,
         const char *msg,
-        const TopologyRefinerData& /*mesh*/)
+        const OpenSubdiv_Converter& /*mesh*/)
 {
 	printf("OpenSubdiv Error: %s\n", msg);
 }
 
-template <>
-inline bool TopologyRefinerFactory<TopologyRefinerData>::assignFaceVaryingTopology(
-        TopologyRefiner& refiner,
-        const TopologyRefinerData& cb_data)
-{
-	const OpenSubdiv_Converter& conv = cb_data.conv;
-	const int num_layers = conv.get_num_uv_layers(&conv);
-	if (num_layers <= 0) {
-		/* No UV maps, we can skip any face-varying data. */
-		return true;
-	}
-	const int num_faces = getNumBaseFaces(refiner);
-	size_t uvs_offset = 0;
-	for (int layer = 0; layer < num_layers; ++layer) {
-		conv.precalc_uv_layer(&conv, layer);
-		const int num_uvs = conv.get_num_uvs(&conv);
-		/* Fill in UV coordinates. */
-		cb_data.uvs->resize(cb_data.uvs->size() + num_uvs * 2);
-		conv.get_uvs(&conv, &cb_data.uvs->at(uvs_offset));
-		uvs_offset += num_uvs * 2;
-		/* Fill in per-corner index of the UV. */
-		const int channel = createBaseFVarChannel(refiner, num_uvs);
-		for (int face = 0; face < num_faces; ++face) {
-			Far::IndexArray dst_face_uvs = getBaseFaceFVarValues(refiner,
-			                                                     face,
-			                                                     channel);
-			for (int corner = 0; corner < dst_face_uvs.size(); ++corner) {
-				const int uv_index = conv.get_face_corner_uv_index(&conv,
-				                                                   face,
-				                                                   corner);
-				dst_face_uvs[corner] = uv_index;
-			}
-		}
-		conv.finish_uv_layer(&conv);
-	}
-	return true;
-}
-
 }  /* namespace Far */
 }  /* namespace OPENSUBDIV_VERSION */
 }  /* namespace OpenSubdiv */
@@ -567,43 +517,33 @@ struct OpenSubdiv_TopologyRefinerDescr *openSubdiv_createTopologyRefinerDescr(
 	Options options;
 	options.SetVtxBoundaryInterpolation(Options::VTX_BOUNDARY_EDGE_ONLY);
 	options.SetCreasingMethod(Options::CREASE_UNIFORM);
-	if (converter->get_subdiv_uvs(converter)) {
-		options.SetFVarLinearInterpolation(Options::FVAR_LINEAR_CORNERS_ONLY);
-	}
-	else {
-		options.SetFVarLinearInterpolation(Options::FVAR_LINEAR_ALL);
-	}
+	options.SetFVarLinearInterpolation(Options::FVAR_LINEAR_ALL);
 
-	TopologyRefinerFactory<TopologyRefinerData>::Options
+	TopologyRefinerFactory<OpenSubdiv_Converter>::Options
 	        topology_options(scheme_type, options);
 #ifdef OPENSUBDIV_VALIDATE_TOPOLOGY
 	topology_options.validateFullTopology = true;
 #endif
-	OpenSubdiv_TopologyRefinerDescr *result = OBJECT_GUARDED_NEW(OpenSubdiv_TopologyRefinerDescr);
-	TopologyRefinerData cb_data = {*converter, &result->uvs};
 	/* We don't use guarded allocation here so we can re-use the refiner
 	 * for GL mesh creation directly.
 	 */
-	result->osd_refiner =
-	        TopologyRefinerFactory<TopologyRefinerData>::Create(
-	                cb_data,
+	return (struct OpenSubdiv_TopologyRefinerDescr*)
+	        TopologyRefinerFactory<OpenSubdiv_Converter>::Create(
+	                *converter,
 	                topology_options);
-
-	return result;
 }
 
 void openSubdiv_deleteTopologyRefinerDescr(
         OpenSubdiv_TopologyRefinerDescr *topology_refiner)
 {
-	delete topology_refiner->osd_refiner;
-	OBJECT_GUARDED_DELETE(topology_refiner, OpenSubdiv_TopologyRefinerDescr);
+	delete (OpenSubdiv::Far::TopologyRefiner *)topology_refiner;
 }
 
 int openSubdiv_topologyRefinerGetSubdivLevel(
         const OpenSubdiv_TopologyRefinerDescr *topology_refiner)
 {
 	using OpenSubdiv::Far::TopologyRefiner;
-	const TopologyRefiner *refiner = topology_refiner->osd_refiner;
+	const TopologyRefiner *refiner = (const TopologyRefiner *)topology_refiner;
 	return refiner->GetMaxLevel();
 }
 
@@ -612,7 +552,7 @@ int openSubdiv_topologyRefinerGetNumVerts(
 {
 	using OpenSubdiv::Far::TopologyLevel;
 	using OpenSubdiv::Far::TopologyRefiner;
-	const TopologyRefiner *refiner = topology_refiner->osd_refiner;
+	const TopologyRefiner *refiner = (const TopologyRefiner *)topology_refiner;
 	const TopologyLevel &base_level = refiner->GetLevel(0);
 	return base_level.GetNumVertices();
 }
@@ -622,7 +562,7 @@ int openSubdiv_topologyRefinerGetNumEdges(
 {
 	using OpenSubdiv::Far::TopologyLevel;
 	using OpenSubdiv::Far::TopologyRefiner;
-	const TopologyRefiner *refiner = topology_refiner->osd_refiner;
+	const TopologyRefiner *refiner = (const TopologyRefiner *)topology_refiner;
 	const TopologyLevel &base_level = refiner->GetLevel(0);
 	return base_level.GetNumEdges();
 }
@@ -632,7 +572,7 @@ int openSubdiv_topologyRefinerGetNumFaces(
 {
 	using OpenSubdiv::Far::TopologyLevel;
 	using OpenSubdiv::Far::TopologyRefiner;
-	const TopologyRefiner *refiner = topology_refiner->osd_refiner;
+	const TopologyRefiner *refiner = (const TopologyRefiner *)topology_refiner;
 	const TopologyLevel &base_level = refiner->GetLevel(0);
 	return base_level.GetNumFaces();
 }
@@ -643,7 +583,7 @@ int openSubdiv_topologyRefinerGetNumFaceVerts(
 {
 	using OpenSubdiv::Far::TopologyLevel;
 	using OpenSubdiv::Far::TopologyRefiner;
-	const TopologyRefiner *refiner = topology_refiner->osd_refiner;
+	const TopologyRefiner *refiner = (const TopologyRefiner *)topology_refiner;
 	const TopologyLevel &base_level = refiner->GetLevel(0);
 	return base_level.GetFaceVertices(face).size();
 }
@@ -652,11 +592,10 @@ int openSubdiv_topologyRefnerCompareConverter(
         const OpenSubdiv_TopologyRefinerDescr *topology_refiner,
         OpenSubdiv_Converter *converter)
 {
-	typedef OpenSubdiv::Sdc::Options Options;
 	using OpenSubdiv::Far::ConstIndexArray;
 	using OpenSubdiv::Far::TopologyRefiner;
 	using OpenSubdiv::Far::TopologyLevel;
-	const TopologyRefiner *refiner = topology_refiner->osd_refiner;
+	const TopologyRefiner *refiner = (const TopologyRefiner *)topology_refiner;
 	const TopologyLevel &base_level = refiner->GetLevel(0);
 	const int num_verts = base_level.GetNumVertices();
 	const int num_edges = base_level.GetNumEdges();
@@ -667,12 +606,6 @@ int openSubdiv_topologyRefnerCompareConverter(
 	if (scheme_type != refiner->GetSchemeType()) {
 		return false;
 	}
-	const Options options = refiner->GetSchemeOptions();
-	Options::FVarLinearInterpolation interp = options.GetFVarLinearInterpolation();
-	const bool subdiv_uvs = (interp != Options::FVAR_LINEAR_ALL);
-	if (converter->get_subdiv_uvs(converter) != subdiv_uvs) {
-		return false;
-	}
 	if (converter->get_num_verts(converter) != num_verts ||
 	    converter->get_num_edges(converter) != num_edges ||
 	    converter->get_num_faces(converter) != num_faces)



More information about the Bf-blender-cvs mailing list