[Bf-blender-cvs] [ea75431] soc-2013-paint: Enable stencil display for legacy display in texture painting.

Antony Riakiotakis noreply at git.blender.org
Tue Apr 29 18:01:27 CEST 2014


Commit: ea75431ae2498f17671711e463e8d7569411910a
Author: Antony Riakiotakis
Date:   Tue Apr 29 18:59:46 2014 +0300
https://developer.blender.org/rBea75431ae2498f17671711e463e8d7569411910a

Enable stencil display for legacy display in texture painting.

Also, don't always pass stencil texture coordinates, only in texture
paint mode.

+ fix compilation after merge

===================================================================

M	source/blender/blenkernel/intern/cdderivedmesh.c
M	source/blender/blenkernel/intern/subsurf_ccg.c
M	source/blender/blenloader/intern/versioning_270.c
M	source/blender/gpu/intern/gpu_buffers.c

===================================================================

diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 315d9ad..9042103 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -699,7 +699,14 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm,
 
 	if (GPU_buffer_legacy(dm)) {
 		int mat_nr_cache = -1;
-		MTFace *tf_base = DM_get_tessface_data_layer(dm, CD_MTFACE);;
+		MTFace *tf_base = DM_get_tessface_data_layer(dm, CD_MTFACE);
+		MTFace *tf_stencil_base = NULL;
+		MTFace *tf_stencil = NULL;
+
+		if (uvflag & DM_DRAW_USE_TEXPAINT_UV) {
+			int stencil = CustomData_get_stencil_layer(&dm->faceData, CD_MTFACE);
+			tf_stencil_base = CustomData_get_layer_n(&dm->faceData, CD_MTFACE, stencil);
+		}
 
 		DEBUG_VBO("Using legacy code. cdDM_drawFacesTex_common\n");
 		for (i = 0; i < dm->numTessFaceData; i++, mf++) {
@@ -728,6 +735,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm,
 			}
 
 			tf = tf_base ? tf_base + i : NULL;
+			tf_stencil = tf_stencil_base ? tf_stencil_base + i : NULL;
 
 			if (drawParams) {
 				draw_option = drawParams(tf, (mcol != NULL), mf->mat_nr);
@@ -784,6 +792,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm,
 
 				glBegin(mf->v4 ? GL_QUADS : GL_TRIANGLES);
 				if (tf) glTexCoord2fv(tf->uv[0]);
+				if (tf_stencil) glMultiTexCoord2fv(GL_TEXTURE1, tf->uv[0]);
 				if (cp) glColor3ub(cp[3], cp[2], cp[1]);
 				mvert = &mv[mf->v1];
 				if (lnors) glNormal3sv((const GLshort *)lnors[0][0]);
@@ -791,6 +800,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm,
 				glVertex3fv(mvert->co);
 
 				if (tf) glTexCoord2fv(tf->uv[1]);
+				if (tf_stencil) glMultiTexCoord2fv(GL_TEXTURE1, tf->uv[1]);
 				if (cp) glColor3ub(cp[7], cp[6], cp[5]);
 				mvert = &mv[mf->v2];
 				if (lnors) glNormal3sv((const GLshort *)lnors[0][1]);
@@ -798,6 +808,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm,
 				glVertex3fv(mvert->co);
 
 				if (tf) glTexCoord2fv(tf->uv[2]);
+				if (tf_stencil) glMultiTexCoord2fv(GL_TEXTURE1, tf->uv[2]);
 				if (cp) glColor3ub(cp[11], cp[10], cp[9]);
 				mvert = &mv[mf->v3];
 				if (lnors) glNormal3sv((const GLshort *)lnors[0][2]);
@@ -806,6 +817,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm,
 
 				if (mf->v4) {
 					if (tf) glTexCoord2fv(tf->uv[3]);
+					if (tf_stencil) glMultiTexCoord2fv(GL_TEXTURE1, tf->uv[3]);
 					if (cp) glColor3ub(cp[15], cp[14], cp[13]);
 					mvert = &mv[mf->v4];
 					if (lnors) glNormal3sv((const GLshort *)lnors[0][3]);
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index c3a4b36..65738a4 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -2291,8 +2291,7 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
 	CCGKey key;
 	MCol *mcol = dm->getTessFaceDataArray(dm, CD_PREVIEW_MCOL);
 	MTFace *tf = DM_get_tessface_data_layer(dm, CD_MTFACE);
-	int stencil = CustomData_get_stencil_layer(&dm->faceData, CD_MTFACE);
-	MTFace *tf_stencil_base = CustomData_get_layer_n(&dm->faceData, CD_MTFACE, stencil);
+	MTFace *tf_stencil_base = NULL;
 	MTFace *tf_stencil = NULL;
 	MTFace *tf_base;
 	short (*lnors)[4][3] = dm->getTessFaceDataArray(dm, CD_TESSLOOPNORMAL);
@@ -2315,6 +2314,12 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
 		mcol = dm->getTessFaceDataArray(dm, CD_TEXTURE_MCOL);
 
 	totface = ccgSubSurf_getNumFaces(ss);
+
+	if (flag & DM_DRAW_USE_TEXPAINT_UV) {
+		int stencil = CustomData_get_stencil_layer(&dm->faceData, CD_MTFACE);
+		tf_stencil_base = CustomData_get_layer_n(&dm->faceData, CD_MTFACE, stencil);
+	}
+
 	for (i = 0; i < totface; i++) {
 		CCGFace *f = ccgdm->faceMap[i].face;
 		int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index dbf2360..408b2b6 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -252,8 +252,8 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 	if (!MAIN_VERSION_ATLEAST(main, 270, 6)) {
 		Scene *sce;
 		for (sce = main->scene.first; sce; sce = sce->id.next) {
-			sce->toolsettings->imapaint.new_slot_xresolution = 1024;
-			sce->toolsettings->imapaint.new_slot_yresolution = 1024;
+			sce->toolsettings->imapaint.slot_xresolution_default = 1024;
+			sce->toolsettings->imapaint.slot_yresolution_default = 1024;
 		}
 	}
 
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 124ab81..f2b6746 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -64,8 +64,8 @@
 typedef enum {
 	GPU_BUFFER_VERTEX_STATE = 1,
 	GPU_BUFFER_NORMAL_STATE = 2,
-	GPU_BUFFER_TEXCOORD_STATE_UNIT_0 = 4,
-	GPU_BUFFER_TEXCOORD_STATE_UNIT_1 = 8,
+	GPU_BUFFER_TEXCOORD_UNIT_0_STATE = 4,
+	GPU_BUFFER_TEXCOORD_UNIT_1_STATE = 8,
 	GPU_BUFFER_COLOR_STATE = 16,
 	GPU_BUFFER_ELEMENT_STATE = 32,
 } GPUBufferState;
@@ -1157,7 +1157,7 @@ void GPU_uv_setup(DerivedMesh *dm)
 		glTexCoordPointer(2, GL_FLOAT, 0, dm->drawObject->uv->pointer);
 	}
 
-	GLStates |= GPU_BUFFER_TEXCOORD_STATE_UNIT_0;
+	GLStates |= GPU_BUFFER_TEXCOORD_UNIT_0_STATE;
 }
 
 void GPU_texpaint_uv_setup(DerivedMesh *dm)
@@ -1182,7 +1182,7 @@ void GPU_texpaint_uv_setup(DerivedMesh *dm)
 		glClientActiveTexture(GL_TEXTURE0);
 	}
 
-	GLStates |= GPU_BUFFER_TEXCOORD_STATE_UNIT_0 | GPU_BUFFER_TEXCOORD_STATE_UNIT_1;
+	GLStates |= GPU_BUFFER_TEXCOORD_UNIT_0_STATE | GPU_BUFFER_TEXCOORD_UNIT_1_STATE;
 }
 
 
@@ -1343,9 +1343,9 @@ void GPU_buffer_unbind(void)
 		glDisableClientState(GL_VERTEX_ARRAY);
 	if (GLStates & GPU_BUFFER_NORMAL_STATE)
 		glDisableClientState(GL_NORMAL_ARRAY);
-	if (GLStates & GPU_BUFFER_TEXCOORD_STATE_UNIT_0)
+	if (GLStates & GPU_BUFFER_TEXCOORD_UNIT_0_STATE)
 		glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-	if (GLStates & GPU_BUFFER_TEXCOORD_STATE_UNIT_1) {
+	if (GLStates & GPU_BUFFER_TEXCOORD_UNIT_1_STATE) {
 		glClientActiveTexture(GL_TEXTURE1);
 		glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 		glClientActiveTexture(GL_TEXTURE0);
@@ -1358,7 +1358,7 @@ void GPU_buffer_unbind(void)
 		}
 	}
 	GLStates &= ~(GPU_BUFFER_VERTEX_STATE | GPU_BUFFER_NORMAL_STATE |
-	              GPU_BUFFER_TEXCOORD_STATE_UNIT_0 | GPU_BUFFER_TEXCOORD_STATE_UNIT_1 |
+	              GPU_BUFFER_TEXCOORD_UNIT_0_STATE | GPU_BUFFER_TEXCOORD_UNIT_1_STATE |
 	              GPU_BUFFER_COLOR_STATE | GPU_BUFFER_ELEMENT_STATE);
 
 	for (i = 0; i < MAX_GPU_ATTRIB_DATA; i++) {




More information about the Bf-blender-cvs mailing list