[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50961] trunk/blender/source/blender: Revert changes made to support diffuse color when sculpting

Sergey Sharybin sergey.vfx at gmail.com
Sun Sep 30 17:04:46 CEST 2012


Revision: 50961
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50961
Author:   nazgul
Date:     2012-09-30 15:04:46 +0000 (Sun, 30 Sep 2012)
Log Message:
-----------
Revert changes made to support diffuse color when sculpting

This changes are not stable enough and trying fix it could backfire in some
other regressions which isn't wanted so much close to the release.

This means objects will have gray color as diffuse which becomes darker in
masked areas for 2.64.

Proper fix is aimed for 2.65.

This commit reverts 50827 and 50898.

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/intern/pbvh.c
    trunk/blender/source/blender/gpu/GPU_buffers.h
    trunk/blender/source/blender/gpu/GPU_draw.h
    trunk/blender/source/blender/gpu/intern/gpu_buffers.c
    trunk/blender/source/blender/gpu/intern/gpu_draw.c

Modified: trunk/blender/source/blender/blenlib/intern/pbvh.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/pbvh.c	2012-09-30 13:16:55 UTC (rev 50960)
+++ trunk/blender/source/blender/blenlib/intern/pbvh.c	2012-09-30 15:04:46 UTC (rev 50961)
@@ -1169,14 +1169,10 @@
 					break;
 				case PBVH_FACES:
 					GPU_update_mesh_buffers(node->draw_buffers,
-					                        bvh->faces,
-					                        node->prim_indices,
-					                        node->totprim,
 					                        bvh->verts,
 					                        node->vert_indices,
 					                        node->uniq_verts +
 					                        node->face_verts,
-					                        node->face_vert_indices,
 					                        CustomData_get_layer(bvh->vdata,
 					                                             CD_PAINT_MASK));
 					break;

Modified: trunk/blender/source/blender/gpu/GPU_buffers.h
===================================================================
--- trunk/blender/source/blender/gpu/GPU_buffers.h	2012-09-30 13:16:55 UTC (rev 50960)
+++ trunk/blender/source/blender/gpu/GPU_buffers.h	2012-09-30 15:04:46 UTC (rev 50961)
@@ -162,9 +162,8 @@
                                     struct MFace *mface, struct MVert *mvert,
                                     int *face_indices, int totface);
 
-void GPU_update_mesh_buffers(GPU_Buffers *buffers, struct MFace *mface, int *face_indices, int totface,
-                             struct MVert *mvert, int *vert_indices, int totvert,
-                             int (*face_vert_indices)[4], const float *vmask);
+void GPU_update_mesh_buffers(GPU_Buffers *buffers, struct MVert *mvert,
+                             int *vert_indices, int totvert, const float *vmask);
 
 GPU_Buffers *GPU_build_grid_buffers(int *grid_indices, int totgrid,
                                     unsigned int **grid_hidden, int gridsize);

Modified: trunk/blender/source/blender/gpu/GPU_draw.h
===================================================================
--- trunk/blender/source/blender/gpu/GPU_draw.h	2012-09-30 13:16:55 UTC (rev 50960)
+++ trunk/blender/source/blender/gpu/GPU_draw.h	2012-09-30 15:04:46 UTC (rev 50961)
@@ -75,8 +75,6 @@
 int GPU_enable_material(int nr, void *attribs);
 void GPU_disable_material(void);
 
-void GPU_material_diffuse_get(int nr, float diff[4]);
-
 void GPU_set_material_alpha_blend(int alphablend);
 int GPU_get_material_alpha_blend(void);
 

Modified: trunk/blender/source/blender/gpu/intern/gpu_buffers.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_buffers.c	2012-09-30 13:16:55 UTC (rev 50960)
+++ trunk/blender/source/blender/gpu/intern/gpu_buffers.c	2012-09-30 15:04:46 UTC (rev 50961)
@@ -54,7 +54,6 @@
 #include "DNA_userdef_types.h"
 
 #include "GPU_buffers.h"
-#include "GPU_draw.h"
 
 typedef enum {
 	GPU_BUFFER_VERTEX_STATE = 1,
@@ -1281,8 +1280,6 @@
 	char pad[2];
 	
 	unsigned char color[3];
-	float accum_color[3];
-	int tot_color;
 } VertexBufferFormat;
 
 struct GPU_Buffers {
@@ -1330,24 +1327,24 @@
 
 static float gpu_color_from_mask(float mask)
 {
-	return 1.0f - mask * 0.75f;
+	return (1.0f - mask) * 0.5f + 0.25f;
 }
 
-static void gpu_color_from_mask_copy(float mask, const float diffuse_color[4], unsigned char out[3])
+static void gpu_color_from_mask_copy(float mask, unsigned char out[3])
 {
-	float mask_color;
+	unsigned char color;
+	
+	color = gpu_color_from_mask(mask) * 255.0f;
 
-	mask_color = gpu_color_from_mask(mask) * 255.0f;
-
-	out[0] = diffuse_color[0] * mask_color;
-	out[1] = diffuse_color[1] * mask_color;
-	out[2] = diffuse_color[2] * mask_color;
+	out[0] = color;
+	out[1] = color;
+	out[2] = color;
 }
 
-static void gpu_color_from_mask_set(float mask, float diffuse_color[4])
+static void gpu_color_from_mask_set(float mask)
 {
 	float color = gpu_color_from_mask(mask);
-	glColor3f(diffuse_color[0] * color, diffuse_color[1] * color, diffuse_color[2] * color);
+	glColor3f(color, color, color);
 }
 
 static float gpu_color_from_mask_quad(const CCGKey *key,
@@ -1363,32 +1360,29 @@
 static void gpu_color_from_mask_quad_copy(const CCGKey *key,
                                           CCGElem *a, CCGElem *b,
                                           CCGElem *c, CCGElem *d,
-                                          const float *diffuse_color,
                                           unsigned char out[3])
 {
-	float mask_color =
+	unsigned char color =
 	    gpu_color_from_mask((*CCG_elem_mask(key, a) +
 	                         *CCG_elem_mask(key, b) +
 	                         *CCG_elem_mask(key, c) +
 	                         *CCG_elem_mask(key, d)) * 0.25f) * 255.0f;
 
-	out[0] = diffuse_color[0] * mask_color;
-	out[1] = diffuse_color[1] * mask_color;
-	out[2] = diffuse_color[2] * mask_color;
+	out[0] = color;
+	out[1] = color;
+	out[2] = color;
 }
 
 static void gpu_color_from_mask_quad_set(const CCGKey *key,
                                          CCGElem *a, CCGElem *b,
-                                         CCGElem *c, CCGElem *d,
-                                         float diffuse_color[4])
+                                         CCGElem *c, CCGElem *d)
 {
 	float color = gpu_color_from_mask_quad(key, a, b, c, d);
-	glColor3f(diffuse_color[0] * color, diffuse_color[1] * color, diffuse_color[2] * color);
+	glColor3f(color, color, color);
 }
 
-void GPU_update_mesh_buffers(GPU_Buffers *buffers, MFace *mface, int *face_indices, int totface,
-                             MVert *mvert, int *vert_indices, int totvert,
-                             int (*face_vert_indices)[4], const float *vmask)
+void GPU_update_mesh_buffers(GPU_Buffers *buffers, MVert *mvert,
+                             int *vert_indices, int totvert, const float *vmask)
 {
 	VertexBufferFormat *vert_data;
 	int i;
@@ -1410,42 +1404,10 @@
 
 				copy_v3_v3(out->co, v->co);
 				memcpy(out->no, v->no, sizeof(short) * 3);
-				zero_v3(out->accum_color);
-				out->tot_color = 0;
+				gpu_color_from_mask_copy(vmask[vert_indices[i]],
+				                         out->color);
 			}
 
-#define UPDATE_VERTEX(face, vertex, index, diffuse_color) \
-			{ \
-				VertexBufferFormat *out = vert_data + face_vert_indices[face][index]; \
-				add_v3_v3(out->accum_color, diffuse_color);	\
-				out->tot_color++; \
-			} (void)0
-
-			for (i = 0; i < totface; ++i) {
-				MFace *f = mface + face_indices[i];
-				float diffuse_color[4];
-
-				GPU_material_diffuse_get(f->mat_nr + 1, diffuse_color);
-
-				UPDATE_VERTEX(i, f->v1, 0, diffuse_color);
-				UPDATE_VERTEX(i, f->v2, 1, diffuse_color);
-				UPDATE_VERTEX(i, f->v3, 2, diffuse_color);
-				if (f->v4)
-					UPDATE_VERTEX(i, f->v4, 3, diffuse_color);
-			}
-#undef UPDATE_VERTEX
-
-			for (i = 0; i < totvert; ++i) {
-				VertexBufferFormat *out = vert_data + i;
-				if (out->tot_color) {
-					float diffuse_color[4];
-
-					mul_v3_v3fl(diffuse_color, out->accum_color, 1.0f / out->tot_color);
-
-					gpu_color_from_mask_copy(vmask[vert_indices[i]], diffuse_color, out->color);
-				}
-			}
-
 			glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
 		}
 		else {
@@ -1555,20 +1517,18 @@
 			for (i = 0; i < totgrid; ++i) {
 				VertexBufferFormat *vd = vert_data;
 				CCGElem *grid = grids[grid_indices[i]];
-				const DMFlagMat *flags = &grid_flag_mats[grid_indices[i]];
-				float diffuse_color[4];
 
-				GPU_material_diffuse_get(flags->mat_nr + 1, diffuse_color);
-
 				for (y = 0; y < key->grid_size; y++) {
 					for (x = 0; x < key->grid_size; x++) {
 						CCGElem *elem = CCG_grid_elem(key, grid, x, y);
 						
 						copy_v3_v3(vd->co, CCG_elem_co(key, elem));
 						if (smooth) {
-							normal_float_to_short_v3(vd->no, CCG_elem_no(key, elem));
+							normal_float_to_short_v3(vd->no,
+							                         CCG_elem_no(key, elem));
 
-							gpu_color_from_mask_copy(*CCG_elem_mask(key, elem), diffuse_color, vd->color);
+							gpu_color_from_mask_copy(*CCG_elem_mask(key, elem),
+							                         vd->color);
 						}
 						vd++;
 					}
@@ -1601,7 +1561,6 @@
 							                              elems[1],
 							                              elems[2],
 							                              elems[3],
-							                              diffuse_color,
 							                              vd->color);
 						}
 					}
@@ -1810,10 +1769,7 @@
 {
 	const MVert *mvert = buffers->mvert;
 	int i, j;
-	float diffuse_color[4] = {0.8f, 0.8f, 0.8f, 1.0f};
 
-	glGetMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse_color);
-
 	gpu_colors_enable(VBO_DISABLED);
 
 	for (i = 0; i < buffers->totface; ++i) {
@@ -1828,7 +1784,7 @@
 
 		if (smooth) {
 			for (j = 0; j < S; j++) {
-				gpu_color_from_mask_set(buffers->vmask[fv[j]], diffuse_color);
+				gpu_color_from_mask_set(buffers->vmask[fv[j]]);
 				glNormal3sv(mvert[fv[j]].no);
 				glVertex3fv(mvert[fv[j]].co);
 			}
@@ -1853,7 +1809,7 @@
 				fmask = (fmask + buffers->vmask[fv[3]]) * 0.25;
 			else
 				fmask /= 3.0f;
-			gpu_color_from_mask_set(fmask, diffuse_color);
+			gpu_color_from_mask_set(fmask);
 			
 			for (j = 0; j < S; j++)
 				glVertex3fv(mvert[fv[j]].co);
@@ -1869,10 +1825,7 @@
 {
 	const CCGKey *key = &buffers->gridkey;
 	int i, j, x, y, gridsize = buffers->gridkey.grid_size;
-	float diffuse_color[4] = {0.8f, 0.8f, 0.8f, 1.0f};
 
-	glGetMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse_color);
-
 	gpu_colors_enable(VBO_DISABLED);
 
 	for (i = 0; i < buffers->totgrid; ++i) {
@@ -1900,7 +1853,7 @@
 
 					if (smooth) {
 						for (j = 0; j < 4; j++) {
-							gpu_color_from_mask_set(*CCG_elem_mask(key, e[j]), diffuse_color);
+							gpu_color_from_mask_set(*CCG_elem_mask(key, e[j]));
 							glNormal3fv(CCG_elem_no(key, e[j]));
 							glVertex3fv(CCG_elem_co(key, e[j]));
 						}
@@ -1913,7 +1866,7 @@
 						               CCG_elem_co(key, e[2]),
 						               CCG_elem_co(key, e[3]));
 						glNormal3fv(fno);
-						gpu_color_from_mask_quad_set(key, e[0], e[1], e[2], e[3], diffuse_color);
+						gpu_color_from_mask_quad_set(key, e[0], e[1], e[2], e[3]);
 
 						for (j = 0; j < 4; j++)
 							glVertex3fv(CCG_elem_co(key, e[j]));
@@ -1930,10 +1883,10 @@
 					CCGElem *a = CCG_grid_elem(key, grid, x, y);
 					CCGElem *b = CCG_grid_elem(key, grid, x, y + 1);
 
-					gpu_color_from_mask_set(*CCG_elem_mask(key, a), diffuse_color);
+					gpu_color_from_mask_set(*CCG_elem_mask(key, a));

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list