Example #1
0
bool BSP::intersects3DNow(const vec3 &v0, const vec3 &v1) const {
	if (top != NULL){
		femms();

		vec4 v04 = vec4(v0, 1);
		vec4 v14 = vec4(v1, 1);

		bool result = top->intersects3DNow(v04, v14, v14 - v04);

		femms();
		return result;
	}

	return false;
}
Example #2
0
bool BSP::isInOpenSpace3DNow(const vec3 &pos) const {
	if (top != NULL){
		SSENode *node = sseTop;
		femms();

		v2sf posXY, posZ1;
		posXY = *(v2sf *) &pos.x;
		posZ1.m64_f32[0] = pos.z;
		posZ1.m64_f32[1] = 1.0f;

		while (true){
			v2sf planeXY = ((v2sf *) &node->tri.plane)[0];
			v2sf planeZD = ((v2sf *) &node->tri.plane)[1];

			v2sf dotXY = pfmul(planeXY, posXY);
			v2sf dotZD = pfmul(planeZD, posZ1);
			v2sf dot = pfacc(dotXY, dotZD);
			dot = pfacc(dot, dot);

			int d = _m_to_int(dot);

			if (d > 0){
				if (node->front){
					node = node->front;
				} else {
					femms();
					return true;
				}
			} else {
				if (node->back){
					node = node->back;
				} else {
					femms();
					return false;
				}
			}
		}
	}

	return false;
}
Example #3
0
static void blend_func_8_3dnow(uint8_t * t,
                             uint8_t * m,
                             uint8_t * b,
                             uint8_t * dst,
                             int num)
  {
  int i;
  int imax;

  imax = num / 8;

  //  pxor_r2r(mm7, mm7);

  for(i = 0; i < imax; i++)
    {
    movq_m2r(*t, mm0);
    //    movq_m2r(*m, mm1);
    //    movq_m2r(*b, mm2);

    pavgbusb_m2r(*b, mm0);
    pavgbusb_m2r(*m, mm0);
    
    MOVQ_R2M(mm0, *dst);
    
    m += 8;
    b += 8;
    t += 8;
    dst += 8;
    }
  
  femms();
  
  imax = num % 8;
  for(i = 0; i < imax; i++)
    {
    *(dst++) = (*(t++) + (*(m++) << 1) + *(b++)) >> 2;
    }
  }