コード例 #1
0
ファイル: arrays.c プロジェクト: humu2009/tinygl.js
void
glopDrawElements(GLContext *c, GLParam *param)
{
  int i;
  int idx;
  int states = c->client_states;
  int mode = param[1].i;
  int count = param[2].i;
  int type = param[3].i;
  unsigned int *indices_u32 = (unsigned int*)param[4].p;
  unsigned short *indices_u16 = (unsigned short*)indices_u32;

  GLParam p[2];
  p[1].i = mode;
  glopBegin(c, p);

  for (int ii=0; ii<count; ii++) {
    idx = (type == GL_UNSIGNED_INT) ? indices_u32[ii] : indices_u16[ii];
    if (states & COLOR_ARRAY) {
      GLParam p[5];
      int size = c->color_array_size; 
      i = idx * (size + c->color_array_stride);
      p[1].f = c->color_array[i];
      p[2].f = c->color_array[i+1];
      p[3].f = c->color_array[i+2];
      p[4].f = size > 3 ? c->color_array[i+3] : 1.0f;
      glopColor(c, p);  
    }
    if (states & NORMAL_ARRAY) {
      i = idx * (3 + c->normal_array_stride);
      c->current_normal.X = c->normal_array[i];
      c->current_normal.Y = c->normal_array[i+1];
      c->current_normal.Z = c->normal_array[i+2];
      c->current_normal.W = 0.0f;
    }
    if (states & TEXCOORD_ARRAY) {
      int size = c->texcoord_array_size;
      i = idx * (size + c->texcoord_array_stride);
      c->current_tex_coord.X = c->texcoord_array[i];
      c->current_tex_coord.Y = c->texcoord_array[i+1];
      c->current_tex_coord.Z = size > 2 ? c->texcoord_array[i+2] : 0.0f;
      c->current_tex_coord.W = size > 3 ? c->texcoord_array[i+3] : 1.0f;
    }
    if (states & VERTEX_ARRAY) {
      GLParam p[5];
      int size = c->vertex_array_size;
      i = idx * (size + c->vertex_array_stride);
      p[1].f = c->vertex_array[i];
      p[2].f = c->vertex_array[i+1];
      p[3].f = size > 2 ? c->vertex_array[i+2] : 0.0f;
      p[4].f = size > 3 ? c->vertex_array[i+3] : 1.0f;
      glopVertex(c, p);
    }
  }

  glopEnd(c, p);
}
コード例 #2
0
ファイル: arrays.c プロジェクト: humu2009/tinygl.js
void
glopDrawArrays(GLContext *c, GLParam *param)
{
  int i;
  int idx;
  int states = c->client_states;
  int mode = param[1].i;
  int first = param[2].i;
  int count = param[3].i;

  GLParam p[2];
  p[1].i = mode;
  glopBegin(c, p);

  for (int vi=0; vi<count; vi++) {
    idx = first + vi;
    if (states & COLOR_ARRAY) {
      GLParam p[5];
      int size = c->color_array_size; 
      i = idx * (size + c->color_array_stride);
      p[1].f = c->color_array[i];
      p[2].f = c->color_array[i+1];
      p[3].f = c->color_array[i+2];
      p[4].f = size > 3 ? c->color_array[i+3] : 1.0f;
      glopColor(c, p);  
    }
    if (states & NORMAL_ARRAY) {
      i = idx * (3 + c->normal_array_stride);
      c->current_normal.X = c->normal_array[i];
      c->current_normal.Y = c->normal_array[i+1];
      c->current_normal.Z = c->normal_array[i+2];
      c->current_normal.W = 0.0f;
    }
    if (states & TEXCOORD_ARRAY) {
      int size = c->texcoord_array_size;
      i = idx * (size + c->texcoord_array_stride);
      c->current_tex_coord.X = c->texcoord_array[i];
      c->current_tex_coord.Y = c->texcoord_array[i+1];
      c->current_tex_coord.Z = size > 2 ? c->texcoord_array[i+2] : 0.0f;
      c->current_tex_coord.W = size > 3 ? c->texcoord_array[i+3] : 1.0f;
    }
    if (states & VERTEX_ARRAY) {
      GLParam p[5];
      int size = c->vertex_array_size;
      i = idx * (size + c->vertex_array_stride);
      p[1].f = c->vertex_array[i];
      p[2].f = c->vertex_array[i+1];
      p[3].f = size > 2 ? c->vertex_array[i+2] : 0.0f;
      p[4].f = size > 3 ? c->vertex_array[i+3] : 1.0f;
      glopVertex(c, p);
    }
  }

  glopEnd(c, p);
}
コード例 #3
0
ファイル: arrays.c プロジェクト: Masshat/almos
void
glopArrayElement(GLContext *c, GLParam *param)
{
  int i;
  int states = c->client_states;
  int idx = param[1].i;
    
  if (states & COLOR_ARRAY) {
    GLParam p[5];
    int size = c->color_array_size; 
    i = idx * (size + c->color_array_stride);
    p[1].f = c->color_array[i];
    p[2].f = c->color_array[i+1];
    p[3].f = c->color_array[i+2];
    p[4].f = size > 3 ? c->color_array[i+3] : 1.0f;
    glopColor(c, p);  
  }
  if (states & NORMAL_ARRAY) {
    i = idx * (3 + c->normal_array_stride);
    c->current_normal.X = c->normal_array[i];
    c->current_normal.Y = c->normal_array[i+1];
    c->current_normal.Z = c->normal_array[i+2];
    c->current_normal.Z = 0.0f;
  }
  if (states & TEXCOORD_ARRAY) {
    int size = c->texcoord_array_size;
    i = idx * (size + c->texcoord_array_stride);
    c->current_tex_coord.X = c->texcoord_array[i];
    c->current_tex_coord.Y = c->texcoord_array[i+1];
    c->current_tex_coord.Z = size > 2 ? c->texcoord_array[i+2] : 0.0f;
    c->current_tex_coord.W = size > 3 ? c->texcoord_array[i+3] : 1.0f;
  }
  if (states & VERTEX_ARRAY) {
    GLParam p[5];
    int size = c->vertex_array_size;
    i = idx * (size + c->vertex_array_stride);
    p[1].f = c->vertex_array[i];
    p[2].f = c->vertex_array[i+1];
    p[3].f = size > 2 ? c->vertex_array[i+2] : 0.0f;
    p[4].f = size > 3 ? c->vertex_array[i+3] : 1.0f;
    glopVertex(c, p);
  }
}