blob: cd4e46406949e53e50d33d056ea172018377e4c7 [file] [log] [blame]
Name
APPLE_vertex_program_evaluators
Name Strings
GL_APPLE_vertex_program_evaluators
Contact
Bob Beretta, Apple Inc. (beretta 'at' apple.com)
Version
1.0
Number
369
Dependencies
This extension requires ARB_vertex_program.
Overview
This extension allows the one- and two-dimensional evaluators to be used
with vertex program attributes. The operation of this extension is
precisely analogous to the operation of the normal evaluators.
Where normal evaluators are enabled with Enable(MAP1_VERTEX_3), for
example, attribute evaluators are enabled with
EnableVertexAttribAPPLE(index, VERTEX_ATTRIB_MAP1_APPLE).
Where the size (1, 2, 3, or 4) of a normal evaluator is embedded in the
token for that evaluator (for example, MAP1_VERTEX_3 has size 3),
attribute evaluators give the size as an argument to MapVertexAttrib**APPLE.
The 1D and 2D evaluator order, domain, and coefficients are given as
arguments to MapVertexAttrib**APPLE, with exactly the same meaning and
restrictions as the same arguments to Map1f, Map2f, Map1d, & Map2d.
The evaluator order, domain, and coefficients may be queried with
GetVertexAttrib*vARB, with the same operation as GetMap*v.
Issues
(1) Normal evaluators provide separate storage for the coefficients of
each size of each vertex element. For example, GL_MAP1_VERTEX_3
and GL_MAP1_VERTEX_4 indentify separate storage for 3-element vertex
coefficients and 4-element vertex coefficients. Does this extension
provide separate storage for each possible attribute size, 1, 2, 3, & 4?
RESOLVED: No. Size is given as a parameter to MapVertexAttrib**APPLE.
Storage is only provided for one set of coefficients per vertex attrib
index. If MapVertexAttrib**APPLE is called with a <size> of 3, the
coefficients associated with any other <size> are replaced.
New Procedures and Functions
void EnableVertexAttribAPPLE(uint index, enum pname);
void DisableVertexAttribAPPLE(uint index, enum pname);
boolean IsVertexAttribEnabledAPPLE(uint index, enum pname);
void MapVertexAttrib1dAPPLE(uint index, uint size, double u1, double u2,
int stride, int order, const double *points);
void MapVertexAttrib1fAPPLE(uint index, uint size, float u1, float u2,
int stride, int order, const float *points);
void MapVertexAttrib2dAPPLE(uint index, uint size, double u1, double u2,
int ustride, int uorder, double v1, double v2, int vstride, int vorder,
const double *points);
void MapVertexAttrib2fAPPLE(uint index, uint size, float u1, float u2,
int ustride, int uorder, float v1, float v2, int vstride, int vorder,
const float *points);
New Tokens
Accepted by the <pname> parameter of EnableVertexAttribAPPLE,
DisableVertexAttribAPPLE, and IsVertexAttribEnabledAPPLE.
VERTEX_ATTRIB_MAP1_APPLE 0x8A00
VERTEX_ATTRIB_MAP2_APPLE 0x8A01
Accepted by the <pname> parameter of GetVertexAttribdvARB,
GetVertexAttribfvARB, and GetVertexAttribivARB.
VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02
VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03
VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04
VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05
VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06
VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07
VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08
VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09
Errors
The error INVALID_VALUE is generated by EnableVertexAttribAPPLE,
DisableVertexAttribAPPLE, IsVertexAttribEnabledAPPLE, or
MapVertexAttrib**APPLE if <index> is greater than or equal to
MAX_VERTEX_ATTRIBS_ARB.
The error INVALID_ENUM is generated by EnableVertexAttribAPPLE,
DisableVertexAttribAPPLE, or IsVertexAttribEnabledAPPLE if <pname>
is not VERTEX_ATTRIB_MAP1_APPLE or VERTEX_ATTRIB_MAP2_APPLE.
The error INVALID_VALUE is generated by MapVertexAttrib**APPLE if
<size> is less than 1 or greater than 4.
The error INVALID_VALUE is generated by MapVertexAttrib1*APPLE if
<order> is less than 1 or greater than MAX_EVAL_ORDER.
The error INVALID_VALUE is generated by MapVertexAttrib2*APPLE if
<uorder> or <vorder> are less than 1 or greater than MAX_EVAL_ORDER.
The error INVALID_VALUE is generated by MapVertexAttrib1*APPLE if
<u1> is equal to <u2>.
The error INVALID_VALUE is generated by MapVertexAttrib2*APPLE if
<u1> is equal to <u2> or <v1> is equal to <v2>.
The error INVALID_VALUE is generated by MapVertexAttrib1*APPLE if
<stride> is less than <size>.
The error INVALID_VALUE is generated by MapVertexAttrib1*APPLE if
<ustride> is less than <size> or if <vstride> is less than size.
New State
Get Value Type Get Command Initial Value Description Section
------------------------------ ------- -------------------------- ------------- ----------------- ------------
VERTEX_ATTRIB_MAP1_APPLE 16+xB IsVertexAttribEnabledAPPLE False 1D evaluator enable, eval
enabled
VERTEX_ATTRIB_MAP2_APPLE 16+xB IsVertexAttribEnabledAPPLE False 2D evaluator enable, eval
enabled
VERTEX_ATTRIB_MAP1_SIZE_APPLE 16+xZ4 GetVertexAttribivARB 4 1D evaluator eval
size
VERTEX_ATTRIB_MAP2_SIZE_APPLE 16+xZ4 GetVertexAttribivARB 4 2D evaluator eval
size
VERTEX_ATTRIB_MAP1_ORDER_APPLE 16+xZ+ GetVertexAttribivARB 1 1D evaluator eval
order
VERTEX_ATTRIB_MAP2_ORDER_APPLE 32+xZ+ GetVertexAttribivARB 1, 1 2D evaluator eval
order
VERTEX_ATTRIB_MAP1_COEFF_APPLE N+xRn GetVertexAttribfvARB 0, 0, 0, 1 1D evaluator eval
coefficients
VERTEX_ATTRIB_MAP2_COEFF_APPLE N+xM+xRn GetVertexAttribfvARB 0, 0, 0, 1 2D evaluator eval
coefficients
VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 2+xR GetVertexAttribfvARB 0, 1 1D evaluator eval
domain
VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 4+xR GetVertexAttribfvARB 0, 1, 0, 1 2D evaluator eval
domain
New Implementation Dependent State
None