/**********************************************************************
This file is part of Crack dot Com's free source code release of
Golgotha.
for
information about compiling & licensing issues visit this URL
If that doesn't help, contact Jonathan Clark at
golgotha_source@usa.net (Subject should have "GOLG" in it)
***********************************************************************/
#ifndef R1_CLIP_HH
#define R1_CLIP_HH
#include "r1_vert.hh"
#include "error/error.hh"
#include "tex_id.hh"
class r1_render_api_class;
class i4_draw_context_class;
struct r1_clip_vert_array
{
int buf_size;
int total;
r1_vert *buf;
r1_vert *add()
{
I4_ASSERT(total(v.z)) clip_code |= 1;
else
if (v.x<-(v.z)) clip_code |= 2;
if (v.y>(v.z)) clip_code |= 4;
else
if (v.y<-(v.z)) clip_code |= 8;
if (v.zr1_far_clip_z) clip_code |=32;
return clip_code;
}
inline w8 r1_calc_ortho_outcode(i4_3d_vector &v)
{
w8 clip_code = 0;
if (v.x>1.0) clip_code |= 1;
else
if (v.x<-1.0) clip_code |= 2;
if (v.y>1.0) clip_code |= 4;
else
if (v.y<-1.0) clip_code |= 8;
if (v.zr1_far_clip_z) clip_code |=32;
return clip_code;
}
enum {R1_CLIP_NO_CALC_OUTCODE=1, R1_CLIP_ORTHO=128, R1_CLIP_PROJECT_CLIPPED_POINTS=2};
inline w8 r1_calc_outcode(r1_vert *v)
{
w8 clip_code=0;
if (v->v.x>(v->v.z)) clip_code |= 1;
else
if (v->v.x<-(v->v.z)) clip_code |= 2;
if (v->v.y>(v->v.z)) clip_code |= 4;
else
if (v->v.y<-(v->v.z)) clip_code |= 8;
if (v->v.zv.z>r1_far_clip_z) clip_code |=32;
v->outcode = clip_code;
return clip_code;
}
inline w8 r1_calc_ortho_outcode(r1_vert *v)
{
w8 clip_code=0;
if (v->v.x>1.0) clip_code |= 1;
else
if (v->v.x<-1.0) clip_code |= 2;
if (v->v.y>1.0) clip_code |= 4;
else
if (v->v.y<-1.0) clip_code |= 8;
if (v->v.zv.z>r1_far_clip_z) clip_code |=32;
v->outcode = clip_code;
return clip_code;
}
#endif