Simplification of bitwise operations in Marching Cubes algorithm.
This commit is contained in:
		| @@ -64,7 +64,7 @@ void OpenGLWidget::setVolume(PolyVox::Volume<PolyVox::uint8_t>* volData) | |||||||
| 					Vector3DInt32 regUpperCorner(regionEndX, regionEndY, regionEndZ); | 					Vector3DInt32 regUpperCorner(regionEndX, regionEndY, regionEndZ); | ||||||
|  |  | ||||||
| 					//Extract the surface for this region | 					//Extract the surface for this region | ||||||
| 					extractSurface(m_volData, 0, PolyVox::Region(regLowerCorner, regUpperCorner), ispCurrent); | 					extractSurface(m_volData, 2, PolyVox::Region(regLowerCorner, regUpperCorner), ispCurrent); | ||||||
|  |  | ||||||
| 					//computeNormalsForVertices(m_volData, *ispCurrent, SOBEL_SMOOTHED); | 					//computeNormalsForVertices(m_volData, *ispCurrent, SOBEL_SMOOTHED); | ||||||
| 					//*ispCurrent = getSmoothedSurface(*ispCurrent); | 					//*ispCurrent = getSmoothedSurface(*ispCurrent); | ||||||
|   | |||||||
| @@ -191,25 +191,14 @@ namespace PolyVox | |||||||
|  |  | ||||||
| 					//x | 					//x | ||||||
| 					uint8_t iPreviousCubeIndexX = bitmask[getDecimatedIndex(x- offset.getX()-uStepSize,y- offset.getY(), regSlice.width()+1)]; | 					uint8_t iPreviousCubeIndexX = bitmask[getDecimatedIndex(x- offset.getX()-uStepSize,y- offset.getY(), regSlice.width()+1)]; | ||||||
| 					uint8_t srcBit7 = iPreviousCubeIndexX & 128; | 					iPreviousCubeIndexX &= 170; //170 = 128+32+8+2 | ||||||
| 					uint8_t destBit6 = srcBit7 >> 1; | 					iPreviousCubeIndexX >>= 1; | ||||||
|  |  | ||||||
| 					uint8_t srcBit5 = iPreviousCubeIndexX & 32; | 					iCubeIndex = iPreviousCubeIndexX; | ||||||
| 					uint8_t destBit4 = srcBit5 >> 1; |  | ||||||
|  |  | ||||||
| 					uint8_t srcBit3 = iPreviousCubeIndexX & 8; |  | ||||||
| 					uint8_t destBit2 = srcBit3 >> 1; |  | ||||||
|  |  | ||||||
| 					uint8_t srcBit1 = iPreviousCubeIndexX & 2; |  | ||||||
| 					uint8_t destBit0 = srcBit1 >> 1; |  | ||||||
|  |  | ||||||
| 					iCubeIndex |= destBit0; |  | ||||||
| 					if (v100 == 0) iCubeIndex |= 2;	 | 					if (v100 == 0) iCubeIndex |= 2;	 | ||||||
| 					iCubeIndex |= destBit2; |  | ||||||
| 					if (v110 == 0) iCubeIndex |= 8; | 					if (v110 == 0) iCubeIndex |= 8; | ||||||
| 					iCubeIndex |= destBit4; |  | ||||||
| 					if (v101 == 0) iCubeIndex |= 32; | 					if (v101 == 0) iCubeIndex |= 32; | ||||||
| 					iCubeIndex |= destBit6; |  | ||||||
| 					if (v111 == 0) iCubeIndex |= 128; | 					if (v111 == 0) iCubeIndex |= 128; | ||||||
| 				} | 				} | ||||||
| 				else if((x==regSlice.getLowerCorner().getX()) && (y>regSlice.getLowerCorner().getY())) | 				else if((x==regSlice.getLowerCorner().getX()) && (y>regSlice.getLowerCorner().getY())) | ||||||
| @@ -226,25 +215,13 @@ namespace PolyVox | |||||||
|  |  | ||||||
| 					//y | 					//y | ||||||
| 					uint8_t iPreviousCubeIndexY = bitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY()-uStepSize, regSlice.width()+1)]; | 					uint8_t iPreviousCubeIndexY = bitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY()-uStepSize, regSlice.width()+1)]; | ||||||
| 					uint8_t srcBit6 = iPreviousCubeIndexY & 64; | 					iPreviousCubeIndexY &= 204; //204 = 128+64+8+4 | ||||||
| 					uint8_t destBit4 = srcBit6 >> 2; | 					iPreviousCubeIndexY >>= 2; | ||||||
|  |  | ||||||
| 					uint8_t srcBit7 = iPreviousCubeIndexY & 128; | 					iCubeIndex = iPreviousCubeIndexY; | ||||||
| 					uint8_t destBit5 = srcBit7 >> 2; |  | ||||||
|  |  | ||||||
| 					 |  | ||||||
| 					uint8_t srcBit2 = iPreviousCubeIndexY & 4; |  | ||||||
| 					uint8_t destBit0 = srcBit2 >> 2; |  | ||||||
|  |  | ||||||
| 					uint8_t srcBit3 = iPreviousCubeIndexY & 8; |  | ||||||
| 					uint8_t destBit1 = srcBit3 >> 2; |  | ||||||
|  |  | ||||||
| 					iCubeIndex |= destBit0; |  | ||||||
| 					iCubeIndex |= destBit1; |  | ||||||
| 					if (v010 == 0) iCubeIndex |= 4; | 					if (v010 == 0) iCubeIndex |= 4; | ||||||
| 					if (v110 == 0) iCubeIndex |= 8; | 					if (v110 == 0) iCubeIndex |= 8; | ||||||
| 					iCubeIndex |= destBit4; |  | ||||||
| 					iCubeIndex |= destBit5; |  | ||||||
| 					if (v011 == 0) iCubeIndex |= 64; | 					if (v011 == 0) iCubeIndex |= 64; | ||||||
| 					if (v111 == 0) iCubeIndex |= 128; | 					if (v111 == 0) iCubeIndex |= 128; | ||||||
| 				} | 				} | ||||||
| @@ -258,33 +235,17 @@ namespace PolyVox | |||||||
|  |  | ||||||
| 					//y | 					//y | ||||||
| 					uint8_t iPreviousCubeIndexY = bitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY()-uStepSize, regSlice.width()+1)]; | 					uint8_t iPreviousCubeIndexY = bitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY()-uStepSize, regSlice.width()+1)]; | ||||||
| 					uint8_t srcBit6 = iPreviousCubeIndexY & 64; | 					iPreviousCubeIndexY &= 204; //204 = 128+64+8+4 | ||||||
| 					uint8_t destBit4 = srcBit6 >> 2; | 					iPreviousCubeIndexY >>= 2; | ||||||
| 					 |  | ||||||
| 					uint8_t srcBit7 = iPreviousCubeIndexY & 128; |  | ||||||
| 					uint8_t destBit5 = srcBit7 >> 2; |  | ||||||
| 					 |  | ||||||
| 					uint8_t srcBit2 = iPreviousCubeIndexY & 4; |  | ||||||
| 					uint8_t destBit0 = srcBit2 >> 2; |  | ||||||
|  |  | ||||||
| 					uint8_t srcBit3 = iPreviousCubeIndexY & 8; |  | ||||||
| 					uint8_t destBit1 = srcBit3 >> 2; |  | ||||||
|  |  | ||||||
| 					//x | 					//x | ||||||
| 					uint8_t iPreviousCubeIndexX = bitmask[getDecimatedIndex(x- offset.getX()-uStepSize,y- offset.getY(), regSlice.width()+1)]; | 					uint8_t iPreviousCubeIndexX = bitmask[getDecimatedIndex(x- offset.getX()-uStepSize,y- offset.getY(), regSlice.width()+1)]; | ||||||
| 					srcBit7 = iPreviousCubeIndexX & 128; | 					iPreviousCubeIndexX &= 170; //170 = 128+32+8+2 | ||||||
| 					uint8_t destBit6 = srcBit7 >> 1; | 					iPreviousCubeIndexX >>= 1; | ||||||
|  |  | ||||||
| 					srcBit3 = iPreviousCubeIndexX & 8; | 					iCubeIndex = iPreviousCubeIndexX | iPreviousCubeIndexY; | ||||||
| 					uint8_t destBit2 = srcBit3 >> 1; |  | ||||||
|  |  | ||||||
| 					iCubeIndex |= destBit0; |  | ||||||
| 					iCubeIndex |= destBit1;						 |  | ||||||
| 					iCubeIndex |= destBit2; |  | ||||||
| 					if (v110 == 0) iCubeIndex |= 8; | 					if (v110 == 0) iCubeIndex |= 8; | ||||||
| 					iCubeIndex |= destBit4; |  | ||||||
| 					iCubeIndex |= destBit5;						 |  | ||||||
| 					iCubeIndex |= destBit6; |  | ||||||
| 					if (v111 == 0) iCubeIndex |= 128; | 					if (v111 == 0) iCubeIndex |= 128; | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
| @@ -347,19 +308,16 @@ namespace PolyVox | |||||||
|  |  | ||||||
| 					//z | 					//z | ||||||
| 					uint8_t iPreviousCubeIndexZ = previousBitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY(), regSlice.width()+1)]; | 					uint8_t iPreviousCubeIndexZ = previousBitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY(), regSlice.width()+1)]; | ||||||
| 					iCubeIndex = iPreviousCubeIndexZ >> 4; | 					iPreviousCubeIndexZ >>= 4; | ||||||
|  |  | ||||||
| 					//x | 					//x | ||||||
| 					uint8_t iPreviousCubeIndexX = bitmask[getDecimatedIndex(x- offset.getX()-uStepSize,y- offset.getY(), regSlice.width()+1)]; | 					uint8_t iPreviousCubeIndexX = bitmask[getDecimatedIndex(x- offset.getX()-uStepSize,y- offset.getY(), regSlice.width()+1)]; | ||||||
| 					uint8_t srcBit7 = iPreviousCubeIndexX & 128; | 					iPreviousCubeIndexX &= 160; //160 = 128+32 | ||||||
| 					uint8_t destBit6 = srcBit7 >> 1; | 					iPreviousCubeIndexX >>= 1; | ||||||
|  |  | ||||||
| 					uint8_t srcBit5 = iPreviousCubeIndexX & 32; | 					iCubeIndex = iPreviousCubeIndexX | iPreviousCubeIndexZ; | ||||||
| 					uint8_t destBit4 = srcBit5 >> 1; |  | ||||||
|  |  | ||||||
| 					iCubeIndex |= destBit4; |  | ||||||
| 					if (v101 == 0) iCubeIndex |= 32; | 					if (v101 == 0) iCubeIndex |= 32; | ||||||
| 					iCubeIndex |= destBit6; |  | ||||||
| 					if (v111 == 0) iCubeIndex |= 128; | 					if (v111 == 0) iCubeIndex |= 128; | ||||||
| 				} | 				} | ||||||
| 				else if((x==regSlice.getLowerCorner().getX()) && (y>regSlice.getLowerCorner().getY())) | 				else if((x==regSlice.getLowerCorner().getX()) && (y>regSlice.getLowerCorner().getY())) | ||||||
| @@ -371,18 +329,15 @@ namespace PolyVox | |||||||
|  |  | ||||||
| 					//z | 					//z | ||||||
| 					uint8_t iPreviousCubeIndexZ = previousBitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY(), regSlice.width()+1)]; | 					uint8_t iPreviousCubeIndexZ = previousBitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY(), regSlice.width()+1)]; | ||||||
| 					iCubeIndex = iPreviousCubeIndexZ >> 4; | 					iPreviousCubeIndexZ >>= 4; | ||||||
|  |  | ||||||
| 					//y | 					//y | ||||||
| 					uint8_t iPreviousCubeIndexY = bitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY()-uStepSize, regSlice.width()+1)]; | 					uint8_t iPreviousCubeIndexY = bitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY()-uStepSize, regSlice.width()+1)]; | ||||||
| 					uint8_t srcBit6 = iPreviousCubeIndexY & 64; | 					iPreviousCubeIndexY &= 192; //192 = 128 + 64 | ||||||
| 					uint8_t destBit4 = srcBit6 >> 2; | 					iPreviousCubeIndexY >>= 2; | ||||||
|  |  | ||||||
| 					uint8_t srcBit7 = iPreviousCubeIndexY & 128; | 					iCubeIndex = iPreviousCubeIndexY | iPreviousCubeIndexZ; | ||||||
| 					uint8_t destBit5 = srcBit7 >> 2; |  | ||||||
|  |  | ||||||
| 					iCubeIndex |= destBit4; |  | ||||||
| 					iCubeIndex |= destBit5; |  | ||||||
| 					if (v011 == 0) iCubeIndex |= 64; | 					if (v011 == 0) iCubeIndex |= 64; | ||||||
| 					if (v111 == 0) iCubeIndex |= 128; | 					if (v111 == 0) iCubeIndex |= 128; | ||||||
| 				} | 				} | ||||||
| @@ -393,24 +348,20 @@ namespace PolyVox | |||||||
|  |  | ||||||
| 					//z | 					//z | ||||||
| 					uint8_t iPreviousCubeIndexZ = previousBitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY(), regSlice.width()+1)]; | 					uint8_t iPreviousCubeIndexZ = previousBitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY(), regSlice.width()+1)]; | ||||||
| 					iCubeIndex = iPreviousCubeIndexZ >> 4; | 					iPreviousCubeIndexZ >>= 4; | ||||||
|  |  | ||||||
| 					//y | 					//y | ||||||
| 					uint8_t iPreviousCubeIndexY = bitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY()-uStepSize, regSlice.width()+1)]; | 					uint8_t iPreviousCubeIndexY = bitmask[getDecimatedIndex(x- offset.getX(),y- offset.getY()-uStepSize, regSlice.width()+1)]; | ||||||
| 					uint8_t srcBit6 = iPreviousCubeIndexY & 64; | 					iPreviousCubeIndexY &= 192; //192 = 128 + 64 | ||||||
| 					uint8_t destBit4 = srcBit6 >> 2; | 					iPreviousCubeIndexY >>= 2; | ||||||
|  |  | ||||||
| 					uint8_t srcBit7 = iPreviousCubeIndexY & 128; |  | ||||||
| 					uint8_t destBit5 = srcBit7 >> 2; |  | ||||||
|  |  | ||||||
| 					//x | 					//x | ||||||
| 					uint8_t iPreviousCubeIndexX = bitmask[getDecimatedIndex(x- offset.getX()-uStepSize,y- offset.getY(), regSlice.width()+1)]; | 					uint8_t iPreviousCubeIndexX = bitmask[getDecimatedIndex(x- offset.getX()-uStepSize,y- offset.getY(), regSlice.width()+1)]; | ||||||
| 					srcBit7 = iPreviousCubeIndexX & 128; | 					iPreviousCubeIndexX &= 128; | ||||||
| 					uint8_t destBit6 = srcBit7 >> 1; | 					iPreviousCubeIndexX >>= 1; | ||||||
|  |  | ||||||
|  | 					iCubeIndex = iPreviousCubeIndexX | iPreviousCubeIndexY | iPreviousCubeIndexZ; | ||||||
|  |  | ||||||
| 					iCubeIndex |= destBit4; |  | ||||||
| 					iCubeIndex |= destBit5;						 |  | ||||||
| 					iCubeIndex |= destBit6; |  | ||||||
| 					if (v111 == 0) iCubeIndex |= 128; | 					if (v111 == 0) iCubeIndex |= 128; | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -163,25 +163,14 @@ namespace PolyVox | |||||||
|  |  | ||||||
| 						//x | 						//x | ||||||
| 						uint8_t iPreviousCubeIndexX = bitmask[getIndex(uXRegSpace-1,uYRegSpace, regSlice.width()+1)]; | 						uint8_t iPreviousCubeIndexX = bitmask[getIndex(uXRegSpace-1,uYRegSpace, regSlice.width()+1)]; | ||||||
| 						uint8_t srcBit7 = iPreviousCubeIndexX & 128; | 						iPreviousCubeIndexX &= 170; //170 = 128+32+8+2 | ||||||
| 						uint8_t destBit6 = srcBit7 >> 1; | 						iPreviousCubeIndexX >>= 1; | ||||||
|  |  | ||||||
| 						uint8_t srcBit5 = iPreviousCubeIndexX & 32; | 						iCubeIndex = iPreviousCubeIndexX; | ||||||
| 						uint8_t destBit4 = srcBit5 >> 1; |  | ||||||
|  |  | ||||||
| 						uint8_t srcBit3 = iPreviousCubeIndexX & 8; |  | ||||||
| 						uint8_t destBit2 = srcBit3 >> 1; |  | ||||||
|  |  | ||||||
| 						uint8_t srcBit1 = iPreviousCubeIndexX & 2; |  | ||||||
| 						uint8_t destBit0 = srcBit1 >> 1; |  | ||||||
|  |  | ||||||
| 						iCubeIndex |= destBit0; |  | ||||||
| 						if (v100 == 0) iCubeIndex |= 2;	 | 						if (v100 == 0) iCubeIndex |= 2;	 | ||||||
| 						iCubeIndex |= destBit2; |  | ||||||
| 						if (v110 == 0) iCubeIndex |= 8; | 						if (v110 == 0) iCubeIndex |= 8; | ||||||
| 						iCubeIndex |= destBit4; |  | ||||||
| 						if (v101 == 0) iCubeIndex |= 32; | 						if (v101 == 0) iCubeIndex |= 32; | ||||||
| 						iCubeIndex |= destBit6; |  | ||||||
| 						if (v111 == 0) iCubeIndex |= 128; | 						if (v111 == 0) iCubeIndex |= 128; | ||||||
| 					} | 					} | ||||||
| 					else if((uXRegSpace==0) && (uYRegSpace>0)) | 					else if((uXRegSpace==0) && (uYRegSpace>0)) | ||||||
| @@ -194,65 +183,34 @@ namespace PolyVox | |||||||
|  |  | ||||||
| 						//y | 						//y | ||||||
| 						uint8_t iPreviousCubeIndexY = bitmask[getIndex(uXRegSpace,uYRegSpace-1, regSlice.width()+1)]; | 						uint8_t iPreviousCubeIndexY = bitmask[getIndex(uXRegSpace,uYRegSpace-1, regSlice.width()+1)]; | ||||||
|  | 						iPreviousCubeIndexY &= 204; //204 = 128+64+8+4 | ||||||
|  | 						iPreviousCubeIndexY >>= 2; | ||||||
|  |  | ||||||
| 						uint8_t srcBit6 = iPreviousCubeIndexY & 64; | 						iCubeIndex = iPreviousCubeIndexY; | ||||||
| 						uint8_t destBit4 = srcBit6 >> 2; |  | ||||||
|  |  | ||||||
| 						uint8_t srcBit7 = iPreviousCubeIndexY & 128; |  | ||||||
| 						uint8_t destBit5 = srcBit7 >> 2; |  | ||||||
|  |  | ||||||
| 						 |  | ||||||
| 						uint8_t srcBit2 = iPreviousCubeIndexY & 4; |  | ||||||
| 						uint8_t destBit0 = srcBit2 >> 2; |  | ||||||
|  |  | ||||||
| 						uint8_t srcBit3 = iPreviousCubeIndexY & 8; |  | ||||||
| 						uint8_t destBit1 = srcBit3 >> 2; |  | ||||||
|  |  | ||||||
| 						iCubeIndex |= destBit0; |  | ||||||
| 						iCubeIndex |= destBit1; |  | ||||||
| 						if (v010 == 0) iCubeIndex |= 4; | 						if (v010 == 0) iCubeIndex |= 4; | ||||||
| 						if (v110 == 0) iCubeIndex |= 8; | 						if (v110 == 0) iCubeIndex |= 8; | ||||||
| 						iCubeIndex |= destBit4; |  | ||||||
| 						iCubeIndex |= destBit5; |  | ||||||
| 						if (v011 == 0) iCubeIndex |= 64; | 						if (v011 == 0) iCubeIndex |= 64; | ||||||
| 						if (v111 == 0) iCubeIndex |= 128; | 						if (v111 == 0) iCubeIndex |= 128; | ||||||
| 					} | 					} | ||||||
| 					else | 					else | ||||||
| 					{ | 					{ | ||||||
| 						const uint8_t v110 = volIter.peekVoxel1px1py0pz(); | 						const uint8_t v110 = volIter.peekVoxel1px1py0pz(); | ||||||
|  |  | ||||||
| 						const uint8_t v111 = volIter.peekVoxel1px1py1pz(); | 						const uint8_t v111 = volIter.peekVoxel1px1py1pz(); | ||||||
|  |  | ||||||
| 						//y | 						//y | ||||||
| 						uint8_t iPreviousCubeIndexY = bitmask[getIndex(uXRegSpace,uYRegSpace-1, regSlice.width()+1)]; | 						uint8_t iPreviousCubeIndexY = bitmask[getIndex(uXRegSpace,uYRegSpace-1, regSlice.width()+1)]; | ||||||
| 						 | 						iPreviousCubeIndexY &= 204; //204 = 128+64+8+4 | ||||||
| 						uint8_t srcBit6 = iPreviousCubeIndexY & 64; | 						iPreviousCubeIndexY >>= 2; | ||||||
| 						uint8_t destBit4 = srcBit6 >> 2; |  | ||||||
| 						 |  | ||||||
| 						uint8_t srcBit7 = iPreviousCubeIndexY & 128; |  | ||||||
| 						uint8_t destBit5 = srcBit7 >> 2; |  | ||||||
| 						 |  | ||||||
| 						uint8_t srcBit2 = iPreviousCubeIndexY & 4; |  | ||||||
| 						uint8_t destBit0 = srcBit2 >> 2; |  | ||||||
|  |  | ||||||
| 						uint8_t srcBit3 = iPreviousCubeIndexY & 8; |  | ||||||
| 						uint8_t destBit1 = srcBit3 >> 2; |  | ||||||
|  |  | ||||||
| 						//x | 						//x | ||||||
| 						uint8_t iPreviousCubeIndexX = bitmask[getIndex(uXRegSpace-1,uYRegSpace, regSlice.width()+1)]; | 						uint8_t iPreviousCubeIndexX = bitmask[getIndex(uXRegSpace-1,uYRegSpace, regSlice.width()+1)]; | ||||||
| 						srcBit7 = iPreviousCubeIndexX & 128; | 						iPreviousCubeIndexX &= 170; //170 = 128+32+8+2 | ||||||
| 						uint8_t destBit6 = srcBit7 >> 1; | 						iPreviousCubeIndexX >>= 1; | ||||||
|  |  | ||||||
| 						srcBit3 = iPreviousCubeIndexX & 8; | 						iCubeIndex = iPreviousCubeIndexX | iPreviousCubeIndexY; | ||||||
| 						uint8_t destBit2 = srcBit3 >> 1; |  | ||||||
|  |  | ||||||
| 						iCubeIndex |= destBit0; |  | ||||||
| 						iCubeIndex |= destBit1;						 |  | ||||||
| 						iCubeIndex |= destBit2; |  | ||||||
| 						if (v110 == 0) iCubeIndex |= 8; | 						if (v110 == 0) iCubeIndex |= 8; | ||||||
| 						iCubeIndex |= destBit4; |  | ||||||
| 						iCubeIndex |= destBit5;						 |  | ||||||
| 						iCubeIndex |= destBit6; |  | ||||||
| 						if (v111 == 0) iCubeIndex |= 128; | 						if (v111 == 0) iCubeIndex |= 128; | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| @@ -337,19 +295,16 @@ namespace PolyVox | |||||||
|  |  | ||||||
| 						//z | 						//z | ||||||
| 						uint8_t iPreviousCubeIndexZ = previousBitmask[getIndex(uXRegSpace,uYRegSpace, regSlice.width()+1)]; | 						uint8_t iPreviousCubeIndexZ = previousBitmask[getIndex(uXRegSpace,uYRegSpace, regSlice.width()+1)]; | ||||||
| 						iCubeIndex = iPreviousCubeIndexZ >> 4; | 						iPreviousCubeIndexZ >>= 4; | ||||||
|  |  | ||||||
| 						//x | 						//x | ||||||
| 						uint8_t iPreviousCubeIndexX = bitmask[getIndex(uXRegSpace-1,uYRegSpace, regSlice.width()+1)]; | 						uint8_t iPreviousCubeIndexX = bitmask[getIndex(uXRegSpace-1,uYRegSpace, regSlice.width()+1)]; | ||||||
| 						uint8_t srcBit7 = iPreviousCubeIndexX & 128; | 						iPreviousCubeIndexX &= 160; //160 = 128+32 | ||||||
| 						uint8_t destBit6 = srcBit7 >> 1; | 						iPreviousCubeIndexX >>= 1; | ||||||
|  |  | ||||||
| 						uint8_t srcBit5 = iPreviousCubeIndexX & 32; | 						iCubeIndex = iPreviousCubeIndexX | iPreviousCubeIndexZ; | ||||||
| 						uint8_t destBit4 = srcBit5 >> 1; |  | ||||||
|  |  | ||||||
| 						iCubeIndex |= destBit4; |  | ||||||
| 						if (v101 == 0) iCubeIndex |= 32; | 						if (v101 == 0) iCubeIndex |= 32; | ||||||
| 						iCubeIndex |= destBit6; |  | ||||||
| 						if (v111 == 0) iCubeIndex |= 128; | 						if (v111 == 0) iCubeIndex |= 128; | ||||||
| 					} | 					} | ||||||
| 					else if((uXRegSpace==0) && (uYRegSpace>0)) | 					else if((uXRegSpace==0) && (uYRegSpace>0)) | ||||||
| @@ -359,19 +314,15 @@ namespace PolyVox | |||||||
|  |  | ||||||
| 						//z | 						//z | ||||||
| 						uint8_t iPreviousCubeIndexZ = previousBitmask[getIndex(uXRegSpace,uYRegSpace, regSlice.width()+1)]; | 						uint8_t iPreviousCubeIndexZ = previousBitmask[getIndex(uXRegSpace,uYRegSpace, regSlice.width()+1)]; | ||||||
| 						iCubeIndex = iPreviousCubeIndexZ >> 4; | 						iPreviousCubeIndexZ >>= 4; | ||||||
|  |  | ||||||
| 						//y | 						//y | ||||||
| 						uint8_t iPreviousCubeIndexY = bitmask[getIndex(uXRegSpace,uYRegSpace-1, regSlice.width()+1)]; | 						uint8_t iPreviousCubeIndexY = bitmask[getIndex(uXRegSpace,uYRegSpace-1, regSlice.width()+1)]; | ||||||
|  | 						iPreviousCubeIndexY &= 192; //192 = 128 + 64 | ||||||
|  | 						iPreviousCubeIndexY >>= 2; | ||||||
|  |  | ||||||
| 						uint8_t srcBit6 = iPreviousCubeIndexY & 64; | 						iCubeIndex = iPreviousCubeIndexY | iPreviousCubeIndexZ; | ||||||
| 						uint8_t destBit4 = srcBit6 >> 2; |  | ||||||
|  |  | ||||||
| 						uint8_t srcBit7 = iPreviousCubeIndexY & 128; |  | ||||||
| 						uint8_t destBit5 = srcBit7 >> 2; |  | ||||||
|  |  | ||||||
| 						iCubeIndex |= destBit4; |  | ||||||
| 						iCubeIndex |= destBit5; |  | ||||||
| 						if (v011 == 0) iCubeIndex |= 64; | 						if (v011 == 0) iCubeIndex |= 64; | ||||||
| 						if (v111 == 0) iCubeIndex |= 128; | 						if (v111 == 0) iCubeIndex |= 128; | ||||||
| 					} | 					} | ||||||
| @@ -381,24 +332,20 @@ namespace PolyVox | |||||||
|  |  | ||||||
| 						//z | 						//z | ||||||
| 						uint8_t iPreviousCubeIndexZ = previousBitmask[getIndex(uXRegSpace,uYRegSpace, regSlice.width()+1)]; | 						uint8_t iPreviousCubeIndexZ = previousBitmask[getIndex(uXRegSpace,uYRegSpace, regSlice.width()+1)]; | ||||||
| 						iCubeIndex = iPreviousCubeIndexZ >> 4; | 						iPreviousCubeIndexZ >>= 4; | ||||||
|  |  | ||||||
| 						//y | 						//y | ||||||
| 						uint8_t iPreviousCubeIndexY = bitmask[getIndex(uXRegSpace,uYRegSpace-1, regSlice.width()+1)]; | 						uint8_t iPreviousCubeIndexY = bitmask[getIndex(uXRegSpace,uYRegSpace-1, regSlice.width()+1)]; | ||||||
| 						uint8_t srcBit6 = iPreviousCubeIndexY & 64; | 						iPreviousCubeIndexY &= 192; //192 = 128 + 64 | ||||||
| 						uint8_t destBit4 = srcBit6 >> 2; | 						iPreviousCubeIndexY >>= 2; | ||||||
|  |  | ||||||
| 						uint8_t srcBit7 = iPreviousCubeIndexY & 128; |  | ||||||
| 						uint8_t destBit5 = srcBit7 >> 2; |  | ||||||
|  |  | ||||||
| 						//x | 						//x | ||||||
| 						uint8_t iPreviousCubeIndexX = bitmask[getIndex(uXRegSpace-1,uYRegSpace, regSlice.width()+1)]; | 						uint8_t iPreviousCubeIndexX = bitmask[getIndex(uXRegSpace-1,uYRegSpace, regSlice.width()+1)]; | ||||||
| 						srcBit7 = iPreviousCubeIndexX & 128; | 						iPreviousCubeIndexX &= 128; | ||||||
| 						uint8_t destBit6 = srcBit7 >> 1; | 						iPreviousCubeIndexX >>= 1; | ||||||
|  |  | ||||||
|  | 						iCubeIndex = iPreviousCubeIndexX | iPreviousCubeIndexY | iPreviousCubeIndexZ; | ||||||
|  |  | ||||||
| 						iCubeIndex |= destBit4; |  | ||||||
| 						iCubeIndex |= destBit5;						 |  | ||||||
| 						iCubeIndex |= destBit6; |  | ||||||
| 						if (v111 == 0) iCubeIndex |= 128; | 						if (v111 == 0) iCubeIndex |= 128; | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user