forked from bartvdbraak/blender
code cleanup: use float sizes for function args.
This commit is contained in:
parent
59ea74fd6f
commit
92862f96dc
@ -349,7 +349,7 @@ struct bNodeSocket *nodeInsertSocket(struct bNodeTree *ntree, struct bNode *node
|
||||
void nodeRemoveSocket(struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock);
|
||||
void nodeRemoveAllSockets(struct bNodeTree *ntree, struct bNode *node);
|
||||
|
||||
void nodeAddToPreview(struct bNode *node, float col[4], int x, int y, int do_manage);
|
||||
void nodeAddToPreview(struct bNode *node, const float col[4], int x, int y, int do_manage);
|
||||
|
||||
struct bNode *nodeAddNode(struct bNodeTree *ntree, struct bNodeTemplate *ntemp);
|
||||
void nodeUnlinkNode(struct bNodeTree *ntree, struct bNode *node);
|
||||
@ -785,7 +785,9 @@ void ntreeTexCheckCyclics(struct bNodeTree *ntree);
|
||||
|
||||
struct bNodeTreeExec *ntreeTexBeginExecTree(struct bNodeTree *ntree, int use_tree_data);
|
||||
void ntreeTexEndExecTree(struct bNodeTreeExec *exec, int use_tree_data);
|
||||
int ntreeTexExecTree(struct bNodeTree *ntree, struct TexResult *target, float *coord, float *dxt, float *dyt, int osatex, short thread, struct Tex *tex, short which_output, int cfra, int preview, struct ShadeInput *shi, struct MTex *mtex);
|
||||
int ntreeTexExecTree(struct bNodeTree *ntree, struct TexResult *target,
|
||||
float coord[3], float dxt[3], float dyt[3], int osatex, const short thread,
|
||||
struct Tex *tex, short which_output, int cfra, int preview, struct ShadeInput *shi, struct MTex *mtex);
|
||||
|
||||
|
||||
/*************************************************/
|
||||
|
@ -889,7 +889,7 @@ void ntreeClearPreview(bNodeTree *ntree)
|
||||
/* hack warning! this function is only used for shader previews, and
|
||||
* since it gets called multiple times per pixel for Ztransp we only
|
||||
* add the color once. Preview gets cleared before it starts render though */
|
||||
void nodeAddToPreview(bNode *node, float col[4], int x, int y, int do_manage)
|
||||
void nodeAddToPreview(bNode *node, const float col[4], int x, int y, int do_manage)
|
||||
{
|
||||
bNodePreview *preview = node->preview;
|
||||
if (preview) {
|
||||
|
@ -1054,7 +1054,7 @@ static void emit_from_particles(Object *flow_ob, SmokeDomainSettings *sds, Smoke
|
||||
}
|
||||
}
|
||||
|
||||
static void get_texture_value(Tex *texture, float *tex_co, TexResult *texres)
|
||||
static void get_texture_value(Tex *texture, float tex_co[3], TexResult *texres)
|
||||
{
|
||||
int result_type;
|
||||
|
||||
|
@ -75,7 +75,7 @@ typedef struct BVHTreeRayHit {
|
||||
} BVHTreeRayHit;
|
||||
|
||||
/* callback must update nearest in case it finds a nearest result */
|
||||
typedef void (*BVHTree_NearestPointCallback)(void *userdata, int index, const float *co, BVHTreeNearest *nearest);
|
||||
typedef void (*BVHTree_NearestPointCallback)(void *userdata, int index, const float co[3], BVHTreeNearest *nearest);
|
||||
|
||||
/* callback must update hit in case it finds a nearest successful hit */
|
||||
typedef void (*BVHTree_RayCastCallback)(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit);
|
||||
@ -87,11 +87,11 @@ BVHTree *BLI_bvhtree_new(int maxsize, float epsilon, char tree_type, char axis);
|
||||
void BLI_bvhtree_free(BVHTree *tree);
|
||||
|
||||
/* construct: first insert points, then call balance */
|
||||
int BLI_bvhtree_insert(BVHTree *tree, int index, const float *co, int numpoints);
|
||||
int BLI_bvhtree_insert(BVHTree *tree, int index, const float co[3], int numpoints);
|
||||
void BLI_bvhtree_balance(BVHTree *tree);
|
||||
|
||||
/* update: first update points/nodes, then call update_tree to refit the bounding volumes */
|
||||
int BLI_bvhtree_update_node(BVHTree *tree, int index, const float *co, const float *co_moving, int numpoints);
|
||||
int BLI_bvhtree_update_node(BVHTree *tree, int index, const float co[3], const float co_moving[3], int numpoints);
|
||||
void BLI_bvhtree_update_tree(BVHTree *tree);
|
||||
|
||||
/* collision/overlap: check two trees if they overlap, alloc's *overlap with length of the int return value */
|
||||
@ -99,15 +99,19 @@ BVHTreeOverlap *BLI_bvhtree_overlap(BVHTree *tree1, BVHTree *tree2, unsigned int
|
||||
|
||||
float BLI_bvhtree_getepsilon(BVHTree *tree);
|
||||
|
||||
/* find nearest node to the given coordinates (if nearest is given it will only search nodes where square distance is smaller than nearest->dist) */
|
||||
int BLI_bvhtree_find_nearest(BVHTree *tree, const float co[3], BVHTreeNearest *nearest, BVHTree_NearestPointCallback callback, void *userdata);
|
||||
/* find nearest node to the given coordinates
|
||||
* (if nearest is given it will only search nodes where square distance is smaller than nearest->dist) */
|
||||
int BLI_bvhtree_find_nearest(BVHTree *tree, const float co[3], BVHTreeNearest *nearest,
|
||||
BVHTree_NearestPointCallback callback, void *userdata);
|
||||
|
||||
int BLI_bvhtree_ray_cast(BVHTree *tree, const float co[3], const float *dir, float radius, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata);
|
||||
int BLI_bvhtree_ray_cast(BVHTree *tree, const float co[3], const float dir[3], float radius, BVHTreeRayHit *hit,
|
||||
BVHTree_RayCastCallback callback, void *userdata);
|
||||
|
||||
float BLI_bvhtree_bb_raycast(const float *bv, const float light_start[3], const float light_end[3], float pos[3]);
|
||||
float BLI_bvhtree_bb_raycast(const float bv[6], const float light_start[3], const float light_end[3], float pos[3]);
|
||||
|
||||
/* range query */
|
||||
int BLI_bvhtree_range_query(BVHTree *tree, const float co[3], float radius, BVHTree_RangeQuery callback, void *userdata);
|
||||
int BLI_bvhtree_range_query(BVHTree *tree, const float co[3], float radius,
|
||||
BVHTree_RangeQuery callback, void *userdata);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ void BLI_kdtree_balance(KDTree *tree);
|
||||
/* Find nearest returns index, and -1 if no node is found.
|
||||
* Find n nearest returns number of points found, with results in nearest.
|
||||
* Normal is optional, but if given will limit results to points in normal direction from co. */
|
||||
int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest *nearest);
|
||||
int BLI_kdtree_find_nearest(KDTree *tree, const float co[3], const float nor[3], KDTreeNearest *nearest);
|
||||
int BLI_kdtree_find_n_nearest(KDTree *tree, int n, const float co[3], const float nor[3], KDTreeNearest *nearest);
|
||||
|
||||
/* Range search returns number of points found, with results in nearest */
|
||||
|
@ -921,7 +921,7 @@ void BLI_bvhtree_balance(BVHTree *tree)
|
||||
/* bvhtree_info(tree); */
|
||||
}
|
||||
|
||||
int BLI_bvhtree_insert(BVHTree *tree, int index, const float *co, int numpoints)
|
||||
int BLI_bvhtree_insert(BVHTree *tree, int index, const float co[3], int numpoints)
|
||||
{
|
||||
int i;
|
||||
BVHNode *node = NULL;
|
||||
@ -952,7 +952,7 @@ int BLI_bvhtree_insert(BVHTree *tree, int index, const float *co, int numpoints)
|
||||
|
||||
|
||||
/* call before BLI_bvhtree_update_tree() */
|
||||
int BLI_bvhtree_update_node(BVHTree *tree, int index, const float *co, const float *co_moving, int numpoints)
|
||||
int BLI_bvhtree_update_node(BVHTree *tree, int index, const float co[3], const float co_moving[3], int numpoints)
|
||||
{
|
||||
int i;
|
||||
BVHNode *node = NULL;
|
||||
@ -1346,7 +1346,7 @@ int BLI_bvhtree_find_nearest(BVHTree *tree, const float co[3], BVHTreeNearest *n
|
||||
|
||||
|
||||
/* Determines the distance that the ray must travel to hit the bounding volume of the given node */
|
||||
static float ray_nearest_hit(BVHRayCastData *data, const float *bv)
|
||||
static float ray_nearest_hit(BVHRayCastData *data, const float bv[6])
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -1524,7 +1524,7 @@ int BLI_bvhtree_ray_cast(BVHTree *tree, const float co[3], const float dir[3], f
|
||||
return data.hit.index;
|
||||
}
|
||||
|
||||
float BLI_bvhtree_bb_raycast(const float *bv, const float light_start[3], const float light_end[3], float pos[3])
|
||||
float BLI_bvhtree_bb_raycast(const float bv[6], const float light_start[3], const float light_end[3], float pos[3])
|
||||
{
|
||||
BVHRayCastData data;
|
||||
float dist = 0.0;
|
||||
|
@ -132,7 +132,7 @@ void BLI_kdtree_balance(KDTree *tree)
|
||||
tree->root = kdtree_balance(tree->nodes, tree->totnode, 0);
|
||||
}
|
||||
|
||||
static float squared_distance(const float v2[3], const float v1[3], const float *UNUSED(n1), const float *n2)
|
||||
static float squared_distance(const float v2[3], const float v1[3], const float UNUSED(n1[3]), const float n2[3])
|
||||
{
|
||||
float d[3], dist;
|
||||
|
||||
@ -152,7 +152,7 @@ static float squared_distance(const float v2[3], const float v1[3], const float
|
||||
return dist;
|
||||
}
|
||||
|
||||
int BLI_kdtree_find_nearest(KDTree *tree, float *co, float *nor, KDTreeNearest *nearest)
|
||||
int BLI_kdtree_find_nearest(KDTree *tree, const float co[3], const float nor[3], KDTreeNearest *nearest)
|
||||
{
|
||||
KDTreeNode *root, *node, *min_node;
|
||||
KDTreeNode **stack, *defaultstack[100];
|
||||
|
@ -45,7 +45,7 @@ protected:
|
||||
*/
|
||||
MathBaseOperation();
|
||||
|
||||
void clampIfNeeded(float *color);
|
||||
void clampIfNeeded(float color[4]);
|
||||
public:
|
||||
/**
|
||||
* the inner loop of this program
|
||||
|
@ -40,7 +40,7 @@ protected:
|
||||
bool m_valueAlphaMultiply;
|
||||
bool m_useClamp;
|
||||
|
||||
inline void clampIfNeeded(float *color)
|
||||
inline void clampIfNeeded(float color[4])
|
||||
{
|
||||
if (m_useClamp) {
|
||||
CLAMP(color[0], 0.0f, 1.0f);
|
||||
|
@ -45,7 +45,7 @@ enum PF_FileStatus
|
||||
PF_EQUAL = 0,
|
||||
PF_DIFFERS = 1,
|
||||
PF_NOFILE = 2,
|
||||
|
||||
|
||||
PF_WRITE_ORIGINAL = 3,
|
||||
PF_WRITE_LOCAL = 4,
|
||||
PF_USE_LOCAL = 5,
|
||||
@ -53,7 +53,7 @@ enum PF_FileStatus
|
||||
PF_KEEP = 7,
|
||||
PF_REMOVE = 8,
|
||||
PF_NOOP = 9,
|
||||
|
||||
|
||||
PF_ASK = 10
|
||||
};
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
* 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.
|
||||
* 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
|
||||
@ -240,19 +240,19 @@ void ntreeTexEndExecTree(bNodeTreeExec *exec, int use_tree_data)
|
||||
}
|
||||
|
||||
int ntreeTexExecTree(
|
||||
bNodeTree *nodes,
|
||||
TexResult *texres,
|
||||
float *co,
|
||||
float *dxt, float *dyt,
|
||||
int osatex,
|
||||
short thread,
|
||||
Tex *UNUSED(tex),
|
||||
short which_output,
|
||||
int cfra,
|
||||
int preview,
|
||||
ShadeInput *shi,
|
||||
MTex *mtex
|
||||
) {
|
||||
bNodeTree *nodes,
|
||||
TexResult *texres,
|
||||
float co[3],
|
||||
float dxt[3], float dyt[3],
|
||||
int osatex,
|
||||
const short thread,
|
||||
Tex *UNUSED(tex),
|
||||
short which_output,
|
||||
int cfra,
|
||||
int preview,
|
||||
ShadeInput *shi,
|
||||
MTex *mtex)
|
||||
{
|
||||
TexCallData data;
|
||||
float *nor = texres->nor;
|
||||
int retval = TEX_INT;
|
||||
|
@ -4,7 +4,7 @@
|
||||
* 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.
|
||||
* 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
|
||||
@ -29,7 +29,7 @@
|
||||
* \ingroup nodes
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* HOW TEXTURE NODES WORK
|
||||
*
|
||||
@ -112,13 +112,13 @@ void params_from_cdata(TexParams *out, TexCallData *in)
|
||||
out->mtex = in->mtex;
|
||||
}
|
||||
|
||||
void tex_do_preview(bNode *node, float *co, float *col)
|
||||
void tex_do_preview(bNode *node, const float coord[2], const float col[4])
|
||||
{
|
||||
bNodePreview *preview= node->preview;
|
||||
bNodePreview *preview = node->preview;
|
||||
|
||||
if (preview) {
|
||||
int xs= ((co[0] + 1.0f)*0.5f)*preview->xsize;
|
||||
int ys= ((co[1] + 1.0f)*0.5f)*preview->ysize;
|
||||
int xs = ((coord[0] + 1.0f) * 0.5f) * preview->xsize;
|
||||
int ys = ((coord[1] + 1.0f) * 0.5f) * preview->ysize;
|
||||
|
||||
nodeAddToPreview(node, col, xs, ys, 0); /* 0 = no color management */
|
||||
}
|
||||
@ -132,19 +132,19 @@ void tex_output(bNode *node, bNodeStack **in, bNodeStack *out, TexFn texfn, TexC
|
||||
dg = out->data = MEM_mallocN(sizeof(TexDelegate), "tex delegate");
|
||||
else
|
||||
dg = out->data;
|
||||
|
||||
dg->cdata= cdata;
|
||||
|
||||
dg->cdata = cdata;
|
||||
dg->fn = texfn;
|
||||
dg->node = node;
|
||||
memcpy(dg->in, in, MAX_SOCKET * sizeof(bNodeStack*));
|
||||
memcpy(dg->in, in, MAX_SOCKET * sizeof(bNodeStack *));
|
||||
dg->type = out->sockettype;
|
||||
}
|
||||
|
||||
void ntreeTexCheckCyclics(struct bNodeTree *ntree)
|
||||
{
|
||||
bNode *node;
|
||||
for (node= ntree->nodes.first; node; node= node->next) {
|
||||
|
||||
for (node = ntree->nodes.first; node; node = node->next) {
|
||||
|
||||
if (node->type == TEX_NODE_TEXTURE && node->id) {
|
||||
/* custom2 stops the node from rendering */
|
||||
if (node->custom1) {
|
||||
|
@ -79,8 +79,10 @@
|
||||
|
||||
typedef struct TexCallData {
|
||||
TexResult *target;
|
||||
/* all float[3] */
|
||||
float *co;
|
||||
float *dxt, *dyt;
|
||||
|
||||
int osatex;
|
||||
char do_preview;
|
||||
short thread;
|
||||
@ -94,7 +96,7 @@ typedef struct TexCallData {
|
||||
typedef struct TexParams {
|
||||
float *co;
|
||||
float *dxt, *dyt;
|
||||
float *previewco;
|
||||
const float *previewco;
|
||||
int cfra;
|
||||
int osatex;
|
||||
|
||||
@ -119,7 +121,7 @@ void tex_input_vec(float *out, bNodeStack *in, TexParams *params, short thread);
|
||||
float tex_input_value(bNodeStack *in, TexParams *params, short thread);
|
||||
|
||||
void tex_output(bNode *node, bNodeStack **in, bNodeStack *out, TexFn texfn, TexCallData *data);
|
||||
void tex_do_preview(bNode *node, float *coord, float *col);
|
||||
void tex_do_preview(bNode *node, const float coord[2], const float col[4]);
|
||||
|
||||
void params_from_cdata(TexParams *out, TexCallData *in);
|
||||
|
||||
|
@ -66,7 +66,7 @@ static float noise(int n) /* fast integer noise */
|
||||
|
||||
static void colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in, short thread)
|
||||
{
|
||||
float *co = p->co;
|
||||
const float *co = p->co;
|
||||
|
||||
float x = co[0];
|
||||
float y = co[1];
|
||||
|
@ -57,7 +57,7 @@ static bNodeSocketTemplate outputs_color_only[]= {
|
||||
{ SOCK_RGBA, 1, "Color 2", 1.0f, 1.0f, 1.0f, 1.0f }
|
||||
|
||||
/* Calls multitex and copies the result to the outputs. Called by xxx_exec, which handles inputs. */
|
||||
static void do_proc(float *result, TexParams *p, float *col1, float *col2, char is_normal, Tex *tex, short thread)
|
||||
static void do_proc(float *result, TexParams *p, const float col1[4], const float col2[4], char is_normal, Tex *tex, const short thread)
|
||||
{
|
||||
TexResult texres;
|
||||
int textype;
|
||||
@ -69,7 +69,7 @@ static void do_proc(float *result, TexParams *p, float *col1, float *col2, char
|
||||
texres.nor = NULL;
|
||||
|
||||
textype = multitex_nodes(tex, p->co, p->dxt, p->dyt, p->osatex,
|
||||
&texres, thread, 0, p->shi, p->mtex);
|
||||
&texres, thread, 0, p->shi, p->mtex);
|
||||
|
||||
if (is_normal)
|
||||
return;
|
||||
@ -83,7 +83,7 @@ static void do_proc(float *result, TexParams *p, float *col1, float *col2, char
|
||||
}
|
||||
}
|
||||
|
||||
typedef void (*MapFn) (Tex *tex, bNodeStack **in, TexParams *p, short thread);
|
||||
typedef void (*MapFn) (Tex *tex, bNodeStack **in, TexParams *p, const short thread);
|
||||
|
||||
static void texfn(
|
||||
float *result,
|
||||
|
@ -47,7 +47,7 @@ static bNodeSocketTemplate outputs[]= {
|
||||
{ -1, 0, "" }
|
||||
};
|
||||
|
||||
static void rotate(float new_co[3], float a, float ax[3], float co[3])
|
||||
static void rotate(float new_co[3], float a, float ax[3], const float co[3])
|
||||
{
|
||||
float para[3];
|
||||
float perp[3];
|
||||
|
@ -47,7 +47,7 @@ static bNodeSocketTemplate outputs[]= {
|
||||
static void normalfn(float *out, TexParams *p, bNode *UNUSED(node), bNodeStack **in, short thread)
|
||||
{
|
||||
float new_co[3];
|
||||
float *co = p->co;
|
||||
const float *co = p->co;
|
||||
|
||||
float nabla = tex_input_value(in[1], p, thread);
|
||||
float val;
|
||||
|
@ -858,7 +858,7 @@ PyTypeObject color_Type = {
|
||||
* (i.e. it was allocated elsewhere by MEM_mallocN())
|
||||
* pass Py_NEW - if vector is not a WRAPPER and managed by PYTHON
|
||||
* (i.e. it must be created here with PyMEM_malloc())*/
|
||||
PyObject *Color_CreatePyObject(float *col, int type, PyTypeObject *base_type)
|
||||
PyObject *Color_CreatePyObject(float col[3], int type, PyTypeObject *base_type)
|
||||
{
|
||||
ColorObject *self;
|
||||
|
||||
|
@ -47,7 +47,7 @@ typedef struct {
|
||||
* blender (stored in blend_data). This is an either/or struct not both*/
|
||||
|
||||
//prototypes
|
||||
PyObject *Color_CreatePyObject(float *col, int type, PyTypeObject *base_type);
|
||||
PyObject *Color_CreatePyObject(float col[3], int type, PyTypeObject *base_type);
|
||||
PyObject *Color_CreatePyObject_cb(PyObject *cb_user,
|
||||
unsigned char cb_type, unsigned char cb_subtype);
|
||||
|
||||
|
@ -191,12 +191,12 @@ struct MTex;
|
||||
struct ImBuf;
|
||||
|
||||
/* this one uses nodes */
|
||||
int multitex_ext(struct Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, struct TexResult *texres);
|
||||
int multitex_ext(struct Tex *tex, float texvec[3], float dxt[3], float dyt[3], int osatex, struct TexResult *texres);
|
||||
/* nodes disabled */
|
||||
int multitex_ext_safe(struct Tex *tex, float *texvec, struct TexResult *texres);
|
||||
int multitex_ext_safe(struct Tex *tex, float texvec[3], struct TexResult *texres);
|
||||
/* only for internal node usage */
|
||||
int multitex_nodes(struct Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, struct TexResult *texres,
|
||||
short thread, short which_output, struct ShadeInput *shi, struct MTex *mtex);
|
||||
int multitex_nodes(struct Tex *tex, float texvec[3], float dxt[3], float dyt[3], int osatex, struct TexResult *texres,
|
||||
const short thread, short which_output, struct ShadeInput *shi, struct MTex *mtex);
|
||||
|
||||
/* shaded view and bake */
|
||||
struct Render;
|
||||
|
@ -46,7 +46,7 @@ struct Render;
|
||||
struct TexResult;
|
||||
|
||||
void make_envmaps(struct Render *re);
|
||||
int envmaptex(struct Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, struct TexResult *texres);
|
||||
int envmaptex(struct Tex *tex, const float texvec[3], float dxt[3], float dyt[3], int osatex, struct TexResult *texres);
|
||||
|
||||
#endif /* __ENVMAP_H__ */
|
||||
|
||||
|
@ -43,7 +43,7 @@ struct TexResult;
|
||||
void cache_pointdensity(struct Render *re, struct Tex *tex);
|
||||
void make_pointdensities(struct Render *re);
|
||||
void free_pointdensities(struct Render *re);
|
||||
int pointdensitytex(struct Tex *tex, float *texvec, struct TexResult *texres);
|
||||
int pointdensitytex(struct Tex *tex, const float texvec[3], struct TexResult *texres);
|
||||
|
||||
#endif /* __POINTDENSITY_H__ */
|
||||
|
||||
|
@ -60,7 +60,7 @@ void shade_material_loop(struct ShadeInput *shi, struct ShadeResult *shr);
|
||||
void shade_input_set_triangle_i(struct ShadeInput *shi, struct ObjectInstanceRen *obi, struct VlakRen *vlr, short i1, short i2, short i3);
|
||||
void shade_input_set_triangle(struct ShadeInput *shi, volatile int obi, volatile int facenr, int normal_flip);
|
||||
void shade_input_copy_triangle(struct ShadeInput *shi, struct ShadeInput *from);
|
||||
void shade_input_calc_viewco(struct ShadeInput *shi, float x, float y, float z, float view[3], float *dxyview, float *co, float *dxco, float *dyco);
|
||||
void shade_input_calc_viewco(struct ShadeInput *shi, float x, float y, float z, float view[3], float dxyview[2], float co[3], float dxco[3], float dyco[3]);
|
||||
void shade_input_set_viewco(struct ShadeInput *shi, float x, float y, float sx, float sy, float z);
|
||||
void shade_input_set_uv(struct ShadeInput *shi);
|
||||
void shade_input_set_normals(struct ShadeInput *shi);
|
||||
|
@ -643,31 +643,31 @@ static int envcube_isect(EnvMap *env, const float vec[3], float answ[2])
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
static void set_dxtdyt(float *dxts, float *dyts, float *dxt, float *dyt, int face)
|
||||
static void set_dxtdyt(float r_dxt[3], float r_dyt[3], const float dxt[3], const float dyt[3], int face)
|
||||
{
|
||||
if (face == 2 || face == 4) {
|
||||
dxts[0] = dxt[0];
|
||||
dyts[0] = dyt[0];
|
||||
dxts[1] = dxt[2];
|
||||
dyts[1] = dyt[2];
|
||||
r_dxt[0] = dxt[0];
|
||||
r_dyt[0] = dyt[0];
|
||||
r_dxt[1] = dxt[2];
|
||||
r_dyt[1] = dyt[2];
|
||||
}
|
||||
else if (face == 3 || face == 5) {
|
||||
dxts[0] = dxt[1];
|
||||
dxts[1] = dxt[2];
|
||||
dyts[0] = dyt[1];
|
||||
dyts[1] = dyt[2];
|
||||
r_dxt[0] = dxt[1];
|
||||
r_dxt[1] = dxt[2];
|
||||
r_dyt[0] = dyt[1];
|
||||
r_dyt[1] = dyt[2];
|
||||
}
|
||||
else {
|
||||
dxts[0] = dxt[0];
|
||||
dyts[0] = dyt[0];
|
||||
dxts[1] = dxt[1];
|
||||
dyts[1] = dyt[1];
|
||||
r_dxt[0] = dxt[0];
|
||||
r_dyt[0] = dyt[0];
|
||||
r_dxt[1] = dxt[1];
|
||||
r_dyt[1] = dyt[1];
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
int envmaptex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres)
|
||||
int envmaptex(Tex *tex, const float texvec[3], float dxt[3], float dyt[3], int osatex, TexResult *texres)
|
||||
{
|
||||
extern Render R; /* only in this call */
|
||||
/* texvec should be the already reflected normal */
|
||||
|
@ -406,7 +406,7 @@ static void init_pointdensityrangedata(PointDensity *pd, PointDensityRangeData *
|
||||
}
|
||||
|
||||
|
||||
int pointdensitytex(Tex *tex, float *texvec, TexResult *texres)
|
||||
int pointdensitytex(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
int retval = TEX_INT;
|
||||
PointDensity *pd = tex->pd;
|
||||
|
@ -185,7 +185,7 @@ static void tex_normal_derivate(Tex *tex, TexResult *texres)
|
||||
|
||||
|
||||
|
||||
static int blend(Tex *tex, float *texvec, TexResult *texres)
|
||||
static int blend(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
float x, y, t;
|
||||
|
||||
@ -237,7 +237,7 @@ static int blend(Tex *tex, float *texvec, TexResult *texres)
|
||||
|
||||
/* newnoise: all noisebased types now have different noisebases to choose from */
|
||||
|
||||
static int clouds(Tex *tex, float *texvec, TexResult *texres)
|
||||
static int clouds(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
int rv = TEX_INT;
|
||||
|
||||
@ -332,7 +332,7 @@ static float wood_int(Tex *tex, float x, float y, float z)
|
||||
return wi;
|
||||
}
|
||||
|
||||
static int wood(Tex *tex, float *texvec, TexResult *texres)
|
||||
static int wood(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
int rv=TEX_INT;
|
||||
|
||||
@ -383,7 +383,7 @@ static float marble_int(Tex *tex, float x, float y, float z)
|
||||
return mi;
|
||||
}
|
||||
|
||||
static int marble(Tex *tex, float *texvec, TexResult *texres)
|
||||
static int marble(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
int rv=TEX_INT;
|
||||
|
||||
@ -407,7 +407,7 @@ static int marble(Tex *tex, float *texvec, TexResult *texres)
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
static int magic(Tex *tex, float *texvec, TexResult *texres)
|
||||
static int magic(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
float x, y, z, turb=1.0;
|
||||
int n;
|
||||
@ -483,7 +483,7 @@ static int magic(Tex *tex, float *texvec, TexResult *texres)
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
/* newnoise: stucci also modified to use different noisebasis */
|
||||
static int stucci(Tex *tex, float *texvec, TexResult *texres)
|
||||
static int stucci(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
float nor[3], b2, ofs;
|
||||
int retval= TEX_INT;
|
||||
@ -525,7 +525,7 @@ static int stucci(Tex *tex, float *texvec, TexResult *texres)
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* newnoise: musgrave terrain noise types */
|
||||
|
||||
static float mg_mFractalOrfBmTex(Tex *tex, float *texvec, TexResult *texres)
|
||||
static float mg_mFractalOrfBmTex(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
int rv = TEX_INT;
|
||||
float (*mgravefunc)(float, float, float, float, float, float, int);
|
||||
@ -555,7 +555,7 @@ static float mg_mFractalOrfBmTex(Tex *tex, float *texvec, TexResult *texres)
|
||||
|
||||
}
|
||||
|
||||
static float mg_ridgedOrHybridMFTex(Tex *tex, float *texvec, TexResult *texres)
|
||||
static float mg_ridgedOrHybridMFTex(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
int rv = TEX_INT;
|
||||
float (*mgravefunc)(float, float, float, float, float, float, float, float, int);
|
||||
@ -586,7 +586,7 @@ static float mg_ridgedOrHybridMFTex(Tex *tex, float *texvec, TexResult *texres)
|
||||
}
|
||||
|
||||
|
||||
static float mg_HTerrainTex(Tex *tex, float *texvec, TexResult *texres)
|
||||
static float mg_HTerrainTex(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
int rv = TEX_INT;
|
||||
|
||||
@ -611,7 +611,7 @@ static float mg_HTerrainTex(Tex *tex, float *texvec, TexResult *texres)
|
||||
}
|
||||
|
||||
|
||||
static float mg_distNoiseTex(Tex *tex, float *texvec, TexResult *texres)
|
||||
static float mg_distNoiseTex(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
int rv = TEX_INT;
|
||||
|
||||
@ -640,7 +640,7 @@ static float mg_distNoiseTex(Tex *tex, float *texvec, TexResult *texres)
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* newnoise: Voronoi texture type, probably the slowest, especially with minkovsky, bumpmapping, could be done another way */
|
||||
|
||||
static float voronoiTex(Tex *tex, float *texvec, TexResult *texres)
|
||||
static float voronoiTex(Tex *tex, const float texvec[3], TexResult *texres)
|
||||
{
|
||||
int rv = TEX_INT;
|
||||
float da[4], pa[12]; /* distance and point coordinate arrays of 4 nearest neighbors */
|
||||
@ -869,7 +869,7 @@ static int cubemap_ob(Object *ob, const float n[3], float x, float y, float z, f
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, const float n[3], float *dxt, float *dyt)
|
||||
static void do_2d_mapping(MTex *mtex, float texvec[3], VlakRen *vlr, const float n[3], float dxt[3], float dyt[3])
|
||||
{
|
||||
Tex *tex;
|
||||
Object *ob= NULL;
|
||||
@ -885,15 +885,15 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, const float n[3],
|
||||
if (R.osa==0) {
|
||||
|
||||
if (wrap==MTEX_FLAT) {
|
||||
fx = (t[0] + 1.0f) / 2.0f;
|
||||
fy = (t[1] + 1.0f) / 2.0f;
|
||||
fx = (texvec[0] + 1.0f) / 2.0f;
|
||||
fy = (texvec[1] + 1.0f) / 2.0f;
|
||||
}
|
||||
else if (wrap == MTEX_TUBE) map_to_tube( &fx, &fy, t[0], t[1], t[2]);
|
||||
else if (wrap == MTEX_SPHERE) map_to_sphere(&fx, &fy, t[0], t[1], t[2]);
|
||||
else if (wrap == MTEX_TUBE) map_to_tube( &fx, &fy, texvec[0], texvec[1], texvec[2]);
|
||||
else if (wrap == MTEX_SPHERE) map_to_sphere(&fx, &fy, texvec[0], texvec[1], texvec[2]);
|
||||
else {
|
||||
if (texco == TEXCO_OBJECT) cubemap_ob(ob, n, t[0], t[1], t[2], &fx, &fy);
|
||||
else if (texco == TEXCO_GLOB) cubemap_glob(n, t[0], t[1], t[2], &fx, &fy);
|
||||
else cubemap(mtex, vlr, n, t[0], t[1], t[2], &fx, &fy);
|
||||
if (texco == TEXCO_OBJECT) cubemap_ob(ob, n, texvec[0], texvec[1], texvec[2], &fx, &fy);
|
||||
else if (texco == TEXCO_GLOB) cubemap_glob(n, texvec[0], texvec[1], texvec[2], &fx, &fy);
|
||||
else cubemap(mtex, vlr, n, texvec[0], texvec[1], texvec[2], &fx, &fy);
|
||||
}
|
||||
|
||||
/* repeat */
|
||||
@ -933,14 +933,14 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, const float n[3],
|
||||
fy= tex->cropymin+ fy*fac1;
|
||||
}
|
||||
|
||||
t[0]= fx;
|
||||
t[1]= fy;
|
||||
texvec[0]= fx;
|
||||
texvec[1]= fy;
|
||||
}
|
||||
else {
|
||||
|
||||
if (wrap==MTEX_FLAT) {
|
||||
fx= (t[0] + 1.0f) / 2.0f;
|
||||
fy= (t[1] + 1.0f) / 2.0f;
|
||||
fx= (texvec[0] + 1.0f) / 2.0f;
|
||||
fy= (texvec[1] + 1.0f) / 2.0f;
|
||||
dxt[0]/= 2.0f;
|
||||
dxt[1]/= 2.0f;
|
||||
dxt[2]/= 2.0f;
|
||||
@ -951,13 +951,13 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, const float n[3],
|
||||
else if (ELEM(wrap, MTEX_TUBE, MTEX_SPHERE)) {
|
||||
/* exception: the seam behind (y<0.0) */
|
||||
ok= 1;
|
||||
if (t[1]<=0.0f) {
|
||||
fx= t[0]+dxt[0];
|
||||
fy= t[0]+dyt[0];
|
||||
if (fx>=0.0f && fy>=0.0f && t[0]>=0.0f) {
|
||||
if (texvec[1]<=0.0f) {
|
||||
fx= texvec[0]+dxt[0];
|
||||
fy= texvec[0]+dyt[0];
|
||||
if (fx>=0.0f && fy>=0.0f && texvec[0]>=0.0f) {
|
||||
/* pass */
|
||||
}
|
||||
else if (fx<=0.0f && fy<=0.0f && t[0]<=0.0f) {
|
||||
else if (fx<=0.0f && fy<=0.0f && texvec[0]<=0.0f) {
|
||||
/* pass */
|
||||
}
|
||||
else {
|
||||
@ -967,20 +967,20 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, const float n[3],
|
||||
|
||||
if (ok) {
|
||||
if (wrap==MTEX_TUBE) {
|
||||
map_to_tube(area, area+1, t[0], t[1], t[2]);
|
||||
map_to_tube(area + 2, area + 3, t[0] + dxt[0], t[1] + dxt[1], t[2] + dxt[2]);
|
||||
map_to_tube(area + 4, area + 5, t[0] + dyt[0], t[1] + dyt[1], t[2] + dyt[2]);
|
||||
map_to_tube(area, area+1, texvec[0], texvec[1], texvec[2]);
|
||||
map_to_tube(area + 2, area + 3, texvec[0] + dxt[0], texvec[1] + dxt[1], texvec[2] + dxt[2]);
|
||||
map_to_tube(area + 4, area + 5, texvec[0] + dyt[0], texvec[1] + dyt[1], texvec[2] + dyt[2]);
|
||||
}
|
||||
else {
|
||||
map_to_sphere(area, area+1, t[0], t[1], t[2]);
|
||||
map_to_sphere(area + 2, area + 3, t[0] + dxt[0], t[1] + dxt[1], t[2] + dxt[2]);
|
||||
map_to_sphere(area + 4, area + 5, t[0] + dyt[0], t[1] + dyt[1], t[2] + dyt[2]);
|
||||
map_to_sphere(area, area+1, texvec[0], texvec[1], texvec[2]);
|
||||
map_to_sphere(area + 2, area + 3, texvec[0] + dxt[0], texvec[1] + dxt[1], texvec[2] + dxt[2]);
|
||||
map_to_sphere(area + 4, area + 5, texvec[0] + dyt[0], texvec[1] + dyt[1], texvec[2] + dyt[2]);
|
||||
}
|
||||
areaflag= 1;
|
||||
}
|
||||
else {
|
||||
if (wrap==MTEX_TUBE) map_to_tube( &fx, &fy, t[0], t[1], t[2]);
|
||||
else map_to_sphere(&fx, &fy, t[0], t[1], t[2]);
|
||||
if (wrap==MTEX_TUBE) map_to_tube( &fx, &fy, texvec[0], texvec[1], texvec[2]);
|
||||
else map_to_sphere(&fx, &fy, texvec[0], texvec[1], texvec[2]);
|
||||
dxt[0]/= 2.0f;
|
||||
dxt[1]/= 2.0f;
|
||||
dyt[0]/= 2.0f;
|
||||
@ -989,9 +989,9 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, const float n[3],
|
||||
}
|
||||
else {
|
||||
|
||||
if (texco==TEXCO_OBJECT) proj = cubemap_ob(ob, n, t[0], t[1], t[2], &fx, &fy);
|
||||
else if (texco==TEXCO_GLOB) proj = cubemap_glob(n, t[0], t[1], t[2], &fx, &fy);
|
||||
else proj = cubemap(mtex, vlr, n, t[0], t[1], t[2], &fx, &fy);
|
||||
if (texco==TEXCO_OBJECT) proj = cubemap_ob(ob, n, texvec[0], texvec[1], texvec[2], &fx, &fy);
|
||||
else if (texco==TEXCO_GLOB) proj = cubemap_glob(n, texvec[0], texvec[1], texvec[2], &fx, &fy);
|
||||
else proj = cubemap(mtex, vlr, n, texvec[0], texvec[1], texvec[2], &fx, &fy);
|
||||
|
||||
if (proj==1) {
|
||||
SWAP(float, dxt[1], dxt[2]);
|
||||
@ -1091,111 +1091,111 @@ static void do_2d_mapping(MTex *mtex, float *t, VlakRen *vlr, const float n[3],
|
||||
dyt[1]*= fac1;
|
||||
}
|
||||
|
||||
t[0]= fx;
|
||||
t[1]= fy;
|
||||
texvec[0]= fx;
|
||||
texvec[1]= fy;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* ************************************** */
|
||||
|
||||
static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres, short thread, short which_output)
|
||||
static int multitex(Tex *tex, float texvec[3], float dxt[3], float dyt[3], int osatex, TexResult *texres, const short thread, short which_output)
|
||||
{
|
||||
float tmpvec[3];
|
||||
int retval=0; /* return value, int:0, col:1, nor:2, everything:3 */
|
||||
int retval = 0; /* return value, int:0, col:1, nor:2, everything:3 */
|
||||
|
||||
texres->talpha = FALSE; /* is set when image texture returns alpha (considered premul) */
|
||||
|
||||
if (tex->use_nodes && tex->nodetree) {
|
||||
retval = ntreeTexExecTree(tex->nodetree, texres, texvec, dxt, dyt, osatex, thread,
|
||||
tex, which_output, R.r.cfra, (R.r.scemode & R_TEXNODE_PREVIEW) != 0, NULL, NULL);
|
||||
tex, which_output, R.r.cfra, (R.r.scemode & R_TEXNODE_PREVIEW) != 0, NULL, NULL);
|
||||
}
|
||||
else
|
||||
switch (tex->type) {
|
||||
|
||||
case 0:
|
||||
texres->tin= 0.0f;
|
||||
return 0;
|
||||
case TEX_CLOUDS:
|
||||
retval= clouds(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_WOOD:
|
||||
retval= wood(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_MARBLE:
|
||||
retval= marble(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_MAGIC:
|
||||
retval= magic(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_BLEND:
|
||||
retval= blend(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_STUCCI:
|
||||
retval= stucci(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_NOISE:
|
||||
retval= texnoise(tex, texres);
|
||||
break;
|
||||
case TEX_IMAGE:
|
||||
if (osatex) retval= imagewraposa(tex, tex->ima, NULL, texvec, dxt, dyt, texres);
|
||||
else retval= imagewrap(tex, tex->ima, NULL, texvec, texres);
|
||||
BKE_image_tag_time(tex->ima); /* tag image as having being used */
|
||||
break;
|
||||
case TEX_ENVMAP:
|
||||
retval= envmaptex(tex, texvec, dxt, dyt, osatex, texres);
|
||||
break;
|
||||
case TEX_MUSGRAVE:
|
||||
/* newnoise: musgrave types */
|
||||
|
||||
/* ton: added this, for Blender convention reason.
|
||||
* artificer: added the use of tmpvec to avoid scaling texvec
|
||||
*/
|
||||
copy_v3_v3(tmpvec, texvec);
|
||||
mul_v3_fl(tmpvec, 1.0f/tex->noisesize);
|
||||
|
||||
switch (tex->stype) {
|
||||
case TEX_MFRACTAL:
|
||||
case TEX_FBM:
|
||||
retval= mg_mFractalOrfBmTex(tex, tmpvec, texres);
|
||||
break;
|
||||
case TEX_RIDGEDMF:
|
||||
case TEX_HYBRIDMF:
|
||||
retval= mg_ridgedOrHybridMFTex(tex, tmpvec, texres);
|
||||
break;
|
||||
case TEX_HTERRAIN:
|
||||
retval= mg_HTerrainTex(tex, tmpvec, texres);
|
||||
break;
|
||||
else {
|
||||
switch (tex->type) {
|
||||
case 0:
|
||||
texres->tin= 0.0f;
|
||||
return 0;
|
||||
case TEX_CLOUDS:
|
||||
retval = clouds(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_WOOD:
|
||||
retval = wood(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_MARBLE:
|
||||
retval = marble(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_MAGIC:
|
||||
retval = magic(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_BLEND:
|
||||
retval = blend(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_STUCCI:
|
||||
retval = stucci(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_NOISE:
|
||||
retval = texnoise(tex, texres);
|
||||
break;
|
||||
case TEX_IMAGE:
|
||||
if (osatex) retval = imagewraposa(tex, tex->ima, NULL, texvec, dxt, dyt, texres);
|
||||
else retval = imagewrap(tex, tex->ima, NULL, texvec, texres);
|
||||
BKE_image_tag_time(tex->ima); /* tag image as having being used */
|
||||
break;
|
||||
case TEX_ENVMAP:
|
||||
retval = envmaptex(tex, texvec, dxt, dyt, osatex, texres);
|
||||
break;
|
||||
case TEX_MUSGRAVE:
|
||||
/* newnoise: musgrave types */
|
||||
|
||||
/* ton: added this, for Blender convention reason.
|
||||
* artificer: added the use of tmpvec to avoid scaling texvec
|
||||
*/
|
||||
copy_v3_v3(tmpvec, texvec);
|
||||
mul_v3_fl(tmpvec, 1.0f / tex->noisesize);
|
||||
|
||||
switch (tex->stype) {
|
||||
case TEX_MFRACTAL:
|
||||
case TEX_FBM:
|
||||
retval = mg_mFractalOrfBmTex(tex, tmpvec, texres);
|
||||
break;
|
||||
case TEX_RIDGEDMF:
|
||||
case TEX_HYBRIDMF:
|
||||
retval = mg_ridgedOrHybridMFTex(tex, tmpvec, texres);
|
||||
break;
|
||||
case TEX_HTERRAIN:
|
||||
retval = mg_HTerrainTex(tex, tmpvec, texres);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
/* newnoise: voronoi type */
|
||||
case TEX_VORONOI:
|
||||
/* ton: added this, for Blender convention reason.
|
||||
* artificer: added the use of tmpvec to avoid scaling texvec
|
||||
*/
|
||||
copy_v3_v3(tmpvec, texvec);
|
||||
mul_v3_fl(tmpvec, 1.0f / tex->noisesize);
|
||||
|
||||
retval = voronoiTex(tex, tmpvec, texres);
|
||||
break;
|
||||
case TEX_DISTNOISE:
|
||||
/* ton: added this, for Blender convention reason.
|
||||
* artificer: added the use of tmpvec to avoid scaling texvec
|
||||
*/
|
||||
copy_v3_v3(tmpvec, texvec);
|
||||
mul_v3_fl(tmpvec, 1.0f / tex->noisesize);
|
||||
|
||||
retval = mg_distNoiseTex(tex, tmpvec, texres);
|
||||
break;
|
||||
case TEX_POINTDENSITY:
|
||||
retval = pointdensitytex(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_VOXELDATA:
|
||||
retval = voxeldatatex(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_OCEAN:
|
||||
retval = ocean_texture(tex, texvec, texres);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
/* newnoise: voronoi type */
|
||||
case TEX_VORONOI:
|
||||
/* ton: added this, for Blender convention reason.
|
||||
* artificer: added the use of tmpvec to avoid scaling texvec
|
||||
*/
|
||||
copy_v3_v3(tmpvec, texvec);
|
||||
mul_v3_fl(tmpvec, 1.0f/tex->noisesize);
|
||||
|
||||
retval= voronoiTex(tex, tmpvec, texres);
|
||||
break;
|
||||
case TEX_DISTNOISE:
|
||||
/* ton: added this, for Blender convention reason.
|
||||
* artificer: added the use of tmpvec to avoid scaling texvec
|
||||
*/
|
||||
copy_v3_v3(tmpvec, texvec);
|
||||
mul_v3_fl(tmpvec, 1.0f/tex->noisesize);
|
||||
|
||||
retval= mg_distNoiseTex(tex, tmpvec, texres);
|
||||
break;
|
||||
case TEX_POINTDENSITY:
|
||||
retval= pointdensitytex(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_VOXELDATA:
|
||||
retval= voxeldatatex(tex, texvec, texres);
|
||||
break;
|
||||
case TEX_OCEAN:
|
||||
retval= ocean_texture(tex, texvec, texres);
|
||||
break;
|
||||
}
|
||||
|
||||
if (tex->flag & TEX_COLORBAND) {
|
||||
@ -1213,7 +1213,8 @@ static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex,
|
||||
}
|
||||
|
||||
/* this is called from the shader and texture nodes */
|
||||
int multitex_nodes(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres, short thread, short which_output, ShadeInput *shi, MTex *mtex)
|
||||
int multitex_nodes(Tex *tex, float texvec[3], float dxt[3], float dyt[3], int osatex, TexResult *texres,
|
||||
const short thread, short which_output, ShadeInput *shi, MTex *mtex)
|
||||
{
|
||||
if (tex==NULL) {
|
||||
memset(texres, 0, sizeof(TexResult));
|
||||
@ -1229,7 +1230,7 @@ int multitex_nodes(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex,
|
||||
if (mtex) {
|
||||
/* we have mtex, use it for 2d mapping images only */
|
||||
do_2d_mapping(mtex, texvec, shi->vlr, shi->facenor, dxt, dyt);
|
||||
rgbnor= multitex(tex, texvec, dxt, dyt, osatex, texres, thread, which_output);
|
||||
rgbnor = multitex(tex, texvec, dxt, dyt, osatex, texres, thread, which_output);
|
||||
|
||||
if (mtex->mapto & (MAP_COL+MAP_COLSPEC+MAP_COLMIR)) {
|
||||
ImBuf *ibuf = BKE_image_get_ibuf(tex->ima, &tex->iuser);
|
||||
@ -1265,12 +1266,13 @@ int multitex_nodes(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex,
|
||||
|
||||
return rgbnor;
|
||||
}
|
||||
else
|
||||
else {
|
||||
return multitex(tex, texvec, dxt, dyt, osatex, texres, thread, which_output);
|
||||
}
|
||||
}
|
||||
|
||||
/* this is called for surface shading */
|
||||
static int multitex_mtex(ShadeInput *shi, MTex *mtex, float *texvec, float *dxt, float *dyt, TexResult *texres)
|
||||
static int multitex_mtex(ShadeInput *shi, MTex *mtex, float texvec[3], float dxt[3], float dyt[3], TexResult *texres)
|
||||
{
|
||||
Tex *tex = mtex->tex;
|
||||
|
||||
@ -1287,13 +1289,13 @@ static int multitex_mtex(ShadeInput *shi, MTex *mtex, float *texvec, float *dxt,
|
||||
|
||||
/* Warning, if the texres's values are not declared zero, check the return value to be sure
|
||||
* the color values are set before using the r/g/b values, otherwise you may use uninitialized values - Campbell */
|
||||
int multitex_ext(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres)
|
||||
int multitex_ext(Tex *tex, float texvec[3], float dxt[3], float dyt[3], int osatex, TexResult *texres)
|
||||
{
|
||||
return multitex_nodes(tex, texvec, dxt, dyt, osatex, texres, 0, 0, NULL, NULL);
|
||||
}
|
||||
|
||||
/* extern-tex doesn't support nodes (ntreeBeginExec() can't be called when rendering is going on) */
|
||||
int multitex_ext_safe(Tex *tex, float *texvec, TexResult *texres)
|
||||
int multitex_ext_safe(Tex *tex, float texvec[3], TexResult *texres)
|
||||
{
|
||||
int use_nodes= tex->use_nodes, retval;
|
||||
|
||||
@ -1518,7 +1520,8 @@ float texture_value_blend(float tex, float out, float fact, float facg, int blen
|
||||
return in;
|
||||
}
|
||||
|
||||
static void texco_mapping(ShadeInput* shi, Tex* tex, MTex* mtex, float* co, float* dx, float* dy, float* texvec, float* dxt, float* dyt)
|
||||
static void texco_mapping(ShadeInput* shi, Tex* tex, MTex* mtex,
|
||||
const float co[3], const float dx[3], const float dy[3], float texvec[3], float dxt[3], float dyt[3])
|
||||
{
|
||||
/* new: first swap coords, then map, then trans/scale */
|
||||
if (tex->type == TEX_IMAGE) {
|
||||
@ -1550,10 +1553,10 @@ static void texco_mapping(ShadeInput* shi, Tex* tex, MTex* mtex, float* co, floa
|
||||
texvec[0] = mtex->size[0]*(texvec[0] - 0.5f) + mtex->ofs[0] + 0.5f;
|
||||
texvec[1] = mtex->size[1]*(texvec[1] - 0.5f) + mtex->ofs[1] + 0.5f;
|
||||
if (shi->osatex) {
|
||||
dxt[0] = mtex->size[0]*dxt[0];
|
||||
dxt[1] = mtex->size[1]*dxt[1];
|
||||
dyt[0] = mtex->size[0]*dyt[0];
|
||||
dyt[1] = mtex->size[1]*dyt[1];
|
||||
dxt[0] = mtex->size[0] * dxt[0];
|
||||
dxt[1] = mtex->size[1] * dxt[1];
|
||||
dyt[0] = mtex->size[0] * dyt[0];
|
||||
dyt[1] = mtex->size[1] * dyt[1];
|
||||
}
|
||||
|
||||
/* problem: repeat-mirror is not a 'repeat' but 'extend' in imagetexture.c */
|
||||
@ -1683,7 +1686,8 @@ static void compatible_bump_uv_derivs(CompatibleBump *compat_bump, ShadeInput *s
|
||||
}
|
||||
}
|
||||
|
||||
static int compatible_bump_compute(CompatibleBump *compat_bump, ShadeInput *shi, MTex *mtex, Tex *tex, TexResult *texres, float Tnor, float *co, float *dx, float *dy, float *texvec, float *dxt, float *dyt)
|
||||
static int compatible_bump_compute(CompatibleBump *compat_bump, ShadeInput *shi, MTex *mtex, Tex *tex, TexResult *texres,
|
||||
float Tnor, const float co[3], const float dx[3], const float dy[3], float texvec[3], float dxt[3], float dyt[3])
|
||||
{
|
||||
TexResult ttexr = {0, 0, 0, 0, 0, texres->talpha, NULL}; /* temp TexResult */
|
||||
float tco[3], texv[3], cd, ud, vd, du, dv, idu, idv;
|
||||
@ -1839,7 +1843,7 @@ static void ntap_bump_init(NTapBump *ntap_bump)
|
||||
memset(ntap_bump, 0, sizeof(*ntap_bump));
|
||||
}
|
||||
|
||||
static int ntap_bump_compute(NTapBump *ntap_bump, ShadeInput *shi, MTex *mtex, Tex *tex, TexResult *texres, float Tnor, float *co, float *dx, float *dy, float *texvec, float *dxt, float *dyt)
|
||||
static int ntap_bump_compute(NTapBump *ntap_bump, ShadeInput *shi, MTex *mtex, Tex *tex, TexResult *texres, float Tnor, float *co, float *dx, float *dy, float texvec[3], float dxt[3], float dyt[3])
|
||||
{
|
||||
TexResult ttexr = {0, 0, 0, 0, 0, texres->talpha, NULL}; /* temp TexResult */
|
||||
|
||||
|
@ -72,26 +72,26 @@ public:
|
||||
void ProcessLighting(RAS_IRasterizer *rasty, bool uselights, const MT_Transform& viewmat);
|
||||
|
||||
void RenderText3D(int fontid,
|
||||
const char* text,
|
||||
int size,
|
||||
int dpi,
|
||||
float* color,
|
||||
double* mat,
|
||||
float aspect);
|
||||
const char* text,
|
||||
int size,
|
||||
int dpi,
|
||||
float* color,
|
||||
double* mat,
|
||||
float aspect);
|
||||
|
||||
void RenderText2D(RAS_TEXT_RENDER_MODE mode,
|
||||
const char* text,
|
||||
int xco,
|
||||
int yco,
|
||||
int width,
|
||||
int height);
|
||||
const char* text,
|
||||
int xco,
|
||||
int yco,
|
||||
int width,
|
||||
int height);
|
||||
void RenderText(int mode,
|
||||
class RAS_IPolyMaterial* polymat,
|
||||
float v1[3],
|
||||
float v2[3],
|
||||
float v3[3],
|
||||
float v4[3],
|
||||
int glattrib);
|
||||
class RAS_IPolyMaterial* polymat,
|
||||
float v1[3],
|
||||
float v2[3],
|
||||
float v3[3],
|
||||
float v4[3],
|
||||
int glattrib);
|
||||
|
||||
void applyTransform(RAS_IRasterizer* rasty, double* oglmatrix, int objectdrawmode);
|
||||
int applyLights(int objectlayer, const MT_Transform& viewmat);
|
||||
|
Loading…
Reference in New Issue
Block a user