

Name

    IBM_vertex_array_lists

Name Strings

    GL_IBM_vertex_array_lists

Version

    IBM Date: 1999/06/02 13:18:29  Revision: 1.8 

Number

    201

Dependencies

    OpenGL 1.1 is required. The language is written against the OpenGL 1.2
    specification.

    This extension affects/interacts with the EXT_multi_draw_arrays and
    IBM_multimode_draw_arrays extensions.

    Support for the FogCoordPointerListIBM function is only required if
    the EXT_fog_coord extension is supported.

    Support for the SecondaryColorPointerListIBM function is only required if
    the EXT_secondary_color extension is supported.

Overview

    This extension introduces seven (7) new functions that set the 
    vertex array pointers. However, instead of a single pointer, these
    functions provide a list of array pointers that can be used by the 
    EXT_multi_draw_arrays and IBM_multimode_draw_arrays extension 
    functions to draw from multiple of vertex arrays. The first 
    primitive will use the first array in the list, the second primitive
    will use the second array in the list, and so forth. If a glDrawArray,
    DrawElements, or DrawRangeElements function is used, then 
    only the first vertex array in the list is used.

    When a vertex array list is specified, only the list pointer
    is kept by the underlying OpenGL function. Therefore, the list
    must be staticly defined for the entire duration of its usage,
    much in the same manner as the vertex arrays themselves. Also
    note that the list function can therefore also be used to change
    array pointers without making a OpenGL API function call.

    A <ptrstride> value of zero (0) can be used to force all primitives
    of a multi-vertex array to use only the first vertex array in 
    the list. 

    The <stride> parameter of the list pointer functions differs from
    that of the non-list vertex array pointer functions in that 1)
    both negative and positive strides are accepted thusly allowing
    vertex lists to be rendered in reverse order; 2) a <stride> of
    zero (0) results in no stride and can be used to specify a single
    vertex attribute for each vertex of the primitive.

    These new functions are a superset of the standard OpenGL 1.2 vertex
    array (non-list) pointer functions and share common state. Therefore,
    the list pointer and non-list pointer functions can be used
    interchangably.

    New queries are provided by this extension so that ZAPdb can be extended
    to query the list pointer state whenever a vertex array function 
    is traced. The pointer returned by a query of *_ARRAY_POINTER returns
    the first entry in the array list.


Issues

New Procedures and Functions

    void ColorPointerListIBM (GLint size, 
		 	      GLenum type, 
			      GLint stride, 
			      const GLvoid **pointer, 
			      GLint ptrstride)

    void SecondaryColorPointerListIBM (GLint size, 
                                       GLenum type, 
			               GLint stride, 
			               const GLvoid **pointer, 
			               GLint ptrstride)

    void EdgeFlagPointerListIBM (GLint stride,
				 const GLboolean **pointer,
				 GLint ptrstride);

    void FogCoordPointerListIBM (GLenum type,
				 GLint stride,
				 const GLvoid **pointer,
				 GLint ptrstride)

    void IndexPointerListIBM (GLenum type, 
			      GLint stride, 
			      const GLvoid **pointer, 
			      GLint ptrstride);

    void NormalPointerListIBM (GLenum type, 
			       GLint stride, 
			       const GLvoid **pointer, 
			       GLint ptrstride);

    void TexCoordPointerListIBM (GLint size, 
				 GLenum type, 
				 GLint stride, 
				 const GLvoid **pointer,
				 GLint ptrstride);

    void VertexPointerListIBM (GLint size, 
			       GLenum type, 
			       GLint stride, 
			       const GLvoid **pointer, 
			       GLint ptrstride);


    Parameters
    ----------
        size            Specifies the number of values per vertex that
			are stored in the array.

	type            Specifies the data type of the values stored in
			the array.

        stride		Specifies the number of basic elements (for most
			systems this is bytes) between array values.

	pointer		Pointer to a list of array pointers.

	ptrstride	Specifies the number of basic elements (for most
			systems this is bytes) bewteen array pointers
			in the pointer lists pointed to by <pointer>.

	Valid <size> and <type> parameters for each of the functions is
        the same as the non-list vertex array counterparts. 

				   <size>	<type>
                                   ------       ------------------------
	ColorPointerListIBM	    3,4		GLshort, GLint, GLfloat, 
						GLdouble
        EdgeFlagPointerListIBM      -		-
	FogCoordPointerListIBM      1		GLfloat, GLdouble
	IndexPointerListIBM	    -		GLubyte, GLshort, GLint, 
	 					GLfloat, GLdouble
	NormalPointerListIBM        -           GLbyte, GLshort, GLint,
						GLfloat, GLdouble
	SecondaryColorPointerListIBM 3,4	GLshort, GLint, GLfloat, 
						GLdouble
        TexCoordPointerListIBM      1,2,3,4	GLshort, GLint, GLfloat, 
						GLdouble
	VertexPointerListIBM	    2,3,4	GLshort, GLint, GLfloat, 
						GLdouble

New Tokens

  Accepted by the <pname> parameter of GetPointerv:

  VERTEX_ARRAY_LIST_IBM			103070
  NORMAL_ARRAY_LIST_IBM			103071
  COLOR_ARRAY_LIST_IBM			103072
  INDEX_ARRAY_LIST_IBM			103073
  TEXTURE_COORD_ARRAY_LIST_IBM		103074
  EDGE_FLAG_ARRAY_LIST_IBM		103075
  FOG_COORDINATE_ARRAY_LIST_IBM		103076
  SECONDARY_COLOR_ARRAY_LIST_IBM	103077

  Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
  GetFloatv, and GetDoublev:

  VERTEX_ARRAY_LIST_STRIDE_IBM		103080
  NORMAL_ARRAY_LIST_STRIDE_IBM		103081
  COLOR_ARRAY_LIST_STRIDE_IBM		103082
  INDEX_ARRAY_LIST_STRIDE_IBM		103083
  TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM	103084
  EDGE_FLAG_ARRAY_LIST_STRIDE_IBM	103085
  FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM	103086
  SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM	103087


Additions to Chapter 2 of the 1.2 Specification (OpenGL Operation)

    Section 2.8 Vertex Arrays:

	??? yet to be written ???

Additions to Chapter 3 of the 1.2 Specification (Rasterization)

    None.

Additions to Chapter 4 of the 1.2 Specification (Per-Fragment Operations and

    None.

Additions to Chapter 5 of the 1.2 Specification (Special Functions)

    None.

Additions to Chapter 6 of the 1.2 Specification (State and State Requests)

    Additional table entries for Table 6.6. Vertex Array Data

                                            Get          Initial
       Get Value                       Type Cmnd         Value     Description                   Sec  Attribute
    ---------------------------------  ---- -----------  ------- ------------------------------  --- -----------
    VERTEX_ARRAY_LIST_IBM	        Y   GetPointerv  &NULL   Ptr to list of vertex arrays    2.8 vertex-array
    NORMAL_ARRAY_LIST_IBM	        Y   GetPointerv  &NULL   Ptr to list of normal arrays    2.8 vertex-array
    COLOR_ARRAY_LIST_IBM	        Y   GetPointerv  &NULL   Ptr to list of color arrays     2.8 vertex-array
    INDEX_ARRAY_LIST_IBM                Y   GetPointerv  &NULL   Ptr to list of index arrays     2.8 vertex-array
    TEXTURE_COORD_ARRAY_LIST_IBM        Y   GetPointerv  &NULL   Ptr to list of texture arrays   2.8 vertex-array
    EDGE_FLAG_ARRAY_LIST_IBM            Y   GetPointerv  &NULL   Ptr to list of edgeflag arrays  2.8 vertex-array
    FOG_COORD_ARRAY_LIST_IBM            Y   GetPointerv  &NULL   Ptr to list of fog arrays       2.8 vertex-array
    SECONDARY_COLOR_ARRAY_LIST_IBM      Y   GetPointerv  &NULL   Ptr to list of secondary arrays 2.8 vertex-array
    VERTEX_ARRAY_LIST_STRIDE_IBM        Z   GetIntegetv    0     Vertex list ptr stride          2.8 vertex-array
    NORMAL_ARRAY_LIST_STRIDE_IBM        Z   GetIntegetv    0     Normal list ptr stride          2.8 vertex-array
    COLOR_ARRAY_LIST_STRIDE_IBM	        Z   GetIntegetv    0     Color list ptr stride           2.8 vertex-array
    INDEX_ARRAY_LIST_STRIDE_IBM	        Z   GetIntegetv    0     Index list ptr stride           2.8 vertex-array
    TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM	Z   GetIntegetv    0     Texture coord list ptr stride   2.8 vertex-array
    EDGE_FLAG_ARRAY_LIST_STRIDE_IBM	Z   GetIntegetv    0     Edgeflag list ptr stride        2.8 vertex-array
    FOG_COORD_ARRAY_LIST_STRIDE_IBM	Z   GetIntegetv    0     Fog coord list ptr stride       2.8 vertex-array
    SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM Z GetIntegetv    0     Secondary color list ptr stride 2.8 vertex-array

    Notes:
    1) The initial list pointer values point to a NULL pointer.


Additions to the GLX Specification

    None.

GLX Protocol

    None.

Errors

    GL_INVALID_VALUE is generated if <size> is not an accepted value.

    GL_INVALID_ENUM is generated if <type> is not an accepted value.

New State

    None.


