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 of 3, the coefficients associated with any other 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 parameter of EnableVertexAttribAPPLE, DisableVertexAttribAPPLE, and IsVertexAttribEnabledAPPLE. VERTEX_ATTRIB_MAP1_APPLE 0x8A00 VERTEX_ATTRIB_MAP2_APPLE 0x8A01 Accepted by the 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 is greater than or equal to MAX_VERTEX_ATTRIBS_ARB. The error INVALID_ENUM is generated by EnableVertexAttribAPPLE, DisableVertexAttribAPPLE, or IsVertexAttribEnabledAPPLE if is not VERTEX_ATTRIB_MAP1_APPLE or VERTEX_ATTRIB_MAP2_APPLE. The error INVALID_VALUE is generated by MapVertexAttrib**APPLE if is less than 1 or greater than 4. The error INVALID_VALUE is generated by MapVertexAttrib1*APPLE if is less than 1 or greater than MAX_EVAL_ORDER. The error INVALID_VALUE is generated by MapVertexAttrib2*APPLE if or are less than 1 or greater than MAX_EVAL_ORDER. The error INVALID_VALUE is generated by MapVertexAttrib1*APPLE if is equal to . The error INVALID_VALUE is generated by MapVertexAttrib2*APPLE if is equal to or is equal to . The error INVALID_VALUE is generated by MapVertexAttrib1*APPLE if is less than . The error INVALID_VALUE is generated by MapVertexAttrib1*APPLE if is less than or if 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