Browse Source

fix draw_Sphere

georges 25 years ago
parent
commit
a6f1886078
1 changed files with 24 additions and 12 deletions
  1. 24 12
      panda/src/dxgsg/dxGraphicsStateGuardian.cxx

+ 24 - 12
panda/src/dxgsg/dxGraphicsStateGuardian.cxx

@@ -2632,7 +2632,7 @@ GenerateSphere(void *pVertexSpace,DWORD dwVertSpaceByteSize,
 		dwNumTriangles = (wNumRings-1) * wNumSections * 2;
 	} else {
 		dwNumVertices =	*pNumVertices = wNumRings * wNumSections + 2;
-		dwNumTriangles = (wNumRings+1) * wNumSections * 2;
+		dwNumTriangles = wNumRings*wNumSections*2;
 	}
 
     dwNumIndices = *pNumIndices = dwNumTriangles*3;
@@ -2660,9 +2660,16 @@ GenerateSphere(void *pVertexSpace,DWORD dwVertSpaceByteSize,
 	if(fvfFlags & D3DFVF_TEXCOUNT_MASK)                           \
 		add_to_FVFBuf((void *)texCoords, sizeof(TexCoordf));   
 	
+#ifdef DBG_GENSPHERE
+	int nvs_written=0;
+    memset(pVertexSpace,0xFF,dwNumVertices*dwVertSize);
+#endif
 
 	if(! DOTEXTURING) {
 		ADD_GENSPHERE_VERTEX_TO_BUFFER(vTopPoint);
+		#ifdef DBG_GENSPHERE
+		  nvs_written++;
+		#endif
 	}
 
     // Generate vertex points for rings
@@ -2682,11 +2689,6 @@ GenerateSphere(void *pVertexSpace,DWORD dwVertSpaceByteSize,
 	}
     float phi,dphi   = (float)(2*M_PI / (wNumSections-1)); //Angle between each section
 
-#ifdef DBG_GENSPHERE
-	int nvs_written=0;
-    memset(pVertexSpace,0xFF,dwNumVertices*dwVertSize);
-#endif
-    
     for(i = 0; i < wNumRings; i++ ) {
 		float costheta,sintheta,cosphi,sinphi;
         phi =	0.0;
@@ -2732,16 +2734,20 @@ GenerateSphere(void *pVertexSpace,DWORD dwVertSpaceByteSize,
         theta += dtheta;
     }
 	
-#ifdef DBG_GENSPHERE
-	assert(nvs_written == dwNumVertices);
-#endif
-
 	if(! DOTEXTURING) {
 		// Generate bottom vertex
 		vNormal = D3DVECTOR( 0.0f, -1.0f, 0.0f );
 		ADD_GENSPHERE_VERTEX_TO_BUFFER(vBotPoint);
+		#ifdef DBG_GENSPHERE
+		  nvs_written++;
+		#endif
 	}
 
+#ifdef DBG_GENSPHERE
+	assert(nvs_written == dwNumVertices);
+#endif
+
+
 #ifdef DBG_GENSPHERE
     memset(pwIndices,0xFF,dwNumIndices*sizeof(WORD));
 #endif
@@ -2814,8 +2820,14 @@ GenerateSphere(void *pVertexSpace,DWORD dwVertSpaceByteSize,
 	 }
 
 #ifdef DBG_GENSPHERE
-	 assert(CurFinalTriIndex == dwNumTriangles); 
-	 assert(base_index == dwNumIndices);
+	 if(DOTEXTURING) {
+		 assert(CurFinalTriIndex == dwNumTriangles); 
+		 assert(base_index == dwNumIndices);
+	 } else {
+		 assert(CurFinalTriIndex == dwNumTriangles-wNumSections); 
+		 assert(base_index == dwNumIndices-wNumSections*3);
+	 }
+
  	 for(i = 0; i < dwNumIndices; i++ ) 
 		 assert(pwIndices[i] <dwNumVertices);
 #endif