Hi all,
I have figured out how to use glDrawElements to render quads from an interleaved array of vertices to draw an internal video buffer of pixels at various sizes to the screen (see code below):

Code:
procedure TApplication.RenderScreen;type
  TVertex = packed record
    x,y,z : Single;
    col   : TRGBA;
  end;


var
  col         : TRGBA;
  buff        : PVideoBuffer;
  palette     : TChip16Palette;
  sx,sy       : Integer;
  dx,dy       : Integer;


  Vertices    : array[0..(cVideoPixelCount * 4) - 1] of TVertex; // 4 x vertices per screen pixel (maximum possible per screen...)
  Indices     : array[0..(cVideoPixelCount * 4) - 1] of GLuint;  // 4 x vertices per screen pixel (maximum possible per screen...)
  VPointer    : PByte; // vertices pointer
  CPointer    : PByte; // color pointer
  VertexCount : Integer;
begin
  palette := FChip16.Palette;


  col := palette[FChip16.BGColor];
  glClearColor(col.r/255,col.g/255,col.b/255,col.a/255);


  glClear(GL_COLOR_BUFFER_BIT);


  glDisable(GL_BLEND);


  // draw video buffer to screen
  buff := FChip16.VideoBuffer;


  // enable and specify pointers to vertex arrays
  glEnableClientState(GL_COLOR_ARRAY);
  glEnableClientState(GL_VERTEX_ARRAY);


  VPointer := @Vertices[0];
  CPointer := @Vertices[0];
  Inc(CPointer,3 * SizeOf(GLfloat));


  glVertexPointer(3, GL_FLOAT        , SizeOf(TVertex), VPointer);
  glColorPointer (4, GL_UNSIGNED_BYTE, SizeOf(TVertex), CPointer);


  VertexCount := 0;
  dy := 0;
  for sy := 0 to cVideoResY - 1 do
  begin
    dx := 0;
    for sx := 0 to cVideoResX - 1 do
    begin
      col := palette[buff^[sy,sx]];


      if buff^[sy,sx] <> cTransparentColor then
      begin
        Vertices[VertexCount].col := col;
        Vertices[VertexCount].x   := dx;
        Vertices[VertexCount].y   := dy;
        Indices[VertexCount]      := VertexCount;
        Inc(VertexCount);


        Vertices[VertexCount].col := col;
        Vertices[VertexCount].x   := dx+FScale;
        Vertices[VertexCount].y   := dy;
        Indices[VertexCount]      := VertexCount;
        Inc(VertexCount);


        Vertices[VertexCount].col := col;
        Vertices[VertexCount].x   := dx+FScale;
        Vertices[VertexCount].y   := dy+FScale;
        Indices[VertexCount]      := VertexCount;
        Inc(VertexCount);


        Vertices[VertexCount].col := col;
        Vertices[VertexCount].x   := dx;
        Vertices[VertexCount].y   := dy+FScale;
        Indices[VertexCount]      := VertexCount;
        Inc(VertexCount);
      end;
      Inc(dx,FScale);
    end;
    Inc(dy,FScale);
  end;


  // draw number of elements
  glDrawElements(GL_QUADS, VertexCount, GL_UNSIGNED_INT,@Indices);


  glDisableClientState(GL_VERTEX_ARRAY);  // disable vertex arrays
  glDisableClientState(GL_COLOR_ARRAY);
end;
Since I want to see if I can port this to Android, I need to use triangles instead of quads (is deprecated now...), but I just can't figure out how to place the vertices in the vertex array to draw triangles properly...

My screen is orientated with (0,0) at top left, and using Clockwise winding for triangles, quads, etc.

Any ideas?
cheers,
Paul