Name

    OES_extended_matrix_palette

Name Strings

    GL_OES_extended_matrix_palette

Contact

    Aaftab Munshi (amunshi@ati.com)

Notice

    Copyright (c) 2005-2013 The Khronos Group Inc. Copyright terms at
        http://www.khronos.org/registry/speccopyright.html

Specification Update Policy

    Khronos-approved extension specifications are updated in response to
    issues and bugs prioritized by the Khronos OpenGL ES Working Group. For
    extensions which have been promoted to a core Specification, fixes will
    first appear in the latest version of that core Specification, and will
    eventually be backported to the extension document. This policy is
    described in more detail at
        https://www.khronos.org/registry/OpenGL/docs/update_policy.php

Status

    Ratified by the Khronos BOP, July 22, 2005.

Version

    Last Modified Date: February 3, 2005

Number

    OpenGL ES Extension #8

Dependencies

    OES_matrix_palette is required
    OpenGL ES 1.1 is required.

Overview

    The OES_matrix_palette extension added the ability to support vertex skinning 
    in OpenGL ES.  One issue with OES_matrix_palette is that the minimum size of 
    the matrix palette is very small.  This leads to applications having to break 
    geometry into smaller primitive sets called via. glDrawElements.  This has an 
    impact on the overall performance of the OpenGL ES implementation.  In general, 
    hardware implementations prefer primitive packets with as many triangles as 
    possible.  The default minimum size defined in OES_matrix_palette is not 
    sufficient to allow this.  The OES_extended_matrix_palette extension increases 
    this minimum from 9 to 32.  

        Another issue is that it is very difficult for ISVs to handle different 
        size matrix palettes as it affects how they store their geometry 
        in the database - may require multiple representations which is
        not really feasible.  So the minimum size is going to be what most ISVs
        will use.

        By extending the minimum size of the matrix palette, we remove this
        fragmentation and allow applications to render geometry with minimal
        number of calls to glDrawElements or glDrawArrays.  The OpenGL ES
        implementation can support this without requiring any additional hardware
        by breaking the primitive, plus it gives implementations the flexibility
        to accelerate with a bigger matrix palette if they choose to do so.

        Additionally, feedback has also been received to increase the number of
        matrices that are blend per vertex from 3 to 4.  The OES_extended_matrix_palette
        extension increases the minium number of matrices / vertex to 4.
    
IP Status

    None. 

Issues

    None

New Procedures and Functions

    None

New Tokens

    No new tokens added except that the default values for
    MAX_PALETTE_MATRICES_OES and MAX_VERTEX_UNITS_OES are 32 and 4 respectively.

Additions to Chapter 2 of the OpenGL ES 1.0 Specification

    None

Errors

    None

New State

Get Value                   Type  Command      Value    Description 
---------                   ----  -------      -------  -----------

MAX_PALETTE_MATRICES_OES    Z+    GetIntegerv  32       size of matrix palette
MAX_VERTEX_UNITS_OES        Z+    GetIntegerv  4        number of matrices per vertex

Revision History

    Feb 03, 2005   Aaftab Munshi    First draft of extension
