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:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-07-16 10:28:05 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-07-16 10:52:37 +0300
commitd9203820467665ba19e1956e035de663849e695c (patch)
tree62d01753cafe31ac739c27f45272e2e4c0938c80 /intern/opensubdiv/opensubdiv_capi.h
parentb29b73a67eca3e5ac71c4b7c89f25bf3fb694cc3 (diff)
OpenSubdiv: Re-work C-API integration
Main goal is to make API simpler to follow (at least ion terms what is defined/declared where, as opposite of handful big headers which includes all the declarations), and also avoid a big set of long and obscure functions. Now C-API files are split into smaller ones, following OpenSubdiv behavior more closely, and also function pointers in structures used a lot more, which shortens functions names, UV integration part in GL Mesh is mainly stripped away, it needs to be done differently. On a related topic, UV coordinates API in converter needs to be removed as well, we do not need coordinates, only island connectivity information there. Additional changes: - Varying interpolation in evaluator API are temporarily disabled, need to extend API somewhere (probably, evaluator's API) to inform layout information of vertex data (whether it contains varying data, width, stride and such). - Evaluator now can interpolate face-varying data. Only works for adaptive refiner, since some issues in OpenSubdiv itself. Planned changes: - Remove uv coordinates from TopologyConverter. - Support evaluation of patches (as opposite to individual coordinates as it happens currently). - Support more flexible layout of varying and face-varying data. It is stupid to assume varying is 3 floats and face-varying 2 floats. - Support of second order derivatives. - Everything else what i'm missing in this list.
Diffstat (limited to 'intern/opensubdiv/opensubdiv_capi.h')
-rw-r--r--intern/opensubdiv/opensubdiv_capi.h178
1 files changed, 29 insertions, 149 deletions
diff --git a/intern/opensubdiv/opensubdiv_capi.h b/intern/opensubdiv/opensubdiv_capi.h
index c29d08a77e1..a26ea36b863 100644
--- a/intern/opensubdiv/opensubdiv_capi.h
+++ b/intern/opensubdiv/opensubdiv_capi.h
@@ -1,163 +1,43 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * 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.
- *
- * The Original Code is Copyright (C) 2013 Blender Foundation.
- * All rights reserved.
- *
- * Contributor(s): Sergey Sharybin
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifndef __OPENSUBDIV_CAPI_H__
-#define __OPENSUBDIV_CAPI_H__
+// Copyright 2013 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
+
+#ifndef OPENSUBDIV_CAPI_H_
+#define OPENSUBDIV_CAPI_H_
+
+#include "opensubdiv_capi_type.h"
#ifdef __cplusplus
extern "C" {
#endif
-// Types declaration.
-struct OpenSubdiv_GLMesh;
-struct OpenSubdiv_GLMeshDescr;
-struct OpenSubdiv_GLMeshFVarData;
-struct OpenSubdiv_TopologyRefinerDescr;
-
-typedef struct OpenSubdiv_GLMesh OpenSubdiv_GLMesh;
-
-// Keep this a bitmask os it's possible to pass available
-// evaluators to Blender.
-enum {
- OPENSUBDIV_EVALUATOR_CPU = (1 << 0),
- OPENSUBDIV_EVALUATOR_OPENMP = (1 << 1),
- OPENSUBDIV_EVALUATOR_OPENCL = (1 << 2),
- OPENSUBDIV_EVALUATOR_CUDA = (1 << 3),
- OPENSUBDIV_EVALUATOR_GLSL_TRANSFORM_FEEDBACK = (1 << 4),
- OPENSUBDIV_EVALUATOR_GLSL_COMPUTE = (1 << 5),
-};
-
-enum {
- OPENSUBDIV_SCHEME_CATMARK,
- OPENSUBDIV_SCHEME_BILINEAR,
- OPENSUBDIV_SCHEME_LOOP,
-};
-
-/* TODO(sergey): Re-name and avoid bad level data access. */
-OpenSubdiv_GLMesh *openSubdiv_createOsdGLMeshFromTopologyRefiner(
- struct OpenSubdiv_TopologyRefinerDescr *topology_refiner,
- int evaluator_type,
- int level);
-
-void openSubdiv_deleteOsdGLMesh(OpenSubdiv_GLMesh *gl_mesh);
-unsigned int openSubdiv_getOsdGLMeshPatchIndexBuffer(
- OpenSubdiv_GLMesh *gl_mesh);
-unsigned int openSubdiv_getOsdGLMeshVertexBuffer(OpenSubdiv_GLMesh *gl_mesh);
-void openSubdiv_osdGLMeshUpdateVertexBuffer(OpenSubdiv_GLMesh *gl_mesh,
- const float *vertex_data,
- int start_vertex,
- int num_verts);
-void openSubdiv_osdGLMeshRefine(OpenSubdiv_GLMesh *gl_mesh);
-void openSubdiv_osdGLMeshSynchronize(OpenSubdiv_GLMesh *gl_mesh);
-void openSubdiv_osdGLMeshBindVertexBuffer(OpenSubdiv_GLMesh *gl_mesh);
-
-const struct OpenSubdiv_TopologyRefinerDescr *openSubdiv_getGLMeshTopologyRefiner(
- OpenSubdiv_GLMesh *gl_mesh);
-
-/* ============================= Evaluator API ============================== */
-
-struct OpenSubdiv_EvaluatorDescr;
-typedef struct OpenSubdiv_EvaluatorDescr OpenSubdiv_EvaluatorDescr;
-
-/* TODO(sergey): Avoid bad-level data access, */
-OpenSubdiv_EvaluatorDescr *openSubdiv_createEvaluatorDescr(
- struct OpenSubdiv_TopologyRefinerDescr *topology_refiner,
- int subsurf_level);
-
-void openSubdiv_deleteEvaluatorDescr(
- OpenSubdiv_EvaluatorDescr *evaluator_descr);
-
-void openSubdiv_setEvaluatorCoarsePositions(
- OpenSubdiv_EvaluatorDescr *evaluator_descr,
- const float *positions,
- int start_vertex_index,
- int num_vertices);
-void openSubdiv_setEvaluatorVaryingData(
- OpenSubdiv_EvaluatorDescr *evaluator_descr,
- const float *varying_data,
- int start_vertex_index,
- int num_vertices);
-
-void openSubdiv_setEvaluatorCoarsePositionsFromBuffer(
- OpenSubdiv_EvaluatorDescr *evaluator_descr,
- const void *buffer,
- int start_offset,
- int stride,
- int start_vertex_index,
- int num_vertices);
-
-void openSubdiv_refineEvaluator(OpenSubdiv_EvaluatorDescr *evaluator_descr);
-
-void openSubdiv_evaluateLimit(OpenSubdiv_EvaluatorDescr *evaluator_descr,
- int osd_face_index,
- float face_u, float face_v,
- float P[3],
- float dPdu[3],
- float dPdv[3]);
-
-void openSubdiv_evaluateVarying(OpenSubdiv_EvaluatorDescr *evaluator_descr,
- int osd_face_index,
- float face_u, float face_v,
- float varying[3]);
-
-/* ============================== Mesh drawing =============================== */
-
-/* Initialize/Deinitialize global OpenGL drawing buffers/GLSL programs. */
-bool openSubdiv_osdGLDisplayInit(void);
-void openSubdiv_osdGLDisplayDeinit(void);
-
-/* Initialize all the invariants which stays the same for every single path,
- * for example lighting model stays untouched for the whole mesh.
- *
- * TODO(sergey): Some of the stuff could be initialized once for all meshes.
- */
-void openSubdiv_osdGLMeshDisplayPrepare(int use_osd_glsl, int active_uv_index);
-
-/* Draw specified patches. */
-void openSubdiv_osdGLMeshDisplay(OpenSubdiv_GLMesh *gl_mesh,
- int fill_quads,
- int start_patch,
- int num_patches);
-
-void openSubdiv_osdGLAllocFVar(
- struct OpenSubdiv_TopologyRefinerDescr *topology_refiner,
- OpenSubdiv_GLMesh *gl_mesh,
- const float *fvar_data);
-
-void openSubdiv_osdGLDestroyFVar(OpenSubdiv_GLMesh *gl_mesh);
-
-/* =========================== Utility functions ============================ */
-
-int openSubdiv_getAvailableEvaluators(void);
+// Global initialization/deinitialization.
+//
+// Supposed to be called from main thread.
void openSubdiv_init(void);
void openSubdiv_cleanup(void);
+// Bitmask of eOpenSubdivEvaluator.
+int openSubdiv_getAvailableEvaluators(void);
+
int openSubdiv_getVersionHex(void);
#ifdef __cplusplus
}
#endif
-#endif // __OPENSUBDIV_CAPI_H__
+#endif // OPENSUBDIV_CAPI_H_