[gimp] devel-docs: update XCF docs about 64-bit pointers for XCF 11 and over.



commit 5092a68b1cc6f48deebd6f39736e5f21c7c8057d
Author: Jehan <jehan girinstud io>
Date:   Fri May 18 18:37:32 2018 +0200

    devel-docs: update XCF docs about 64-bit pointers for XCF 11 and over.

 devel-docs/xcf.txt |  214 ++++++++++++++++++++++++++++-----------------------
 1 files changed, 117 insertions(+), 97 deletions(-)
---
diff --git a/devel-docs/xcf.txt b/devel-docs/xcf.txt
index 8889874..6138724 100644
--- a/devel-docs/xcf.txt
+++ b/devel-docs/xcf.txt
@@ -204,6 +204,8 @@ A STRING is stored as follows:
 Exception: the empty string is stored simply as an uint32 with the
 value 0.
 
+A POINTER is 32-bit for XCF up to 10, and 64-bit for XCF 11 and over
+(since GIMP 2.10.0), allowing higher than 4GB XCF files.
 
 Canvas
 ------
@@ -628,66 +630,69 @@ Header
 
 The image structure always starts at offset 0 in the XCF file.
 
-  byte[9] "gimp xcf " File type identification
-  byte[4] version     XCF version
-                         "file": version 0
-                         "v001": version 1
-                         "v002": version 2
-                         "v003": version 3
-  byte    0            Zero marks the end of the version tag.
-  uint32  width        Width of canvas
-  uint32  height       Height of canvas
-  uint32  base_type    Color mode of the image; one of
-                         0: RGB color
-                         1: Grayscale
-                         2: Indexed color
-                       (see enum GimpImageBaseType
-                       in libgimpbase/gimpbaseenums.h)
-  uint32  precision    Image precision; this field is only present for
-                       XCF 4 or over (since GIMP 2.10.0). Its value for
-                       XCF 7 or over is one of:
-                         100: 8-bit linear integer
-                         150: 8-bit gamma integer
-                         200: 16-bit linear integer
-                         250: 16-bit gamma integer
-                         300: 32-bit linear integer
-                         350: 32-bit gamma integer
-                         500: 16-bit linear floating point
-                         550: 16-bit gamma floating point
-                         600: 32-bit linear floating point
-                         650: 32-bit gamma floating point
-                         700: 64-bit linear floating point
-                         750: 64-bit gamma floating point
-                       For XCF 4 (which was a development version, hence
-                       this format should not be found often and may be
-                       ignored by readers), its value may be one of:
-                         0: 8-bit gamma integer
-                         1: 16-bit gamma integer
-                         2: 32-bit linear integer
-                         3: 16-bit linear floating point
-                         4: 32-bit linear floating point
-                       For XCF 5 or 6 (which were development versions,
-                       hence these formats may be ignored by readers),
-                       its value may be one of:
-                         100: 8-bit linear integer
-                         150: 8-bit gamma integer
-                         200: 16-bit linear integer
-                         250: 16-bit gamma integer
-                         300: 32-bit linear integer
-                         350: 32-bit gamma integer
-                         400: 16-bit linear floating point
-                         450: 16-bit gamma floating point
-                         500: 32-bit linear floating point
-                         550: 32-bit gamma floating point
-                       NOTE: XCF 3 or older's precision was always
-                       "8-bit gamma integer".
+  byte[9]     "gimp xcf " File type identification
+  byte[4]     version     XCF version
+                             "file": version 0
+                             "v001": version 1
+                             "v002": version 2
+                             "v003": version 3
+  byte        0            Zero marks the end of the version tag.
+  uint32      width        Width of canvas
+  uint32      height       Height of canvas
+  uint32      base_type    Color mode of the image; one of
+                             0: RGB color
+                             1: Grayscale
+                             2: Indexed color
+                           (see enum GimpImageBaseType
+                           in libgimpbase/gimpbaseenums.h)
+  uint32      precision    Image precision; this field is only present for
+                           XCF 4 or over (since GIMP 2.10.0). Its value for
+                           XCF 7 or over is one of:
+                             100: 8-bit linear integer
+                             150: 8-bit gamma integer
+                             200: 16-bit linear integer
+                             250: 16-bit gamma integer
+                             300: 32-bit linear integer
+                             350: 32-bit gamma integer
+                             500: 16-bit linear floating point
+                             550: 16-bit gamma floating point
+                             600: 32-bit linear floating point
+                             650: 32-bit gamma floating point
+                             700: 64-bit linear floating point
+                             750: 64-bit gamma floating point
+                           For XCF 4 (which was a development version, hence
+                           this format should not be found often and may be
+                           ignored by readers), its value may be one of:
+                             0: 8-bit gamma integer
+                             1: 16-bit gamma integer
+                             2: 32-bit linear integer
+                             3: 16-bit linear floating point
+                             4: 32-bit linear floating point
+                           For XCF 5 or 6 (which were development versions,
+                           hence these formats may be ignored by readers),
+                           its value may be one of:
+                             100: 8-bit linear integer
+                             150: 8-bit gamma integer
+                             200: 16-bit linear integer
+                             250: 16-bit gamma integer
+                             300: 32-bit linear integer
+                             350: 32-bit gamma integer
+                             400: 16-bit linear floating point
+                             450: 16-bit gamma floating point
+                             500: 32-bit linear floating point
+                             550: 32-bit gamma floating point
+                           NOTE: XCF 3 or older's precision was always
+                           "8-bit gamma integer".
   property-list        Image properties
   ,-----------------   Repeat once for each layer, topmost layer first:
-  | uint32 lptr        Pointer to the layer structure
+  | uint32/64 lptr     Pointer to the layer structure.
+  |                    The field will be 32-bit for XCF until version 10,
+  |                    and 64-bit for XCF 11 or over.
   `--
   uint32   0           Zero marks the end of the array of layer pointers.
   ,------------------  Repeat once for each channel, in no particular order:
-  | uint32 cptr        Pointer to the channel structure
+  | uint32/64 cptr     Pointer to the channel structure.
+  |                    Same remark as "lptr" about field length.
   `--
   uint32   0           Zero marks the end of the array of channel pointers.
 
@@ -952,11 +957,13 @@ Channel structures are pointed to from layer structures (in case of
 layer masks) or from the master image structure (for all other
 channels).
 
-  uint32  width  Width of the channel
-  uint32  height Height of the channel
-  string  name   Name of the channel
-  property-list  Channel properties
-  uint32  hptr   Pointer to the hierarchy structure with the pixels
+  uint32    width  Width of the channel
+  uint32    height Height of the channel
+  string    name   Name of the channel
+  property-list    Channel properties
+  uint32/64 hptr   Pointer to the hierarchy structure with the pixels.
+                   The field will be 32-bit for XCF until version 10,
+                   and 64-bit for XCF 11 or over.
 
 The width and height of the channel must be the same as those of its
 parent structure (the layer in the case of layer masks; the canvas for
@@ -1013,20 +1020,24 @@ PROP_SHOW_MASKED (editing state)
 Layer structures are pointed to from a list of layer pointers in the
 master image structure.
 
-  uint32  width  Width of the layer
-  uint32  height Height of the layer
-  uint32  type   Color mode of the layer: one of
-                   0: RGB color without alpha
-                   1: RGB color with alpha
-                   2: Grayscale without alpha
-                   3: Grayscale with alpha
-                   4: Indexed without alpha
-                   5: Indexed with alpha
-                 (see enum GimpImageType in libgimpbase/gimpbaseenums.h)
-  string  name   Name of the layer
-  property-list  Layer properties
-  uint32  hptr   Pointer to the hierarchy structure with the pixels
-  uint32  mptr   Pointer to the layer mask (a channel structure), or 0
+  uint32     width  Width of the layer
+  uint32     height Height of the layer
+  uint32     type   Color mode of the layer: one of
+                      0: RGB color without alpha
+                      1: RGB color with alpha
+                      2: Grayscale without alpha
+                      3: Grayscale with alpha
+                      4: Indexed without alpha
+                      5: Indexed with alpha
+                    (see enum GimpImageType in libgimpbase/gimpbaseenums.h)
+  string     name   Name of the layer
+  property-list     Layer properties
+  uint32/64  hptr   Pointer to the hierarchy structure with the pixels
+                    The field will be 32-bit for XCF until version 10,
+                    and 64-bit for XCF 11 or over.
+  uint32/64  mptr   Pointer to the layer mask (a channel structure), or 0
+                    The field will be 32-bit for XCF until version 10,
+                    and 64-bit for XCF 11 or over.
 
 The color mode of a layer must match that of the entire image.
 All layers except the bottommost one _must_ have an alpha channel. The bottom
@@ -1082,10 +1093,12 @@ PROP_EDIT_MASK (editing state)
   layer mask.
 
 PROP_FLOATING_SELECTION (essential)
-  uint32  5        Type identification
-  uint32  4        Four bytes of payload
-  uint32  ptr      Pointer to the layer or channel the floating selection is
-                   attached to
+  uint32    5      Type identification
+  uint32    4      Four bytes of payload
+  uint32/64 ptr    Pointer to the layer or channel the floating selection is
+                   attached to.
+                   The field will be 32-bit for XCF until version 10,
+                   and 64-bit for XCF 11 or over.
 
   PROP_FLOATING_SELECTION indicates that the layer is the floating selection
   and specifies the pointer to the layer, channel and layer mask it is attached
@@ -1267,21 +1280,25 @@ PROP_TEXT_LAYER_FLAGS
 A hierarchy contains data for a rectangular array of pixels.
 It appears in a context: each layer and channel has a pointer to its hierarchy.
 
-  uint32   width   Width of the pixel array
-  uint32   height  Height of the pixel array
-  uint32   bpp     Number of bytes per pixel given
-                     3: RGB color without alpha
-                     4: RGB color with alpha
-                     1: Grayscale without alpha
-                     2: Grayscale with alpha
-                     1: Indexed without alpha
-                     2: Indexed with alpha
-
-  uint32   lptr    Pointer to the "level" structure
-  ,--------------- Repeat zero or more times
-  | uint32 dlevel  Pointer to an unused level structure (dummy level)
+  uint32      width   Width of the pixel array
+  uint32      height  Height of the pixel array
+  uint32      bpp     Number of bytes per pixel given
+                        3: RGB color without alpha
+                        4: RGB color with alpha
+                        1: Grayscale without alpha
+                        2: Grayscale with alpha
+                        1: Indexed without alpha
+                        2: Indexed with alpha
+
+  uint32/64   lptr    Pointer to the "level" structure
+                      The field will be 32-bit for XCF until version 10,
+                      and 64-bit for XCF 11 or over.
+  ,--------   ------  Repeat zero or more times
+  | uint32/64 dlevel  Pointer to an unused level structure (dummy level)
+  |                   Same remark as "lptr" for field length.
   `--
-  uint32   0       Zero marks the end of the list of level pointers.
+  uint32/64   0       Zero marks the end of the list of level pointers.
+                      Same remark as "lptr" for field length.
 
 The width, height and bpp values are for consistency checking; their
 correct values can always be inferred from the context, and are
@@ -1293,12 +1310,15 @@ Levels
 
 The level structure is laid out as follows:
 
-  uint32   width  Width of the pixel array
-  uint32   height Height of the pixel array
-  ,-------------- Repeat for each of the ceil(width/64)*ceil(height/64) tiles
-  | uint32 tptr   Pointer to tile data
+  uint32      width  Width of the pixel array
+  uint32      height Height of the pixel array
+  ,----------------- Repeat for each of the ceil(width/64)*ceil(height/64) tiles
+  | uint32/64 tptr   Pointer to tile data
+  |                  The field will be 32-bit for XCF until version 10,
+  |                  and 64-bit for XCF 11 or over.
   `--
-  uint32   0      Zero marks the end of the array of tile pointers.
+  uint32/64   0      Zero marks the end of the array of tile pointers.
+                     Same remark as "tptr" for field length.
 
 The width and height must be the same as the ones recorded in the
 hierarchy structure (except for the aforementioned dummy levels).


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]