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:
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c22
-rw-r--r--source/blender/blenkernel/intern/mesh_evaluate.c8
-rw-r--r--source/blender/bmesh/intern/bmesh_core.c8
-rw-r--r--source/blender/editors/interface/interface_align.c10
-rw-r--r--source/blender/editors/uvedit/uvedit_smart_stitch.c28
-rw-r--r--source/blender/imbuf/intern/anim_movie.c8
-rw-r--r--source/blender/makesdna/DNA_space_types.h10
-rw-r--r--source/blender/makesrna/intern/rna_space.c2
-rw-r--r--source/blender/python/intern/bpy_props.c2
-rw-r--r--source/blender/python/mathutils/mathutils_geometry.c2
-rw-r--r--source/blender/render/intern/include/zbuf.h4
11 files changed, 52 insertions, 52 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 44765e82ab5..f80f17b5922 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -565,8 +565,8 @@ void DM_update_tessface_data(DerivedMesh *dm)
}
}
- /* NOTE: quad detection issue - forth vertidx vs forth loopidx:
- * Here, our tfaces' forth vertex index is never 0 for a quad. However, we know our forth loop index may be
+ /* NOTE: quad detection issue - fourth vertidx vs fourth loopidx:
+ * Here, our tfaces' fourth vertex index is never 0 for a quad. However, we know our fourth loop index may be
* 0 for quads (because our quads may have been rotated compared to their org poly, see tessellation code).
* So we pass the MFace's, and BKE_mesh_loops_to_tessdata will use MFace->v4 index as quad test.
*/
@@ -630,8 +630,8 @@ void DM_generate_tangent_tessface_data(DerivedMesh *dm, bool generate)
}
}
- /* NOTE: quad detection issue - forth vertidx vs forth loopidx:
- * Here, our tfaces' forth vertex index is never 0 for a quad. However, we know our forth loop index may be
+ /* NOTE: quad detection issue - fourth vertidx vs fourth loopidx:
+ * Here, our tfaces' fourth vertex index is never 0 for a quad. However, we know our fourth loop index may be
* 0 for quads (because our quads may have been rotated compared to their org poly, see tessellation code).
* So we pass the MFace's, and BKE_mesh_loops_to_tessdata will use MFace->v4 index as quad test.
*/
@@ -799,7 +799,7 @@ void DM_to_mesh(DerivedMesh *dm, Mesh *me, Object *ob, CustomDataMask mask, bool
/* ok, this should now use new CD shapekey data,
* which should be fed through the modifier
- * stack*/
+ * stack */
if (tmp.totvert != me->totvert && !did_shapekeys && me->key) {
printf("%s: YEEK! this should be recoded! Shape key loss!: ID '%s'\n", __func__, tmp.id.name);
if (tmp.key)
@@ -1335,7 +1335,7 @@ typedef struct DMWeightColorInfo {
static int dm_drawflag_calc(const ToolSettings *ts, const Mesh *me)
{
return ((ts->multipaint ? CALC_WP_MULTIPAINT : 0) |
- /* CALC_WP_GROUP_USER_ACTIVE or CALC_WP_GROUP_USER_ALL*/
+ /* CALC_WP_GROUP_USER_ACTIVE or CALC_WP_GROUP_USER_ALL */
(1 << ts->weightuser) |
(ts->auto_normalize ? CALC_WP_AUTO_NORMALIZE : 0) |
((me->editflag & ME_EDIT_MIRROR_X) ? CALC_WP_MIRROR_X : 0));
@@ -1545,8 +1545,8 @@ void DM_update_weight_mcol(
int l_index;
int j;
- /* now add to loops, so the data can be passed through the modifier stack */
- /* If no CD_PREVIEW_MLOOPCOL existed yet, we have to add a new one! */
+ /* now add to loops, so the data can be passed through the modifier stack
+ * If no CD_PREVIEW_MLOOPCOL existed yet, we have to add a new one! */
if (!wtcol_l) {
wtcol_l = MEM_mallocN(sizeof(*wtcol_l) * dm_totloop, __func__);
CustomData_add_layer(&dm->loopData, CD_PREVIEW_MLOOPCOL, CD_ASSIGN, wtcol_l, dm_totloop);
@@ -2013,12 +2013,12 @@ static void mesh_calc_modifiers(
/* set the DerivedMesh to only copy needed data */
mask = curr->mask;
- /* needMapping check here fixes bug [#28112], otherwise its
- * possible that it wont be copied */
+ /* needMapping check here fixes bug [#28112], otherwise it's
+ * possible that it won't be copied */
mask |= append_mask;
DM_set_only_copy(dm, mask | (need_mapping ? CD_MASK_ORIGINDEX : 0));
- /* add cloth rest shape key if need */
+ /* add cloth rest shape key if needed */
if (mask & CD_MASK_CLOTH_ORCO)
add_orco_dm(ob, NULL, dm, clothorcodm, CD_CLOTH_ORCO);
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.c b/source/blender/blenkernel/intern/mesh_evaluate.c
index b2c1e5df583..ca3eda7ad7a 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.c
+++ b/source/blender/blenkernel/intern/mesh_evaluate.c
@@ -2674,16 +2674,16 @@ int BKE_mesh_recalc_tessellation(
}
}
- /* NOTE: quad detection issue - forth vertidx vs forth loopidx:
+ /* NOTE: quad detection issue - fourth vertidx vs fourth loopidx:
* Polygons take care of their loops ordering, hence not of their vertices ordering.
- * Currently, our tfaces' forth vertex index might be 0 even for a quad. However, we know our forth loop index is
+ * Currently, our tfaces' fourth vertex index might be 0 even for a quad. However, we know our fourth loop index is
* never 0 for quads (because they are sorted for polygons, and our quads are still mere copies of their polygons).
- * So we pass NULL as MFace pointer, and BKE_mesh_loops_to_tessdata will use the forth loop index as quad test.
+ * So we pass NULL as MFace pointer, and BKE_mesh_loops_to_tessdata will use the fourth loop index as quad test.
* ...
*/
BKE_mesh_loops_to_tessdata(fdata, ldata, pdata, NULL, mface_to_poly_map, lindices, totface);
- /* NOTE: quad detection issue - forth vertidx vs forth loopidx:
+ /* NOTE: quad detection issue - fourth vertidx vs fourth loopidx:
* ...However, most TFace code uses 'MFace->v4 == 0' test to check whether it is a tri or quad.
* test_index_face() will check this and rotate the tessellated face if needed.
*/
diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c
index d5896dd0b31..84d69fa65d4 100644
--- a/source/blender/bmesh/intern/bmesh_core.c
+++ b/source/blender/bmesh/intern/bmesh_core.c
@@ -519,8 +519,8 @@ BMFace *BM_face_create_verts(
/**
* Check the element is valid.
*
- * BMESH_TODO, when this raises an error the output is incredible confusing.
- * need to have some nice way to print/debug what the hecks going on.
+ * BMESH_TODO, when this raises an error the output is incredibly confusing.
+ * need to have some nice way to print/debug what the heck's going on.
*/
int bmesh_elem_check(void *element, const char htype)
{
@@ -2560,7 +2560,7 @@ void BM_vert_separate_hflag(
do {
BMLoop *l_sep = e->l;
bmesh_edge_separate(bm, e, l_sep, copy_select);
- /* trick to avoid looping over seperated edges */
+ /* trick to avoid looping over separated edges */
if (edges_separate == NULL && edges_orig == NULL) {
e_first = l_sep->e;
}
@@ -2833,7 +2833,7 @@ BMVert *bmesh_urmv_loop_multi(
}
if (is_mixed_any == false) {
- /* all loops in 'larr' are the soul owners of their edges.
+ /* all loops in 'larr' are the sole owners of their edges.
* nothing to split away from, this is a no-op */
v_new = v_sep;
}
diff --git a/source/blender/editors/interface/interface_align.c b/source/blender/editors/interface/interface_align.c
index e9d601457b4..500744c366d 100644
--- a/source/blender/editors/interface/interface_align.c
+++ b/source/blender/editors/interface/interface_align.c
@@ -102,7 +102,7 @@ enum {
/* 0: LEFT/RIGHT sides; 1 = TOP/DOWN sides. */
#define IS_COLUMN(_s) ((_s) % 2)
-/* Stich flag from side value. */
+/* Stitch flag from side value. */
#define STITCH(_s) (1 << (_s))
/* Max distance between to buttons for them to be 'mergeable'. */
@@ -151,8 +151,8 @@ static void block_align_proximity_compute(ButAlign *butal, ButAlign *butal_other
side_opp = OPPOSITE(side);
/* We check both opposite sides at once, because with very small buttons, delta could be below max_delta for
- * the wrong side (that is, in horizontal case, the total width of two buttons can be below max_delta). */
- /* We rely on exact zero value here as an 'already processed' flag, so ensure we never actually
+ * the wrong side (that is, in horizontal case, the total width of two buttons can be below max_delta).
+ * We rely on exact zero value here as an 'already processed' flag, so ensure we never actually
* set a zero value at this stage. FLT_MIN is zero-enough for UI position computing. ;) */
delta = max_ff(fabsf(*butal->borders[side] - *butal_other->borders[side_opp]), FLT_MIN);
delta_side_opp = max_ff(fabsf(*butal->borders[side_opp] - *butal_other->borders[side]), FLT_MIN);
@@ -399,7 +399,7 @@ void ui_block_align_calc(uiBlock *block)
}
}
- /* Forth loop: we have all our 'aligned' buttons as a 'map' in butal_array. We need to:
+ /* Fourth loop: we have all our 'aligned' buttons as a 'map' in butal_array. We need to:
* - update their relevant coordinates to stitch them.
* - assign them valid flags.
*/
@@ -568,7 +568,7 @@ static void ui_block_align_calc_but(uiBut *first, short nr)
flag |= UI_BUT_ALIGN_TOP;
}
- if ((flag & UI_BUT_ALIGN_TOP) == 0) { /* stil top row */
+ if ((flag & UI_BUT_ALIGN_TOP) == 0) { /* still top row */
if (prev) {
if (next && buts_are_horiz(but, next))
flag = UI_BUT_ALIGN_DOWN | UI_BUT_ALIGN_LEFT | UI_BUT_ALIGN_RIGHT;
diff --git a/source/blender/editors/uvedit/uvedit_smart_stitch.c b/source/blender/editors/uvedit/uvedit_smart_stitch.c
index 65cb8a93095..f9d046be86e 100644
--- a/source/blender/editors/uvedit/uvedit_smart_stitch.c
+++ b/source/blender/editors/uvedit/uvedit_smart_stitch.c
@@ -87,7 +87,7 @@ typedef struct StitchPreviewer {
unsigned int num_stitchable;
unsigned int num_unstitchable;
unsigned int preview_uvs;
- /* ...and here we'll store the static island triangles*/
+ /* ...and here we'll store the static island triangles */
float *static_tris;
unsigned int num_static_tris;
} StitchPreviewer;
@@ -95,7 +95,7 @@ typedef struct StitchPreviewer {
struct IslandStitchData;
-/* This is a straightforward implementation, count the uv's in the island that will move and take the mean displacement/rotation and apply it to all
+/* This is a straightforward implementation, count the UVs in the island that will move and take the mean displacement/rotation and apply it to all
* elements of the island except from the stitchable */
typedef struct IslandStitchData {
/* rotation can be used only for edges, for vertices there is no such notion */
@@ -145,7 +145,7 @@ typedef struct StitchState {
float limit_dist;
/* snap uv islands together during stitching */
bool snap_islands;
- /* stich at midpoints or at islands */
+ /* stitch at midpoints or at islands */
bool midpoints;
/* editmesh, cached for use in modal handler */
BMEditMesh *em;
@@ -781,8 +781,8 @@ static void stitch_setup_face_preview_for_uv_group(UvElement *element, StitchSta
/* checks if uvs are indeed stitchable and registers so that they can be shown in preview */
-static void stitch_validate_uv_stichability(UvElement *element, StitchState *state, IslandStitchData *island_stitch_data,
- PreviewPosition *preview_position)
+static void stitch_validate_uv_stitchability(UvElement *element, StitchState *state, IslandStitchData *island_stitch_data,
+ PreviewPosition *preview_position)
{
UvElement *element_iter;
StitchPreviewer *preview = state->stitch_preview;
@@ -817,8 +817,8 @@ static void stitch_validate_uv_stichability(UvElement *element, StitchState *sta
}
-static void stitch_validate_edge_stichability(UvEdge *edge, StitchState *state, IslandStitchData *island_stitch_data,
- PreviewPosition *preview_position)
+static void stitch_validate_edge_stitchability(UvEdge *edge, StitchState *state, IslandStitchData *island_stitch_data,
+ PreviewPosition *preview_position)
{
UvEdge *edge_iter = edge->first;
StitchPreviewer *preview = state->stitch_preview;
@@ -957,7 +957,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final)
UvElement *element = (UvElement *)state->selection_stack[i];
if (element->flag & STITCH_STITCHABLE_CANDIDATE) {
element->flag &= ~STITCH_STITCHABLE_CANDIDATE;
- stitch_validate_uv_stichability(element, state, island_stitch_data, preview_position);
+ stitch_validate_uv_stitchability(element, state, island_stitch_data, preview_position);
}
else {
/* add to preview for unstitchable */
@@ -968,7 +968,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final)
UvEdge *edge = (UvEdge *)state->selection_stack[i];
if (edge->flag & STITCH_STITCHABLE_CANDIDATE) {
edge->flag &= ~STITCH_STITCHABLE_CANDIDATE;
- stitch_validate_edge_stichability(edge, state, island_stitch_data, preview_position);
+ stitch_validate_edge_stitchability(edge, state, island_stitch_data, preview_position);
}
else {
preview->num_unstitchable++;
@@ -1006,8 +1006,8 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final)
/* initialize the preview buffers */
preview->preview_polys = (float *)MEM_mallocN(preview->preview_uvs * sizeof(float) * 2, "tri_uv_stitch_prev");
preview->uvs_per_polygon = MEM_mallocN(preview->num_polys * sizeof(*preview->uvs_per_polygon), "tri_uv_stitch_prev");
- preview->preview_stitchable = (float *)MEM_mallocN(preview->num_stitchable * sizeof(float) * preview_size, "stitch_preview_stichable_data");
- preview->preview_unstitchable = (float *)MEM_mallocN(preview->num_unstitchable * sizeof(float) * preview_size, "stitch_preview_unstichable_data");
+ preview->preview_stitchable = (float *)MEM_mallocN(preview->num_stitchable * sizeof(float) * preview_size, "stitch_preview_stitchable_data");
+ preview->preview_unstitchable = (float *)MEM_mallocN(preview->num_unstitchable * sizeof(float) * preview_size, "stitch_preview_unstitchable_data");
preview->static_tris = (float *)MEM_mallocN(state->tris_per_island[state->static_island] * sizeof(float) * 6, "static_island_preview_tris");
@@ -1019,7 +1019,7 @@ static int stitch_process_data(StitchState *state, Scene *scene, int final)
/* copy data from MLoopUVs to the preview display buffers */
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
- /* just to test if face was added for processing. uvs of inselected vertices will return NULL */
+ /* just to test if face was added for processing. uvs of unselected vertices will return NULL */
UvElement *element = BM_uv_element_get(state->element_map, efa, BM_FACE_FIRST_LOOP(efa));
if (element) {
@@ -2120,7 +2120,7 @@ static int stitch_modal(bContext *C, wmOperator *op, const wmEvent *event)
return OPERATOR_PASS_THROUGH;
}
- /* Use Limit (Default off)*/
+ /* Use Limit (Default off) */
case LKEY:
if (event->val == KM_PRESS) {
state->use_limit = !state->use_limit;
@@ -2155,7 +2155,7 @@ static int stitch_modal(bContext *C, wmOperator *op, const wmEvent *event)
}
break;
- /* Select geometry*/
+ /* Select geometry */
case RIGHTMOUSE:
if (!event->shift) {
stitch_cancel(C, op);
diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c
index e2d56d29726..d5ff427f204 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -127,9 +127,9 @@ static void free_anim_movie(struct anim *UNUSED(anim))
#if defined(_WIN32)
-# define PATHSEPERATOR '\\'
+# define PATHSEPARATOR '\\'
#else
-# define PATHSEPERATOR '/'
+# define PATHSEPARATOR '/'
#endif
static int an_stringdec(const char *string, char *head, char *tail, unsigned short *numlen)
@@ -142,7 +142,7 @@ static int an_stringdec(const char *string, char *head, char *tail, unsigned sho
nume = len;
for (i = len - 1; i >= 0; i--) {
- if (string[i] == PATHSEPERATOR) break;
+ if (string[i] == PATHSEPARATOR) break;
if (isdigit(string[i])) {
if (found) {
nums = i;
@@ -826,7 +826,7 @@ static int ffmpeg_decode_video_frame(struct anim *anim)
* which is necessary to decode the remaining data
* in the decoder engine after EOF. It also prevents a memory
* leak, since av_read_frame spills out a full size packet even
- * on EOF... (and: it's save to call on NULL packets) */
+ * on EOF... (and: it's safe to call on NULL packets) */
av_free_packet(&anim->next_packet);
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 48ad5977b07..46b7d717991 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -124,7 +124,7 @@ typedef struct SpaceButs {
short mainb, mainbo, mainbuser; /* context tabs */
short re_align, align; /* align for panels */
short preview; /* preview is signal to refresh */
- /* texture context selector (material, lamp, particles, world, other)*/
+ /* texture context selector (material, lamp, particles, world, other) */
short texture_context, texture_context_prev;
char flag, pad[7];
@@ -650,7 +650,7 @@ typedef struct SpaceFile {
short systemnr, system_bookmarknr;
} SpaceFile;
-/* FSMenuEntry's without paths indicate seperators */
+/* FSMenuEntry's without paths indicate separators */
typedef struct FSMenuEntry {
struct FSMenuEntry *next;
@@ -853,7 +853,7 @@ typedef struct FileDirEntryArr {
/* FileDirEntry.status */
enum {
- ASSET_STATUS_LOCAL = 1 << 0, /* If active uuid is available localy/immediately. */
+ ASSET_STATUS_LOCAL = 1 << 0, /* If active uuid is available locally/immediately. */
ASSET_STATUS_LATEST = 1 << 1, /* If active uuid is latest available version. */
};
@@ -924,7 +924,7 @@ typedef enum eSpaceImage_Mode {
/* SpaceImage->sticky
* Note DISABLE should be 0, however would also need to re-arrange icon order,
- * also, sticky loc is the default mode so this means we don't need to 'do_versons' */
+ * also, sticky loc is the default mode so this means we don't need to 'do_versions' */
typedef enum eSpaceImage_Sticky {
SI_STICKY_LOC = 0,
SI_STICKY_DISABLE = 1,
@@ -957,7 +957,7 @@ typedef enum eSpaceImage_Flag {
/* SI_DEPRECATED5 = (1 << 18), */ /* deprecated */
/* this means that the image is drawn until it reaches the view edge,
- * in the image view, its unrelated to the 'tile' mode for texface
+ * in the image view, it's unrelated to the 'tile' mode for texface
*/
SI_DRAW_TILE = (1 << 19),
SI_SMOOTH_UV = (1 << 20),
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 52b84fa4a45..51aba737fa8 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -2650,7 +2650,7 @@ static void rna_def_space_view3d(BlenderRNA *brna)
"rna_iterator_listbase_end", "rna_SpaceView3D_region_quadviews_get",
NULL, NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Quad View Regions", "3D regions (the third one defines quad view settings, "
- "the forth one is same as 'region_3d')");
+ "the fourth one is same as 'region_3d')");
prop = RNA_def_property(srna, "show_reconstruction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_RECONSTRUCTION);
diff --git a/source/blender/python/intern/bpy_props.c b/source/blender/python/intern/bpy_props.c
index 529ee3bae9a..ce9b3e754ac 100644
--- a/source/blender/python/intern/bpy_props.c
+++ b/source/blender/python/intern/bpy_props.c
@@ -2630,7 +2630,7 @@ PyDoc_STRVAR(BPy_EnumProperty_doc,
" [(identifier, name, description, icon, number), ...] where the identifier is used\n"
" for python access and other values are used for the interface.\n"
" The three first elements of the tuples are mandatory.\n"
-" The forth one is either the (unique!) number id of the item or, if followed by a fith element\n"
+" The fourth one is either the (unique!) number id of the item or, if followed by a fith element\n"
" (which must be the numid), an icon string identifier or integer icon value (e.g. returned by icon()...).\n"
" Note the item is optional.\n"
" For dynamic values a callback can be passed which returns a list in\n"
diff --git a/source/blender/python/mathutils/mathutils_geometry.c b/source/blender/python/mathutils/mathutils_geometry.c
index ce9a9b519d8..868e4b38408 100644
--- a/source/blender/python/mathutils/mathutils_geometry.c
+++ b/source/blender/python/mathutils/mathutils_geometry.c
@@ -872,7 +872,7 @@ PyDoc_STRVAR(M_Geometry_intersect_point_quad_2d_doc,
" :type quad_p2: :class:`mathutils.Vector`\n"
" :arg quad_p3: Third point of the quad\n"
" :type quad_p3: :class:`mathutils.Vector`\n"
-" :arg quad_p4: Forth point of the quad\n"
+" :arg quad_p4: Fourth point of the quad\n"
" :type quad_p4: :class:`mathutils.Vector`\n"
" :rtype: int\n"
);
diff --git a/source/blender/render/intern/include/zbuf.h b/source/blender/render/intern/include/zbuf.h
index cf804d75d70..6fc1a4c2656 100644
--- a/source/blender/render/intern/include/zbuf.h
+++ b/source/blender/render/intern/include/zbuf.h
@@ -95,7 +95,7 @@ typedef struct ZSpan {
float zmulx, zmuly, zofsx, zofsy; /* transform from hoco to zbuf co */
int *rectz, *arectz; /* zbuffers, arectz is for transparent */
- int *rectz1; /* seconday z buffer for shadowbuffer (2nd closest z) */
+ int *rectz1; /* secondary z buffer for shadowbuffer (2nd closest z) */
int *rectp; /* polygon index buffer */
int *recto; /* object buffer */
int *rectmask; /* negative zmask buffer */
@@ -142,7 +142,7 @@ void zbufclipwire(struct ZSpan *zspan, int obi, int zvlnr, int ec,
void zbuf_make_winmat(Render *re, float winmat[4][4]);
void zbuf_render_project(float winmat[4][4], const float co[3], float ho[4]);
-/* sould not really be exposed, bad! */
+/* should not really be exposed, bad! */
void hoco_to_zco(ZSpan *zspan, float zco[3], const float hoco[4]);
void zspan_scanconvert_strand(ZSpan *zspan, void *handle, float *v1, float *v2, float *v3, void (*func)(void *, int, int, float, float, float) );
void zbufsinglewire(ZSpan *zspan, int obi, int zvlnr, const float ho1[4], const float ho2[4]);