OpenSubdiv: Refactor, move topology refiner to own folder
In the future factory will also be moved there.
This commit is contained in:
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…
Reference in New Issue