Name

    NV_alpha_to_coverage_dither_control

Name Strings

    GL_NV_alpha_to_coverage_dither_control

Contact

   Pierre Boudier, NVIDIA Corporation (pboudier 'at' nvidia.com)
    
Contributors

    Tristan Lorach, NVIDIA Corporation    
    Christophe KULESZA, Dassault Systemes

Status

    Pending.

Version

    Last Modified Date:         May 31, 2017
    Revision:                   1.01

Number

    500

Dependencies

    This extension is written against the OpenGL 4.4 specification 
    (Core Profile) but may be used with the Compatibility profile or OpenGL ES 
    2.0 or later.
    
Overview

    NV_alpha_to_coverage_dither_control_triangles provides a new mechanism
    to control whether dithering is applied when the existing alpha to coverage
    functionality is used.
    

New Procedures and Functions

    void AlphaToCoverageDitherControlNV(enum mode)
    
New Tokens

    Accepted by the <param> parameter of AlphaToCoverageDitherControlNV():
        ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV             0x934D
        ALPHA_TO_COVERAGE_DITHER_ENABLE_NV              0x934E
        ALPHA_TO_COVERAGE_DITHER_DISABLE_NV             0x934F
    
    Accepted by the <param> of GetIntegerv():
        ALPHA_TO_COVERAGE_DITHER_MODE_NV                0x92BF

Modification to Chapter 17.3.3 of the OpenGL 4.4 (Core Profile) Specification
(Multisample Fragment Operations)

    Modify the paragraph describing SAMPLE_ALPHA_TO_COVERAGE with

        ... No specific algorithm is required for converting the sample
    alpha values to a temporary coverage value. It is intended that the 
    number of 1's in the temporary coverage be proportional to the set 
    of alpha values for the fragment, with all 1's  corresponding to 
    the maximum of all alpha values, and all 0's corresponding to all 
    alpha values being 0. The alpha values used to generate a coverage 
    value are clamped to the range [0; 1]. It is also intended that the
    algorithm be pseudo-random in nature, to avoid image artifacts due 
    to regular coverage sample locations. 

    The function AlphaToCoverageDitherControlNV() allows to specify the 
    kind of algorithm: If the mode is ALPHA_TO_COVERAGE_DITHER_ENABLE, 
    the algorithm is different at different pixel locations. The dithering 
    should be defined relative to window, not screen, coordinates, so 
    that rendering results are invariant with respect to window position.
    If the mode is ALPHA_TO_COVERAGE_DITHER_DISABLE, then no dithering 
    should be applied and the same conversion should happen regardless of 
    the pixel coordinates. If the mode is ALPHA_TO_COVERAGE_DITHER_DEFAULT, 
    then the algorithm is implementation dependent.

    Addition to the Table 23.11. Multisampling:
    ALPHA_TO_COVERAGE_DITHER_MODE  |  E  |  GetIntegerv  |  ALPHA_TO_COVERAGE_DITHER_DEFAULT  | Control dither for alpha to coverage |  17.3.3

New State

    None.

Additions to the AGL/GLX/WGL Specifications

    None.

GLX Protocol

    None.
    
Modifications to the OpenGL Shading Language Specification, Version 4.40

    None.

Errors

    None

Issues

    (XX) 

Revision History

    Revision 1.01
    - fix incorrect enum names in the text section
    Revision 1
    - Internal revisions.
