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:
authorCampbell Barton <ideasman42@gmail.com>2015-07-27 08:52:54 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-07-27 09:01:56 +0300
commite48c4d73d378b5ac7e8679b1eea04b265ef31612 (patch)
tree74d831dfc943024f8d305785623600c0a5313987 /source/blender/render
parentcdf2dbeb1fa28a91c5fea6b5b4de95f644dc970f (diff)
Replace MFace with looptri for dynamicpaint
D1429 by @lichtwerk, with edits
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_render_ext.h6
-rw-r--r--source/blender/render/extern/include/RE_shader_ext.h4
-rw-r--r--source/blender/render/intern/source/render_texture.c63
3 files changed, 40 insertions, 33 deletions
diff --git a/source/blender/render/extern/include/RE_render_ext.h b/source/blender/render/extern/include/RE_render_ext.h
index 9d8a1a66771..6e1f128b7a5 100644
--- a/source/blender/render/extern/include/RE_render_ext.h
+++ b/source/blender/render/extern/include/RE_render_ext.h
@@ -56,9 +56,9 @@ void antialias_tagbuf(int xsize, int ysize, char *rectmove);
/* dynamicpaint.c */
struct Material *RE_init_sample_material(struct Material *orig_mat, struct Scene *scene);
void RE_free_sample_material(struct Material *mat);
-void RE_sample_material_color(struct Material *mat, float color[3], float *alpha, const float volume_co[3], const float surface_co[3],
- int face_index, short hit_quad, struct DerivedMesh *orcoDm, struct Object *ob);
-
+void RE_sample_material_color(
+ struct Material *mat, float color[3], float *alpha, const float volume_co[3], const float surface_co[3],
+ int tri_index, struct DerivedMesh *orcoDm, struct Object *ob);
/* pointdensity.c */
struct PointDensity;
diff --git a/source/blender/render/extern/include/RE_shader_ext.h b/source/blender/render/extern/include/RE_shader_ext.h
index c53fb7d1153..f78c0aa8cb2 100644
--- a/source/blender/render/extern/include/RE_shader_ext.h
+++ b/source/blender/render/extern/include/RE_shader_ext.h
@@ -86,12 +86,12 @@ struct ShadeInputCopy {
typedef struct ShadeInputUV {
float dxuv[3], dyuv[3], uv[3];
- char *name;
+ const char *name;
} ShadeInputUV;
typedef struct ShadeInputCol {
float col[4];
- char *name;
+ const char *name;
} ShadeInputCol;
/* localized renderloop data */
diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c
index 6acdde6af9c..fc95cf8c275 100644
--- a/source/blender/render/intern/source/render_texture.c
+++ b/source/blender/render/intern/source/render_texture.c
@@ -3526,7 +3526,9 @@ void render_realtime_texture(ShadeInput *shi, Image *ima)
/* A modified part of shadeinput.c -> shade_input_set_uv()
* Used for sampling UV mapped texture color */
-static void textured_face_generate_uv(float *uv, const float normal[3], float *hit, float *v1, float *v2, float *v3)
+static void textured_face_generate_uv(
+ float r_uv[2], const float normal[3], const float hit[3],
+ const float v1[3], const float v2[3], const float v3[3])
{
float detsh, t00, t10, t01, t11;
@@ -3543,12 +3545,12 @@ static void textured_face_generate_uv(float *uv, const float normal[3], float *h
t00*= detsh; t01*=detsh;
t10*=detsh; t11*=detsh;
- uv[0] = (hit[axis1]-v3[axis1])*t11-(hit[axis2]-v3[axis2])*t10;
- uv[1] = (hit[axis2]-v3[axis2])*t00-(hit[axis1]-v3[axis1])*t01;
+ r_uv[0] = (hit[axis1] - v3[axis1]) * t11 - (hit[axis2] - v3[axis2]) * t10;
+ r_uv[1] = (hit[axis2] - v3[axis2]) * t00 - (hit[axis1] - v3[axis1]) * t01;
/* u and v are in range -1 to 0, we allow a little bit extra but not too much, screws up speedvectors */
- CLAMP(uv[0], -2.0f, 1.0f);
- CLAMP(uv[1], -2.0f, 1.0f);
+ CLAMP(r_uv[0], -2.0f, 1.0f);
+ CLAMP(r_uv[1], -2.0f, 1.0f);
}
/* Generate an updated copy of material to use for color sampling. */
@@ -3664,34 +3666,37 @@ void RE_free_sample_material(Material *mat)
MEM_freeN(mat);
}
-
-
/*
* Get material diffuse color and alpha (including linked textures) in given coordinates
*
* color,alpha : input/output color values
* volume_co : sample coordinate in global space. used by volumetric materials
* surface_co : sample surface coordinate in global space. used by "surface" materials
- * face_index : surface face index
- * hit_quad : whether point is on second "half" of a quad
+ * tri_index : surface tri index
* orcoDm : orco state derived mesh
*/
-void RE_sample_material_color(Material *mat, float color[3], float *alpha, const float volume_co[3], const float surface_co[3], int face_index, short hit_quad, DerivedMesh *orcoDm, Object *ob)
+void RE_sample_material_color(
+ Material *mat, float color[3], float *alpha, const float volume_co[3], const float surface_co[3],
+ int tri_index, DerivedMesh *orcoDm, Object *ob)
{
- MFace *mface;
int v1, v2, v3;
MVert *mvert;
+ MLoop *mloop;
+ const MLoopTri *mlooptri;
float uv[3], normal[3];
ShadeInput shi = {NULL};
Render re = {NULL};
/* Get face data */
mvert = orcoDm->getVertArray(orcoDm);
- mface = orcoDm->getTessFaceArray(orcoDm);
+ mloop = orcoDm->getLoopArray(orcoDm);
+ mlooptri = orcoDm->getLoopTriArray(orcoDm);
+
+ if (!mvert || !mlooptri || !mat) {
+ return;
+ }
- if (!mvert || !mface || !mat) return;
- v1=mface[face_index].v1, v2=mface[face_index].v2, v3=mface[face_index].v3;
- if (hit_quad) { v2 = mface[face_index].v3; v3 = mface[face_index].v4; }
+ v1=mloop[mlooptri[tri_index].tri[0]].v, v2=mloop[mlooptri[tri_index].tri[1]].v, v3=mloop[mlooptri[tri_index].tri[2]].v;
normal_tri_v3(normal, mvert[v1].co, mvert[v2].co, mvert[v3].co);
/* generate shadeinput with data required */
@@ -3708,7 +3713,7 @@ void RE_sample_material_color(Material *mat, float color[3], float *alpha, const
{
float l;
/* Get generated UV */
- textured_face_generate_uv(uv, normal, shi.co, mvert[v1].co, mvert[v2].co, mvert[v3].co);
+ textured_face_generate_uv(normal, shi.co, mvert[v1].co, mvert[v2].co, mvert[v3].co, uv);
l= 1.0f+uv[0]+uv[1];
/* calculate generated coordinate */
@@ -3718,35 +3723,37 @@ void RE_sample_material_color(Material *mat, float color[3], float *alpha, const
}
/* uv coordinates */
{
- int i, layers = CustomData_number_of_layers(&orcoDm->faceData, CD_MTFACE);
- int layer_index = CustomData_get_layer_index(&orcoDm->faceData, CD_MTFACE);
+ const int layers = CustomData_number_of_layers(&orcoDm->loopData, CD_MLOOPUV);
+ const int layer_index = CustomData_get_layer_index(&orcoDm->loopData, CD_MLOOPUV);
+ int i;
/* for every uv map set coords and name */
for (i=0; i<layers; i++) {
if (layer_index >= 0) {
const float *uv1, *uv2, *uv3;
+ const CustomData *data = &orcoDm->loopData;
+ const MLoopUV *mloopuv = data->layers[layer_index + i].data;
+ const float uv[2];
float l;
- CustomData *data = &orcoDm->faceData;
- MTFace *tface = (MTFace *) data->layers[layer_index+i].data;
- float uv[3];
+
/* point layer name from actual layer data */
shi.uv[i].name = data->layers[i].name;
/* Get generated coordinates to calculate UV from */
- textured_face_generate_uv(uv, normal, shi.co, mvert[v1].co, mvert[v2].co, mvert[v3].co);
+ textured_face_generate_uv(normal, shi.co, mvert[v1].co, mvert[v2].co, mvert[v3].co, uv);
/* Get UV mapping coordinate */
l= 1.0f+uv[0]+uv[1];
-
- uv1= tface[face_index].uv[0];
- uv2= (hit_quad) ? tface[face_index].uv[2] : tface[face_index].uv[1];
- uv3= (hit_quad) ? tface[face_index].uv[3] : tface[face_index].uv[2];
-
+
+ uv1 = mloopuv[mlooptri[tri_index].tri[0]].uv;
+ uv2 = mloopuv[mlooptri[tri_index].tri[1]].uv;
+ uv3 = mloopuv[mlooptri[tri_index].tri[2]].uv;
+
shi.uv[i].uv[0]= -1.0f + 2.0f*(l*uv3[0]-uv[0]*uv1[0]-uv[1]*uv2[0]);
shi.uv[i].uv[1]= -1.0f + 2.0f*(l*uv3[1]-uv[0]*uv1[1]-uv[1]*uv2[1]);
shi.uv[i].uv[2]= 0.0f; /* texture.c assumes there are 3 coords */
}
}
/* active uv map */
- shi.actuv = CustomData_get_active_layer_index(&orcoDm->faceData, CD_MTFACE) - layer_index;
+ shi.actuv = CustomData_get_active_layer_index(&orcoDm->loopData, CD_MLOOPUV) - layer_index;
shi.totuv = layers;
}