All pastes #431834 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-04-09 22:16 UTC
rendered paste body
static Bool
cubeCheckFTB (CompScreen *s, 
              const ScreenPaintAttrib *sAttrib, 
              const CompTransform  *transform
              int output)
{
    float mvp[16];

    MULTM(w->screen->projection, transform->m, mvp);

    float pntA[4] = { w->screen->outputDev[output].region.extents.x1,
                      w->screen->outputDev[output].region.extents.y1,
                      tdw->currentZ, 1};

    float pntB[4] = { w->screen->outputDev[output].region.extents.x2,
                      w->screen->outputDev[output].region.extents.y1,
                      tdw->currentZ, 1};

    float pntC[4] = { w->screen->outputDev[output].region.extents.x1 + w->screen->outputDev[output].width / 2.0f,
                      w->screen->outputDev[output].region.extents.y1 + w->screen->outputDev[output].height / 2.0f,
                      tdw->currentZ, 1};

    MULTMV(mvp, pntA);
    DIVV(pntA);

    MULTMV(mvp, pntB);
    DIVV(pntB);

    MULTMV(mvp, pntC);
    DIVV(pntC);

    float vecA[3] = { pntC[0] - pntA[0],
                      pntC[1] - pntA[1],
                      pntC[2] - pntA[2]};
    
    float vecB[3] = { pntC[0] - pntB[0], 
                      pntC[1] - pntB[1],
                      pntC[2] - pntB[2]};

    float ortho[3] = { vecA[1] * vecB[2] - vecA[2] * vecB[1],
	               vecA[2] * vecB[0] - vecA[0] * vecB[2],
	               vecA[0] * vecB[1] - vecA[1] * vecB[0]};

    if (ortho[2] > 0.0f)	//The window is reversed, should be painted front to back.
    {
	return TRUE;
    }
    
    return FALSE;
}