/*
    Raydium - CQFD Corp.
    http://raydium.org/
    Released under both BSD license and Lesser GPL library license.
    See "license.txt" file.
*/

#ifndef DONT_INCLUDE_HEADERS
#include "index.h"
#else
#include "headers/vertex.h"
#endif

void raydium_vertex_add(GLfloat x, GLfloat y, GLfloat z/*, GLfloat nx, GLfloat ny, GLfloat nz*/)
{
int i;
raydium_vertex_x(raydium_vertex_index)=x;
raydium_vertex_y(raydium_vertex_index)=y;
raydium_vertex_z(raydium_vertex_index)=z;
raydium_vertex_texture[raydium_vertex_index]=raydium_texture_current_main;
raydium_vertex_texture_multi[raydium_vertex_index]=raydium_texture_current_multi;

for(i=0;i<(RAYDIUM_RENDER_MAX_TEXUNITS-1);i++)
        raydium_vertex_texture_env[i][raydium_vertex_index]=raydium_texture_current_env[i];

if(raydium_texture_current_multi)
{
    if(raydium_texture_current_multi_u==-99999 &&
       raydium_texture_current_multi_v==-99999 )
    {
    raydium_vertex_texture_multi_u(raydium_vertex_index)=raydium_internal_vertex_next_u*RAYDIUM_RENDER_MULTITEX_AUTO_UV_FACT;
    raydium_vertex_texture_multi_v(raydium_vertex_index)=raydium_internal_vertex_next_v*RAYDIUM_RENDER_MULTITEX_AUTO_UV_FACT;
    }
    else
    {
    raydium_vertex_texture_multi_u(raydium_vertex_index)=raydium_texture_current_multi_u;
    raydium_vertex_texture_multi_v(raydium_vertex_index)=raydium_texture_current_multi_v;
    }
}
else
{
raydium_vertex_texture_multi_u(raydium_vertex_index)=0;
raydium_vertex_texture_multi_v(raydium_vertex_index)=0;
}


if(raydium_internal_vertex_next_extras)
{
 raydium_vertex_texture_u(raydium_vertex_index)=raydium_internal_vertex_next_u;
 raydium_vertex_texture_v(raydium_vertex_index)=raydium_internal_vertex_next_v;
}
else
{
 if(raydium_vertex_offset_triangle==0)
 {
 raydium_vertex_texture_u(raydium_vertex_index)=0.0;
 raydium_vertex_texture_v(raydium_vertex_index)=0.0;
 }

 if(raydium_vertex_offset_triangle==1)
 {
 raydium_vertex_texture_u(raydium_vertex_index)=1.0;
 raydium_vertex_texture_v(raydium_vertex_index)=0.0;
 }

 if(raydium_vertex_offset_triangle==2)
 {
 raydium_vertex_texture_u(raydium_vertex_index)=1.0;
 raydium_vertex_texture_v(raydium_vertex_index)=1.0;
 }
}


raydium_vertex_normal_visu_x(raydium_vertex_index)=raydium_internal_vertex_next_nx;
raydium_vertex_normal_visu_y(raydium_vertex_index)=raydium_internal_vertex_next_ny;
raydium_vertex_normal_visu_z(raydium_vertex_index)=raydium_internal_vertex_next_nz;

raydium_vertex_index++;

 if(++raydium_vertex_offset_triangle>=3)
 {
  if(raydium_internal_vertex_next_extras<2) raydium_normal_generate_lastest_triangle(1);
  else raydium_normal_generate_lastest_triangle(0);
  raydium_normal_generate_lastest_tangent();
  raydium_vertex_offset_triangle=0;
 }

 raydium_internal_vertex_next_extras=0;
if(raydium_vertex_index>=RAYDIUM_MAX_VERTICES) {raydium_log("out of vertex table #%i!",raydium_texture_current_main); exit(29); }/* !!! TO CHANGE */
}


void raydium_vertex_uv_add(GLfloat x, GLfloat y, GLfloat z,GLfloat u, GLfloat v)
{
raydium_internal_vertex_next_extras=1;
raydium_internal_vertex_next_u=u;
raydium_internal_vertex_next_v=v;
raydium_vertex_add(x,y,z);
}

void raydium_vertex_uv_normals_add(GLfloat x, GLfloat y, GLfloat z, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat u, GLfloat v)
{
raydium_internal_vertex_next_extras=2;
raydium_internal_vertex_next_u=u;
raydium_internal_vertex_next_v=v;

raydium_internal_vertex_next_nx=nx;
raydium_internal_vertex_next_ny=ny;
raydium_internal_vertex_next_nz=nz;
raydium_vertex_add(x,y,z);
}