| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
 | Name
    MESA_pack_invert
Name Strings
    GL_MESA_pack_invert
Contact
    Brian Paul, Tungsten Graphics, Inc. (brian.paul 'at' tungstengraphics.com)
    Keith Whitwell, Tungsten Graphics, Inc.  (keith 'at' tungstengraphics.com)
Status
    Shipping (Mesa 4.0.4 and later)
Version
    1.0
Number
    TBD
Dependencies
    OpenGL 1.0 or later is required
    This extensions is written against the OpenGL 1.4 Specification.
Overview
    This extension adds a new pixel storage parameter to indicate that
    images are to be packed in top-to-bottom order instead of OpenGL's
    conventional bottom-to-top order.  Only pixel packing can be
    inverted (i.e. for glReadPixels, glGetTexImage, glGetConvolutionFilter,
    etc).
    Almost all known image file formats store images in top-to-bottom
    order.  As it is, OpenGL reads images from the frame buffer in
    bottom-to-top order.  Thus, images usually have to be inverted before
    writing them to a file with image I/O libraries.  This extension
    allows images to be read such that inverting isn't needed.
IP Status
    None
Issues
    1. Should we also define UNPACK_INVERT_MESA for glDrawPixels, etc?
    Resolved:  No, we're only concerned with pixel packing.  There are other
    solutions for inverting images when using glDrawPixels (negative Y pixel
    zoom) or glTexImage (invert the vertex T coordinates).  It would be easy
    enough to define a complementary extension for pixel packing in the
    future if needed.
New Procedures and Functions
    None
New Tokens
    Accepted by the <pname> parameter of PixelStorei and PixelStoref
    and the <pname> parameter of GetIntegerv, GetFloatv, GetDoublev
    and GetBooleanv:
        PACK_INVERT_MESA                   0x8758
Additions to Chapter 2 of the OpenGL 1.4 Specification (OpenGL Operation)
    None
Additions to Chapter 3 of the OpenGL 1.4 Specification (Rasterization)
    None
Additions to Chapter 4 of the OpenGL 1.4 Specification (Per-Fragment
Operations and the Frame Buffer)
    Add the following entry to table 4.4 (PixelStore parameters) on page 182:
    Parameter Name       Type    Initial Value    Valid Range
    ---------------------------------------------------------
    PACK_INVERT_MESA     boolean     FALSE        TRUE/FALSE
    In the section labeled "Placement in Client Memory" on page 184
    insert the following text into the paragraph before the sentence
    that starts with "If the format is RED, GREEN, BLUE...":
    "The parameter PACK_INVERT_MESA controls whether the image is packed
     in bottom-to-top order (the default) or top-to-bottom order.  Equation
     3.8 is modified as follows:
     ... the first element of the Nth row is indicated by
         p + Nk,                if PACK_INVERT_MESA is false
         p + k * (H - 1) - Nk,  if PACK_INVERT_MESA is true, where H is the
                                image height
    "
Additions to Chapter 5 of the OpenGL 1.4 Specification (Special Functions)
    None
Additions to Chapter 6 of the OpenGL 1.4 Specification (State and
State Requests)
    None
Additions to Appendix A of the OpenGL 1.4 Specification (Invariance)
    None
Additions to the AGL/GLX/WGL Specifications
    None
GLX Protocol
    None
Errors
    None
New State
    Add the following entry to table 6.20 (Pixels) on page 235:
    Get Value         Type     Get Cmd    Initial Value  Description                Sec    Attribute
    --------------------------------------------------------------------------------------------------
    PACK_INVERT_MESA  boolean  GetBoolean  FALSE         Value of PACK_INVERT_MESA  4.3.2  pixel-store
Revision History
    21 September 2002 - Initial draft
 |