OpenSubdiv: Refactor, move topology refiner to own folder

In the future factory will also be moved there.
master
Sergey Sharybin 4 years ago
parent 7c0bea0d65
commit 67fe31d751

@ -50,6 +50,7 @@ if(WITH_OPENSUBDIV)
)
list(APPEND SRC
# Device.
internal/device/device_context_cuda.cc
internal/device/device_context_cuda.h
internal/device/device_context_glsl_compute.cc
@ -61,13 +62,16 @@ if(WITH_OPENSUBDIV)
internal/device/device_context_openmp.cc
internal/device/device_context_openmp.h
# Topology.
internal/topology/topology_refiner_capi.cc
internal/topology/topology_refiner_impl.cc
internal/topology/topology_refiner_impl.h
internal/opensubdiv.cc
internal/opensubdiv_converter_factory.cc
internal/opensubdiv_converter_internal.cc
internal/opensubdiv_evaluator.cc
internal/opensubdiv_evaluator_internal.cc
internal/opensubdiv_topology_refiner.cc
internal/opensubdiv_topology_refiner_internal.cc
internal/opensubdiv_util.cc
internal/opensubdiv_converter_factory.h
@ -75,7 +79,6 @@ if(WITH_OPENSUBDIV)
internal/opensubdiv_edge_map.h
internal/opensubdiv_evaluator_internal.h
internal/opensubdiv_internal.h
internal/opensubdiv_topology_refiner_internal.h
internal/opensubdiv_util.h
)

@ -37,8 +37,8 @@
#include "MEM_guardedalloc.h"
#include "internal/opensubdiv_topology_refiner_internal.h"
#include "internal/opensubdiv_util.h"
#include "internal/topology/topology_refiner_impl.h"
#include "opensubdiv_topology_refiner_capi.h"
using OpenSubdiv::Far::PatchMap;
@ -751,7 +751,7 @@ OpenSubdiv_EvaluatorInternal *openSubdiv_createEvaluatorInternal(
OpenSubdiv_TopologyRefiner *topology_refiner)
{
using blender::opensubdiv::vector;
TopologyRefiner *refiner = topology_refiner->internal->osd_topology_refiner;
TopologyRefiner *refiner = topology_refiner->impl->osd_topology_refiner;
if (refiner == NULL) {
// Happens on bad topology.
return NULL;

@ -18,15 +18,13 @@
#include "opensubdiv_topology_refiner_capi.h"
#include <vector>
#include "MEM_guardedalloc.h"
#include "internal/opensubdiv_converter_factory.h"
#include "internal/opensubdiv_converter_internal.h"
#include "internal/opensubdiv_edge_map.h"
#include "internal/opensubdiv_internal.h"
#include "internal/opensubdiv_topology_refiner_internal.h"
#include "internal/opensubdiv_util.h"
#include "internal/topology/topology_refiner_impl.h"
using blender::opensubdiv::vector;
@ -35,7 +33,7 @@ namespace {
const OpenSubdiv::Far::TopologyRefiner *getOSDTopologyRefiner(
const OpenSubdiv_TopologyRefiner *topology_refiner)
{
return topology_refiner->internal->osd_topology_refiner;
return topology_refiner->impl->osd_topology_refiner;
}
const OpenSubdiv::Far::TopologyLevel *getOSDTopologyBaseLevel(
@ -46,12 +44,12 @@ const OpenSubdiv::Far::TopologyLevel *getOSDTopologyBaseLevel(
int getSubdivisionLevel(const OpenSubdiv_TopologyRefiner *topology_refiner)
{
return topology_refiner->internal->settings.level;
return topology_refiner->impl->settings.level;
}
bool getIsAdaptive(const OpenSubdiv_TopologyRefiner *topology_refiner)
{
return topology_refiner->internal->settings.is_adaptive;
return topology_refiner->impl->settings.is_adaptive;
}
////////////////////////////////////////////////////////////////////////////////
@ -232,7 +230,7 @@ void assignFunctionPointers(OpenSubdiv_TopologyRefiner *topology_refiner)
OpenSubdiv_TopologyRefiner *allocateTopologyRefiner()
{
OpenSubdiv_TopologyRefiner *topology_refiner = OBJECT_GUARDED_NEW(OpenSubdiv_TopologyRefiner);
topology_refiner->internal = OBJECT_GUARDED_NEW(OpenSubdiv_TopologyRefinerInternal);
topology_refiner->impl = OBJECT_GUARDED_NEW(OpenSubdiv_TopologyRefinerImpl);
assignFunctionPointers(topology_refiner);
return topology_refiner;
}
@ -249,16 +247,16 @@ OpenSubdiv_TopologyRefiner *openSubdiv_createTopologyRefinerFromConverter(
return NULL;
}
OpenSubdiv_TopologyRefiner *topology_refiner = allocateTopologyRefiner();
topology_refiner->internal->osd_topology_refiner = osd_topology_refiner;
topology_refiner->impl->osd_topology_refiner = osd_topology_refiner;
// Store setting which we want to keep track of and which can not be stored
// in OpenSubdiv's descriptor yet.
topology_refiner->internal->settings = *settings;
topology_refiner->impl->settings = *settings;
return topology_refiner;
}
void openSubdiv_deleteTopologyRefiner(OpenSubdiv_TopologyRefiner *topology_refiner)
{
OBJECT_GUARDED_DELETE(topology_refiner->internal, OpenSubdiv_TopologyRefinerInternal);
OBJECT_GUARDED_DELETE(topology_refiner->impl, OpenSubdiv_TopologyRefinerImpl);
OBJECT_GUARDED_DELETE(topology_refiner, OpenSubdiv_TopologyRefiner);
}

@ -16,14 +16,19 @@
//
// Author: Sergey Sharybin
#include "internal/opensubdiv_topology_refiner_internal.h"
#include "internal/topology/topology_refiner_impl.h"
OpenSubdiv_TopologyRefinerInternal::OpenSubdiv_TopologyRefinerInternal()
: osd_topology_refiner(NULL)
namespace blender {
namespace opensubdiv {
TopologyRefinerImpl::TopologyRefinerImpl() : osd_topology_refiner(nullptr)
{
}
OpenSubdiv_TopologyRefinerInternal::~OpenSubdiv_TopologyRefinerInternal()
TopologyRefinerImpl::~TopologyRefinerImpl()
{
delete osd_topology_refiner;
}
} // namespace opensubdiv
} // namespace blender

@ -16,8 +16,8 @@
//
// Author: Sergey Sharybin
#ifndef OPENSUBDIV_TOPOLOGY_REFINER_INTERNAL_H_
#define OPENSUBDIV_TOPOLOGY_REFINER_INTERNAL_H_
#ifndef OPENSUBDIV_TOPOLOGY_REFINER_IMPL_H_
#define OPENSUBDIV_TOPOLOGY_REFINER_IMPL_H_
#ifdef _MSC_VER
# include <iso646.h>
@ -27,10 +27,13 @@
#include "opensubdiv_topology_refiner_capi.h"
struct OpenSubdiv_TopologyRefinerInternal {
namespace blender {
namespace opensubdiv {
class TopologyRefinerImpl {
public:
OpenSubdiv_TopologyRefinerInternal();
~OpenSubdiv_TopologyRefinerInternal();
TopologyRefinerImpl();
~TopologyRefinerImpl();
OpenSubdiv::Far::TopologyRefiner *osd_topology_refiner;
@ -44,4 +47,10 @@ struct OpenSubdiv_TopologyRefinerInternal {
OpenSubdiv_TopologyRefinerSettings settings;
};
#endif // OPENSUBDIV_TOPOLOGY_REFINER_H_
} // namespace opensubdiv
} // namespace blender
struct OpenSubdiv_TopologyRefinerImpl : public blender::opensubdiv::TopologyRefinerImpl {
};
#endif // OPENSUBDIV_TOPOLOGY_REFINER_IMPL_H_

@ -28,7 +28,7 @@ extern "C" {
#endif
struct OpenSubdiv_Converter;
struct OpenSubdiv_TopologyRefinerInternal;
struct OpenSubdiv_TopologyRefinerImpl;
// Those settings don't really belong to OpenSubdiv's topology refiner, but
// we are keeping track of them on our side of topology refiner. This is to
@ -40,6 +40,10 @@ typedef struct OpenSubdiv_TopologyRefinerSettings {
int level;
} OpenSubdiv_TopologyRefinerSettings;
// C-style wrapper around actual topology refiner.
//
// The only purpose is to allow C-only code to access C++ implementation of the
// topology refiner.
typedef struct OpenSubdiv_TopologyRefiner {
// Query subdivision level the refiner is created for.
int (*getSubdivisionLevel)(const struct OpenSubdiv_TopologyRefiner *topology_refiner);
@ -125,11 +129,8 @@ typedef struct OpenSubdiv_TopologyRefiner {
//////////////////////////////////////////////////////////////////////////////
// Internal use.
// Internal storage for the use in this module only.
//
// Tease: Contains actual OpenSubdiv's refiner and (optionally) some other
// data and state needed for an internbal use.
struct OpenSubdiv_TopologyRefinerInternal *internal;
// Implementation of the topology refiner.
struct OpenSubdiv_TopologyRefinerImpl *impl;
} OpenSubdiv_TopologyRefiner;
// NOTE: Will return NULL in cases of bad topology.

Loading…
Cancel
Save