From f8a499b596b8af46201b86a30c9807ca54363e25 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 13 Aug 2018 12:21:29 +0200 Subject: OpenSubdiv: Add stub implementation of C-API C-API is way smaller than the rest of the code which uses it. So better to conditionally compile stub implementation than to keep adding ifdef everywhere. --- intern/opensubdiv/CMakeLists.txt | 136 ++++++++++++--------- intern/opensubdiv/internal/opensubdiv_gl_mesh.cc | 2 +- .../opensubdiv/stub/opensubdiv_evaluator_stub.cc | 29 +++++ intern/opensubdiv/stub/opensubdiv_gl_mesh_stub.cc | 37 ++++++ intern/opensubdiv/stub/opensubdiv_stub.cc | 35 ++++++ .../stub/opensubdiv_topology_refiner_stub.cc | 37 ++++++ 6 files changed, 214 insertions(+), 62 deletions(-) create mode 100644 intern/opensubdiv/stub/opensubdiv_evaluator_stub.cc create mode 100644 intern/opensubdiv/stub/opensubdiv_gl_mesh_stub.cc create mode 100644 intern/opensubdiv/stub/opensubdiv_stub.cc create mode 100644 intern/opensubdiv/stub/opensubdiv_topology_refiner_stub.cc (limited to 'intern/opensubdiv') diff --git a/intern/opensubdiv/CMakeLists.txt b/intern/opensubdiv/CMakeLists.txt index 887eb399224..f11d9b4613a 100644 --- a/intern/opensubdiv/CMakeLists.txt +++ b/intern/opensubdiv/CMakeLists.txt @@ -29,39 +29,9 @@ set(INC ) set(INC_SYS - ${OPENSUBDIV_INCLUDE_DIR} - ${GLEW_INCLUDE_PATH} ) set(SRC - internal/opensubdiv.cc - internal/opensubdiv_converter_factory.cc - internal/opensubdiv_converter_internal.cc - internal/opensubdiv_converter_orient.cc - internal/opensubdiv_device_context_cuda.cc - internal/opensubdiv_device_context_opencl.cc - internal/opensubdiv_evaluator.cc - internal/opensubdiv_evaluator_internal.cc - internal/opensubdiv_gl_mesh.cc - internal/opensubdiv_gl_mesh_draw.cc - internal/opensubdiv_gl_mesh_fvar.cc - internal/opensubdiv_gl_mesh_internal.cc - internal/opensubdiv_topology_refiner.cc - internal/opensubdiv_topology_refiner_internal.cc - internal/opensubdiv_util.cc - - internal/opensubdiv_converter_internal.h - internal/opensubdiv_converter_orient.h - internal/opensubdiv_converter_orient_impl.h - internal/opensubdiv_device_context_cuda.h - internal/opensubdiv_device_context_opencl.h - internal/opensubdiv_evaluator_internal.h - internal/opensubdiv_gl_mesh_fvar.h - internal/opensubdiv_gl_mesh_internal.h - internal/opensubdiv_internal.h - internal/opensubdiv_topology_refiner_internal.h - internal/opensubdiv_util.h - opensubdiv_capi.h opensubdiv_capi_type.h opensubdiv_converter_capi.h @@ -70,44 +40,88 @@ set(SRC opensubdiv_topology_refiner_capi.h ) -macro(OPENSUBDIV_DEFINE_COMPONENT component) - if(${${component}}) - add_definitions(-D${component}) - endif() -endmacro() +if(WITH_OPENSUBDIV) + macro(OPENSUBDIV_DEFINE_COMPONENT component) + if(${${component}}) + add_definitions(-D${component}) + endif() + endmacro() -OPENSUBDIV_DEFINE_COMPONENT(OPENSUBDIV_HAS_OPENMP) -# TODO(sergey): OpenCL is not tested and totally unstable atm. -# OPENSUBDIV_DEFINE_COMPONENT(OPENSUBDIV_HAS_OPENCL) -# TODO(sergey): CUDA stays disabled for util it's ported to drievr API. -# OPENSUBDIV_DEFINE_COMPONENT(OPENSUBDIV_HAS_CUDA) -OPENSUBDIV_DEFINE_COMPONENT(OPENSUBDIV_HAS_GLSL_TRANSFORM_FEEDBACK) -OPENSUBDIV_DEFINE_COMPONENT(OPENSUBDIV_HAS_GLSL_COMPUTE) + list(APPEND INC_SYS + ${OPENSUBDIV_INCLUDE_DIR} + ${GLEW_INCLUDE_PATH} + ) -data_to_c_simple(shader/gpu_shader_opensubdiv_vertex.glsl SRC) -data_to_c_simple(shader/gpu_shader_opensubdiv_geometry.glsl SRC) -data_to_c_simple(shader/gpu_shader_opensubdiv_fragment.glsl SRC) + list(APPEND SRC + internal/opensubdiv.cc + internal/opensubdiv_converter_factory.cc + internal/opensubdiv_converter_internal.cc + internal/opensubdiv_converter_orient.cc + internal/opensubdiv_device_context_cuda.cc + internal/opensubdiv_device_context_opencl.cc + internal/opensubdiv_evaluator.cc + internal/opensubdiv_evaluator_internal.cc + internal/opensubdiv_gl_mesh.cc + internal/opensubdiv_gl_mesh_draw.cc + internal/opensubdiv_gl_mesh_fvar.cc + internal/opensubdiv_gl_mesh_internal.cc + internal/opensubdiv_topology_refiner.cc + internal/opensubdiv_topology_refiner_internal.cc + internal/opensubdiv_util.cc -add_definitions(-DGLEW_STATIC) + internal/opensubdiv_converter_internal.h + internal/opensubdiv_converter_orient.h + internal/opensubdiv_converter_orient_impl.h + internal/opensubdiv_device_context_cuda.h + internal/opensubdiv_device_context_opencl.h + internal/opensubdiv_evaluator_internal.h + internal/opensubdiv_gl_mesh_fvar.h + internal/opensubdiv_gl_mesh_internal.h + internal/opensubdiv_internal.h + internal/opensubdiv_topology_refiner_internal.h + internal/opensubdiv_util.h + ) -if(WIN32) - add_definitions(-DNOMINMAX) - add_definitions(-D_USE_MATH_DEFINES) -endif() + OPENSUBDIV_DEFINE_COMPONENT(OPENSUBDIV_HAS_OPENMP) + # TODO(sergey): OpenCL is not tested and totally unstable atm. + # OPENSUBDIV_DEFINE_COMPONENT(OPENSUBDIV_HAS_OPENCL) + # TODO(sergey): CUDA stays disabled for util it's ported to drievr API. + # OPENSUBDIV_DEFINE_COMPONENT(OPENSUBDIV_HAS_CUDA) + OPENSUBDIV_DEFINE_COMPONENT(OPENSUBDIV_HAS_GLSL_TRANSFORM_FEEDBACK) + OPENSUBDIV_DEFINE_COMPONENT(OPENSUBDIV_HAS_GLSL_COMPUTE) -# TODO(sergey): Put CUEW back when CUDA is officially supported by OSD. -#if(OPENSUBDIV_HAS_CUDA) -# list(APPEND INC -# ../../extern/cuew/include -# ) -# add_definitions(-DOPENSUBDIV_HAS_CUEW) -#endif() + data_to_c_simple(shader/gpu_shader_opensubdiv_vertex.glsl SRC) + data_to_c_simple(shader/gpu_shader_opensubdiv_geometry.glsl SRC) + data_to_c_simple(shader/gpu_shader_opensubdiv_fragment.glsl SRC) -if(OPENSUBDIV_HAS_OPENCL) - list(APPEND INC - ../../extern/clew/include + add_definitions(-DGLEW_STATIC) + + if(WIN32) + add_definitions(-DNOMINMAX) + add_definitions(-D_USE_MATH_DEFINES) + endif() + + # TODO(sergey): Put CUEW back when CUDA is officially supported by OSD. + #if(OPENSUBDIV_HAS_CUDA) + # list(APPEND INC + # ../../extern/cuew/include + # ) + # add_definitions(-DOPENSUBDIV_HAS_CUEW) + #endif() + + if(OPENSUBDIV_HAS_OPENCL) + list(APPEND INC + ../../extern/clew/include + ) + add_definitions(-DOPENSUBDIV_HAS_CLEW) + endif() +else() + list(APPEND SRC + stub/opensubdiv_stub.cc + stub/opensubdiv_evaluator_stub.cc + stub/opensubdiv_gl_mesh_stub.cc + stub/opensubdiv_topology_refiner_stub.cc ) - add_definitions(-DOPENSUBDIV_HAS_CLEW) endif() blender_add_lib(bf_intern_opensubdiv "${SRC}" "${INC}" "${INC_SYS}") diff --git a/intern/opensubdiv/internal/opensubdiv_gl_mesh.cc b/intern/opensubdiv/internal/opensubdiv_gl_mesh.cc index 34d27591d0b..649c5ce7b7d 100644 --- a/intern/opensubdiv/internal/opensubdiv_gl_mesh.cc +++ b/intern/opensubdiv/internal/opensubdiv_gl_mesh.cc @@ -281,7 +281,7 @@ struct OpenSubdiv_GLMesh *openSubdiv_createOsdGLMeshFromTopologyRefiner( return gl_mesh; } -void openSubdiv_deleteOsdGLMesh(OpenSubdiv_GLMesh *gl_mesh) { +void openSubdiv_deleteOsdGLMesh(OpenSubdiv_GLMesh* gl_mesh) { delete gl_mesh->internal; OBJECT_GUARDED_DELETE(gl_mesh, OpenSubdiv_GLMesh); } diff --git a/intern/opensubdiv/stub/opensubdiv_evaluator_stub.cc b/intern/opensubdiv/stub/opensubdiv_evaluator_stub.cc new file mode 100644 index 00000000000..86c80fe8a54 --- /dev/null +++ b/intern/opensubdiv/stub/opensubdiv_evaluator_stub.cc @@ -0,0 +1,29 @@ +// Copyright 2018 Blender Foundation. All rights reserved. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// Author: Sergey Sharybin + +#include "opensubdiv_evaluator_capi.h" + +#include + +OpenSubdiv_Evaluator* openSubdiv_createEvaluatorFromTopologyRefiner( + struct OpenSubdiv_TopologyRefiner* /*topology_refiner*/) { + return NULL; +} + +void openSubdiv_deleteEvaluator(OpenSubdiv_Evaluator* /*evaluator*/) { +} diff --git a/intern/opensubdiv/stub/opensubdiv_gl_mesh_stub.cc b/intern/opensubdiv/stub/opensubdiv_gl_mesh_stub.cc new file mode 100644 index 00000000000..8f14a2326dd --- /dev/null +++ b/intern/opensubdiv/stub/opensubdiv_gl_mesh_stub.cc @@ -0,0 +1,37 @@ +// Copyright 2018 Blender Foundation. All rights reserved. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// Author: Sergey Sharybin + +#include "opensubdiv_gl_mesh_capi.h" + +#include + +struct OpenSubdiv_GLMesh *openSubdiv_createOsdGLMeshFromTopologyRefiner( + OpenSubdiv_TopologyRefiner* /*topology_refiner*/, + eOpenSubdivEvaluator /*evaluator_type*/) { + return NULL; +} + +void openSubdiv_deleteOsdGLMesh(OpenSubdiv_GLMesh* /*gl_mesh*/) { +} + +bool openSubdiv_initGLMeshDrawingResources(void) { + return false; +} + +void openSubdiv_deinitGLMeshDrawingResources(void) { +} diff --git a/intern/opensubdiv/stub/opensubdiv_stub.cc b/intern/opensubdiv/stub/opensubdiv_stub.cc new file mode 100644 index 00000000000..f03f0a0ef94 --- /dev/null +++ b/intern/opensubdiv/stub/opensubdiv_stub.cc @@ -0,0 +1,35 @@ +// Copyright 2018 Blender Foundation. All rights reserved. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// Author: Sergey Sharybin + +#include "opensubdiv_capi.h" + +#include + +void openSubdiv_init(void) { +} + +void openSubdiv_cleanup(void) { +} + +int openSubdiv_getAvailableEvaluators(void) { + return 0; +} + +int openSubdiv_getVersionHex(void) { + return 0; +} diff --git a/intern/opensubdiv/stub/opensubdiv_topology_refiner_stub.cc b/intern/opensubdiv/stub/opensubdiv_topology_refiner_stub.cc new file mode 100644 index 00000000000..de98b0b5eee --- /dev/null +++ b/intern/opensubdiv/stub/opensubdiv_topology_refiner_stub.cc @@ -0,0 +1,37 @@ +// Copyright 2018 Blender Foundation. All rights reserved. +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software Foundation, +// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// Author: Sergey Sharybin + +#include "opensubdiv_topology_refiner_capi.h" + +#include + +OpenSubdiv_TopologyRefiner* openSubdiv_createTopologyRefinerFromConverter( + OpenSubdiv_Converter* /*converter*/, + const OpenSubdiv_TopologyRefinerSettings* /*settings*/) { + return NULL; +} + +void openSubdiv_deleteTopologyRefiner( + OpenSubdiv_TopologyRefiner* /*topology_refiner*/) { +} + +bool openSubdiv_topologyRefinerCompareWithConverter( + const OpenSubdiv_TopologyRefiner* /*topology_refiner*/, + const OpenSubdiv_Converter* /*converter*/) { + return false; +} -- cgit v1.2.3