All pastes #425351 Raw Edit

Untitled

public text v1 · immutable
·published 2007-04-05 13:03 UTC
rendered paste body
--- src-3d.c	2007-04-05 16:01:10.000000000 +0300
+++ 3d.c	2007-04-05 16:03:00.000000000 +0300
@@ -494,6 +494,7 @@
 			  const CompTransform    *transform,
 			  Region region, unsigned int mask)
 {
+	Bool occlusionDetection = mask & PAINT_WINDOW_OCCLUSION_DETECTION_MASK;
 	Bool status;
 	Bool wasCulled = glIsEnabled(GL_CULL_FACE);
 
@@ -501,9 +502,7 @@
 	TD_WINDOW(w);
 
 	int output = tds->tmpOutput;
-	int width;
-
-	width = w->screen->width;
+	int width = w->screen->width;
 
 	if (DO_3D && tds->reorderWindowPainting)
 	{
@@ -562,11 +561,11 @@
 		if (ortho[2] > 0.0f)	//The window is reversed, should be painted front to back.
 		{
 			if (mask & PAINT_WINDOW_BACK_TO_FRONT_MASK)
-				return TRUE;
+				return (occlusionDetection)? FALSE: TRUE;
 		}
 		
 		else if (mask & PAINT_WINDOW_FRONT_TO_BACK_MASK)
-			return TRUE;
+			return (occlusionDetection)? FALSE: TRUE;
 	}
 
 	CompTransform wTransform = *transform;
@@ -586,34 +585,9 @@
 
 		matrixTranslate(&wTransform, 0.0f, 0.0f, tdw->currentZ);
 
-		if (wasCulled && DISABLE_BACKFACE_CULLING)
+		if (wasCulled)
 			glDisable(GL_CULL_FACE);
 
-		/*
-		if (!IS_IN_VIEWPORT(w, 0))
-		{
-			float angle = 360 / tds->currentViewportNum;
-
-			matrixScale(&wTransform, 1.0f, 1.0f, 1.0f / width);
-
-			if (RIGHT_VIEWPORT(w) == w->screen->hsize - 1)
-			{
-				matrixTranslate(&wTransform, -width * tdw->currentZ * tds->xMove, 0.0f, 0.0f);
-				matrixRotate(&wTransform, -angle, 0.0f, 1.0f, 0.0f);
-				matrixTranslate(&wTransform, -width * tdw->currentZ * tds->xMove, 0.0f, 0.0f);
-			}
-
-			else if (LEFT_VIEWPORT(w) == 1)
-			{
-				matrixTranslate(&wTransform, width +
-							 width * tdw->currentZ * tds->xMove, 0.0f, 0.0f);
-				matrixRotate(&wTransform, angle, 0.0f, 1.0f, 0.0f);
-				matrixTranslate(&wTransform, width * tdw->currentZ *
-							 tds->xMove - width, 0.0f, 0.0f);
-			}
-		}
-		*/
-
 		if ((LEFT_VIEWPORT(w) != RIGHT_VIEWPORT(w)) && tds->cubeUnfolded)
 		{
 			if (LEFT_VIEWPORT(w) == 0)
@@ -622,216 +596,6 @@
 			if (RIGHT_VIEWPORT(w) == 0)
 				matrixTranslate(&wTransform, -width * tdw->currentZ * tds->xMove, 0.0f, 0.0f);
 		}
-
-		int wx, wy, wx2, wy2, ww, wh;
-
-		wx = MAX(0, MIN(w->screen->width, w->attrib.x - w->input.left));
-		wx2 = MAX(0, MIN(w->screen->width, w->attrib.x + w->attrib.width + w->input.right));
-
-		wy = MAX(0, MIN(w->screen->height, w->attrib.y - w->input.top));
-		wy2 = MAX(0, MIN(w->screen->height, w->attrib.y + w->attrib.height + w->input.bottom));
-
-		ww = wx2 - wx;
-		wh = wy2 - wy;
-
-		float wwidth = -(tds->opt[TD_SCREEN_OPTION_WIDTH].value.f) / 30;
-		int bevel = tds->opt[TD_SCREEN_OPTION_BEVEL].value.i;
-
-
-		if (tds->opt[TD_SCREEN_OPTION_DEPTH].value.b 
-		    && ww && wh && !w->shaded)
-		{
-			if (mask & PAINT_WINDOW_BACK_TO_FRONT_MASK)
-			{
-				glEnable(GL_CULL_FACE);	// Make sure culling is on.
-				glCullFace(GL_FRONT);
-
-				matrixTranslate(&wTransform, 0.0f, 0.0f, wwidth);
-
-				UNWRAP(tds, w->screen, paintWindow);
-				status = (*w->screen->paintWindow) (w, attrib, &wTransform, region, mask);
-				WRAP(tds, w->screen, paintWindow, tdPaintWindow);
-
-				matrixTranslate(&wTransform, 0.0f, 0.0f, -wwidth);
-			}
-
-			else
-			{
-				glEnable(GL_CULL_FACE);	// Make sure culling is on.
-				glCullFace(GL_BACK);
-
-				UNWRAP(tds, w->screen, paintWindow);
-				status = (*w->screen->paintWindow) (w, attrib, &wTransform, region, mask);
-				WRAP(tds, w->screen, paintWindow, tdPaintWindow);
-			}
-
-			/* Paint window depth. */
-
-			glPushMatrix();
-    			glLoadMatrixf(wTransform.m);
-
-			glDisable(GL_CULL_FACE);
-			glEnable(GL_BLEND);
-
-			glBegin(GL_QUADS);
-			glColor4f(0.90f, 0.90f, 0.90f, w->paint.opacity/OPAQUE);
-
-	#define DOBEVEL(corner) (GETBEVEL(corner) ? bevel : 0)
-
-			/* Top */
-			glVertex3f(wx + DOBEVEL(TOPLEFT), wy, 0);
-			glVertex3f(wx + ww - DOBEVEL(TOPRIGHT), wy, 0);
-			glVertex3f(wx + ww - DOBEVEL(TOPRIGHT), wy, (wwidth));
-			glVertex3f(wx + DOBEVEL(TOPLEFT), wy, (wwidth));
-
-			/* Bottom */
-			glVertex3f(wx + DOBEVEL(BOTTOMLEFT), wy + wh, 0);
-			glVertex3f(wx + ww - DOBEVEL(BOTTOMRIGHT), wy + wh, 0);
-			glVertex3f(wx + ww - DOBEVEL(BOTTOMRIGHT), wy + wh, wwidth);
-			glVertex3f(wx + DOBEVEL(BOTTOMLEFT), wy + wh, wwidth);
-
-
-			glColor4f(0.70f, 0.70f, 0.70f,  w->paint.opacity/OPAQUE);
-
-			/* Left */
-			if (!(w->attrib.x < w->screen->workArea.x))
-			{
-				glVertex3f(wx, wy + DOBEVEL(TOPLEFT), 0);
-				glVertex3f(wx, wy + wh - DOBEVEL(BOTTOMLEFT), 0);
-				glVertex3f(wx, wy + wh - DOBEVEL(BOTTOMLEFT), wwidth);
-				glVertex3f(wx, wy + DOBEVEL(TOPLEFT), wwidth);
-			}
-
-
-			/* Right */
-			if (!((w->attrib.x + w->attrib.width + w->input.left +
-				  w->input.right) > w->screen->workArea.width))
-			{
-				glVertex3f(wx + ww, wy + DOBEVEL(TOPRIGHT), 0);
-				glVertex3f(wx + ww, wy + wh - DOBEVEL(BOTTOMRIGHT), 0);
-				glVertex3f(wx + ww, wy + wh - DOBEVEL(BOTTOMRIGHT), wwidth);
-				glVertex3f(wx + ww, wy + DOBEVEL(TOPRIGHT), wwidth);
-			}
-
-			glColor4f(0.95f, 0.95f, 0.95f,  w->paint.opacity / OPAQUE);
-
-			if (!(w->attrib.x < w->screen->workArea.x))
-			{
-				/* Top left bevel */
-				if (GETBEVEL(TOPLEFT))
-				{
-					glVertex3f(wx, wy + bevel, wwidth);
-					glVertex3f(wx, wy + bevel, 0);
-					glVertex3f(wx + bevel / 2.0f, wy + bevel - bevel / 1.2f, 0);
-					glVertex3f(wx + bevel / 2.0f, wy + bevel - bevel / 1.2f, wwidth);
-
-					glColor4f(1.0f, 1.0f, 1.0f,  w->paint.opacity/OPAQUE);
-
-					glVertex3f(wx + bevel / 2.0f, wy + bevel - bevel / 1.2f, 0);
-					glVertex3f(wx + bevel / 2.0f, wy + bevel - bevel / 1.2f, wwidth);
-					glVertex3f(wx + bevel, wy, wwidth);
-					glVertex3f(wx + bevel, wy, 0);
-
-					glColor4f(0.95f, 0.95f, 0.95f,  w->paint.opacity / OPAQUE);
-				}
-				/* Bottom left bevel */
-				if (GETBEVEL(BOTTOMLEFT))
-				{
-					glVertex3f(wx, wy + wh - bevel, 0);
-					glVertex3f(wx, wy + wh - bevel, wwidth);
-					glVertex3f(wx + bevel / 2.0f, wy + wh - bevel + bevel / 1.2f, wwidth);
-					glVertex3f(wx + bevel / 2.0f, wy + wh - bevel + bevel / 1.2f, 0);
-
-					glColor4f(1.0f, 1.0f, 1.0f,  w->paint.opacity / OPAQUE);
-
-					glVertex3f(wx + bevel / 2.0f, wy + wh - bevel + bevel / 1.2f, wwidth);
-					glVertex3f(wx + bevel / 2.0f, wy + wh - bevel + bevel / 1.2f, 0);
-					glVertex3f(wx + bevel, wy + wh, 0);
-					glVertex3f(wx + bevel, wy + wh, wwidth);
-				}
-			}
-
-			glColor4f(0.95f, 0.95f, 0.95f,  w->paint.opacity / OPAQUE);
-
-
-			if (!((w->attrib.x + w->attrib.width + w->input.left +
-				  w->input.right) > w->screen->workArea.width))
-			{
-
-				/* Bottom right bevel */
-				if (GETBEVEL(BOTTOMRIGHT))
-				{
-					glVertex3f(wx + ww - bevel, wy + wh, 0);
-					glVertex3f(wx + ww - bevel, wy + wh, wwidth);
-					glVertex3f(wx + ww - bevel / 2.0f, wy + wh - bevel + bevel / 1.2f, wwidth);
-					glVertex3f(wx + ww - bevel / 2.0f, wy + wh - bevel + bevel / 1.2f, 0);
-
-					glColor4f(1.0f, 1.0f, 1.0f,  w->paint.opacity/OPAQUE);
-
-					glVertex3f(wx + ww - bevel / 2.0f,
-							   wy + wh - bevel + bevel / 1.2f, wwidth);
-					glVertex3f(wx + ww - bevel / 2.0f,
-							   wy + wh - bevel + bevel / 1.2f, 0);
-					glVertex3f(wx + ww, wy + wh - bevel, 0);
-					glVertex3f(wx + ww, wy + wh - bevel, wwidth);
-
-					glColor4f(0.95f, 0.95f, 0.95f,  w->paint.opacity / OPAQUE);
-				}
-				/* Top right bevel */
-				if (GETBEVEL(TOPRIGHT))
-				{
-					glVertex3f(wx + ww - bevel, wy, 0);
-					glVertex3f(wx + ww - bevel, wy, wwidth);
-					glVertex3f(wx + ww - bevel / 2.0f, wy + bevel - bevel / 1.2f, wwidth);
-					glVertex3f(wx + ww - bevel / 2.0f, wy + bevel - bevel / 1.2f, 0);
-
-					glColor4f(1.0f, 1.0f, 1.0f,  w->paint.opacity/OPAQUE);
-
-					glVertex3f(wx + ww - bevel / 2.0f, wy + bevel - bevel / 1.2f, wwidth);
-					glVertex3f(wx + ww - bevel / 2.0f, wy + bevel - bevel / 1.2f, 0);
-					glVertex3f(wx + ww, wy + bevel, 0);
-					glVertex3f(wx + ww, wy + bevel, wwidth);
-				}
-			}
-
-			glEnd();
-			glPopMatrix();
-
-			if (mask & PAINT_WINDOW_FRONT_TO_BACK_MASK)
-			{
-				glEnable(GL_CULL_FACE);	// Re-enable culling.
-				glCullFace(GL_FRONT);
-
-
-
-				matrixTranslate(&wTransform, 0.0f, 0.0f, wwidth);
-
-				UNWRAP(tds, w->screen, paintWindow);
-				status = (*w->screen->paintWindow) (w, attrib, &wTransform, region, mask);
-				WRAP(tds, w->screen, paintWindow, tdPaintWindow);
-
-				matrixTranslate(&wTransform, 0.0f, 0.0f, -wwidth);
-			}
-
-			else
-			{
-				glEnable(GL_CULL_FACE);	// Re-enable culling.
-				glCullFace(GL_BACK);
-
-				UNWRAP(tds, w->screen, paintWindow);
-				status = (*w->screen->paintWindow) (w, attrib, &wTransform, region, mask);
-				WRAP(tds, w->screen, paintWindow, tdPaintWindow);
-			}
-
-			glCullFace(GL_BACK);
-
-			if (!wasCulled)
-				glDisable(GL_CULL_FACE);
-
-			glNormal3f(0.0, 0.0, -1.0);
-
-			return status;
-		}
 	}
 
 	UNWRAP(tds, w->screen, paintWindow);
@@ -889,15 +653,8 @@
 		if (CREATE_MIPMAPS)
 			s->display->textureFilter = GL_LINEAR_MIPMAP_LINEAR;
 
-		/*Front to back should always be done.
-		   If FTB is already in mask, then the viewport is reversed, and all windows should be reversed.
-		   If BTF is in mask, the viewport isn't reversed, but some of the windows there might be, so we set FTB in addition to BTF, and check for each window what mode it should use... */
-
-		if ((mask & PAINT_SCREEN_ORDER_BACK_TO_FRONT_MASK) && !tds->insideCube)
-		{
-			tds->reorderWindowPainting = TRUE;
-			mask |= PAINT_SCREEN_ORDER_FRONT_TO_BACK_MASK;
-		}
+		mask |= PAINT_SCREEN_ORDER_BACK_TO_FRONT_MASK | PAINT_SCREEN_ORDER_FRONT_TO_BACK_MASK;
+		tds->reorderWindowPainting = TRUE;
 	}
 
 	UNWRAP(tds, s, paintTransformedScreen);