glPixelTransfer: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
 
K (Hinweise)
 
(17 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= glPixelTransfer =
 
= glPixelTransfer =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
'''glPixeltransferi''', '''glPixelTransferf''' - Bestimmt den Pixeltransfer-Modus
+
'''glPixelTransferi''', '''glPixelTransferf''' - Bestimmt den Pixeltransfer-Modus
 +
 
 +
 
 +
 
  
<br>
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
 
  procedure '''glPixelTransferi'''(''pname'' : GLenum; ''param'' : GLint)
 
  procedure '''glPixelTransferi'''(''pname'' : GLenum; ''param'' : GLint)
 +
procedure '''glPixelTransferf'''(''pname'' : GLenum; ''param'' : GLfloat)
 +
  
procedure '''glPixelTransferf'''(''pname'' : GLenum; ''param'' : GLfloat)
 
  
<br>
 
  
 
== Parameter ==
 
== Parameter ==
Zeile 18: Zeile 21:
 
! ''pname''  
 
! ''pname''  
 
| Gibt den symbolischen Namen des Pixeltransfer-Parameters an. Muss eine der folgenden Konstanten sein: <br>
 
| Gibt den symbolischen Namen des Pixeltransfer-Parameters an. Muss eine der folgenden Konstanten sein: <br>
'''GL_MAP_COLOR''', '''GL_MAP_STENCIL''', '''GL_INDEX_SHIFT''', '''GL_INDEX_OFFSET''', '''GL_RED_SCALE''', '''GL_RED_BIAS''', '''GL_GREEN_SCALE''', '''GL_GREEN_BIAS''', '''GL_BLUE_SCALE''', '''GL_BLUE_BIAS''', '''GL_ALPHA_SCALE''', '''GL_ALPHA_BIAS''', '''GL_DEPTH_SCALE''', oder '''GL_DEPTH_BIAS'''.
+
'''GL_MAP_COLOR''', '''GL_MAP_STENCIL''', '''GL_INDEX_SHIFT''', '''GL_INDEX_OFFSET''', '''GL_RED_SCALE''', '''GL_RED_BIAS''', '''GL_GREEN_SCALE''', '''GL_GREEN_BIAS''', '''GL_BLUE_SCALE''', '''GL_BLUE_BIAS''', '''GL_ALPHA_SCALE''', '''GL_ALPHA_BIAS''', '''GL_DEPTH_SCALE''' oder '''GL_DEPTH_BIAS'''.
 
|-
 
|-
 
! ''param''  
 
! ''param''  
Zeile 24: Zeile 27:
 
|}
 
|}
  
<br>
+
 
 +
 
  
 
== Beschreibung ==  
 
== Beschreibung ==  
'''glPixelTransfer''' setzt die Pixeltransfer-Modi, die die Ausführung der untergeordneten Funtkionen [[glCopyPixels]], [[glCopyTexImage1D]], [[glCopyTexImage2D]], [[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]], [[glDrawPixels]], [[glReadPixels]], [[glTexImage1D]], [[glTexImage2D]], [[glTexSubImage1D]] und [[glTexSubImage2D]] beeinflussen. Die Algorithmen, die durch die Pixeltransfer-Modi spezifizert werden, werden nach dem Lesen vom Framebuffer auf die Pixels angewendet (bei [[glCopyPixels]], [[glCopyTexImage1D]], [[glCopyTexImage2D]], [[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]] und [[glReadPixels]]) oder nach dem Entpacken aus dem Client-Speicher (bei [[glDrawPixels]], [[glTexImage1D]], [[glTexImage2D]], [[glTexSubImage1D]] und [[glTexSubImage2D]]. Pixeltransfer - Operationen werden in der selben Reihenfolge und Weise vorgenommen, unabhängig vom Ergebnis der Pixeloperation. Die Modi zur Pixel-Speicherung (siehe [[glPixelStore]] kontrollieren das Entpacken der Pixel, die aus dem Client-Speicher ausgelesen werden und das Packen der Pixel, die wieder in den Client-Speicher geschrieben werden.<br>
+
'''glPixelTransfer''' setzt die Pixeltransfer-Modi, die die Ausführung der untergeordneten Funtkionen  
<br>
+
*[[glCopyPixels]],  
 +
*[[glCopyTexImage1D]], [[glCopyTexImage2D]],  
 +
*[[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]],  
 +
*[[glDrawPixels]],  
 +
*[[glReadPixels]],  
 +
*[[glTexImage1D]], [[glTexImage2D]],  
 +
*[[glTexSubImage1D]] und [[glTexSubImage2D]]  
 +
beeinflussen. <br>
 +
Die Algorithmen, die durch die Pixeltransfer-Modi spezifizert werden, werden nach dem Lesen vom Framebuffer auf die Pixels angewendet (bei [[glCopyPixels]], [[glCopyTexImage1D]], [[glCopyTexImage2D]], [[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]] und [[glReadPixels]]) oder nach dem Entpacken aus dem Client-Speicher (bei [[glDrawPixels]], [[glTexImage1D]], [[glTexImage2D]], [[glTexSubImage1D]] und [[glTexSubImage2D]]. <br>
 +
Pixeltransfer-Operationen werden in der selben Reihenfolge und Weise vorgenommen, unabhängig vom Ergebnis der Pixeloperation. Die Modi zur Pixel-Speicherung (siehe [[glPixelStore]] kontrollieren das Entpacken der Pixel, die aus dem Client-Speicher ausgelesen werden und das Packen der Pixel, die wieder in den Client-Speicher geschrieben werden.
 +
 
 +
 
 
Pixeltransfer-Operationen behandeln vier grundlegende Pixeltypen: ''color'', ''color index'', ''depth'' und ''stencil''. <br>
 
Pixeltransfer-Operationen behandeln vier grundlegende Pixeltypen: ''color'', ''color index'', ''depth'' und ''stencil''. <br>
color-Pixel bestehen aus vier Fließkomma-Zahlen mit unbestimmter MANTISSA (???WAS ist das??? -> [http://http://mathworld.wolfram.com/Mantissa.html http://mathworld.wolfram.com/Mantissa.html]) und Exponenten, die die Größe angeben, so skaliert, dass 0 null und 1 voller Intensität entsprichen.<br>
+
color-Pixel bestehen aus vier Fließkomma-Zahlen mit unbestimmter [http://mathworld.wolfram.com/Mantissa.html Mantissa] und Exponenten, die die Größe angeben, so skaliert, dass 0 null und 1 voller Intensität entsprichen.<br>
 
color-Indices bestehen aus einer einzelnen Fließkomma-Zahl mit unbestimmter Präzision hinter dem Komma. <br>
 
color-Indices bestehen aus einer einzelnen Fließkomma-Zahl mit unbestimmter Präzision hinter dem Komma. <br>
 
depth-Pixel beinhalten eine einzelne Fließkomma-Zahl mit unbestimmter Mantissa und Exponenten, die die Größe angeben, so skaliert, dass 0.0 dem minimalen bzw 1.0 dem maximalen  Depth-Buffer-Wert entsprichen.<br>
 
depth-Pixel beinhalten eine einzelne Fließkomma-Zahl mit unbestimmter Mantissa und Exponenten, die die Größe angeben, so skaliert, dass 0.0 dem minimalen bzw 1.0 dem maximalen  Depth-Buffer-Wert entsprichen.<br>
stencil-Pixel bestehen aus einer einzelnen Fließkomma-Zahl, mit unbestimmter Präzision hinter dem Komma.
+
stencil-Pixel bestehen aus einer einzelnen Fließkomma-Zahl, mit unbestimmter Präzision hinter dem Komma.<br>
 +
<br>
  
'''
+
'''color:'''<br>
Werde das beizeiten übersetzten    --BodaWaschl
+
:Jede der vier Farbkomponenten wird mit einem Skalierungsfaktor multipliziert und dann zu einem bias-Faktor addiert. Die rote Farbkomponente wird mit '''GL_RED_SCALE''' multipliziert und dann zu '''GL_RED_BIAS''' addiert. Mit den grünen und blauen Farbkomponenten und mit dem Alphawert verhält es sich entsprechend. Die Ergebnisse dieser vier Operationen werden jeweils an den [0,1]-Bereich angepasst. Alle Farb-, Skalierungs- und Biaswerte werden mit '''glPixelTransfer''' angegeben.<br>
Color       Each of the four color components is multiplied
+
<br>
      by a scale factor, then added to a bias factor.
+
:Hat '''GL_MAP_COLOR''' den Wert ''true'', wird jede Farbkomponente mit der zugehörigen color-to-color-Map skaliert und dann durch den Inhalt dieser Map, angegeben durch die skalierte Komponente, ersetzt. So wird die rote Komponente durch '''GL_PIXEL_MAP_R_TO_R_SIZE''' skaliert und dann durch den Inhalt von GL_PIXEL_MAP_R_TO_R ersetzt. Mit den anderen drei Werten verhält es sich analog, die Konstanten heissen dann dementsprechend '''GL_PIXEL_MAP_G_TO_G_SIZE''' / '''GL_PIXEL_MAP_G_TO_G''', '''GL_PIXEL_MAP_B_TO_B_SIZE''' / '''GL_PIXEL_MAP_B_TO_B''' bzw. '''GL_PIXEL_MAP_A_TO_A_SIZE'''/ '''GL_PIXEL_MAP_A_TO_A'''. Alle Komponenten, die den Maps entnommen werden, werden anschließend an den [0,1]-Bereich angepasst. '''GL_MAP_COLOR''' wird durch '''glPixelTransfer''' festgelegt. Die Inhalte der verschiedenen Maps werden mit [[glPixelMap]] festgelegt.<br>
      That is, the red component is multiplied by
+
<br>
      GL_RED_SCALE, then added to GL_RED_BIAS; the
 
      green component is multiplied by GL_GREEN_SCALE,
 
      then added to GL_GREEN_BIAS; the blue component
 
      is multiplied by GL_BLUE_SCALE, then added to
 
      GL_BLUE_BIAS; and the alpha component is
 
      multiplied by GL_ALPHA_SCALE, then added to
 
      GL_ALPHA_BIAS. After all four color components
 
      are scaled and biased, each is clamped to the
 
      range [0,1]. All color, scale, and bias values
 
      are specified with glPixelTransfer.
 
  
      If GL_MAP_COLOR is true, each color component is
+
'''color index:'''<br>
      scaled by the size of the corresponding color-
+
:Jeder Farbindex wird um so viele Bits nach links verschoben, wie in '''GL_INDEX_SHIFT''' angegeben sind. Alle Bits, die sich zwischen dem ursprünglichen Wert und dem Punkt befinden, werden mit Nullen aufgefüllt. Ist '''GL_INDEX_SHIFT''' negativ, wird nach rechts verschoben und wieder mit Nullen aufgefüllt. Dann wird '''GL_INDEX_OFFSET''' zu dem Index-Wert hinzuaddiert. :'''GL_INDEX_SHIFT''' und '''GL_INDEX_OFFSET''' werden mit '''glPixelTransfer''' festgelegt.<br>
      to-color map, then replaced by the contents of
 
      that map indexed by the scaled component. That
 
      is, the red component is scaled by
 
      GL_PIXEL_MAP_R_TO_R_SIZE, then replaced by the
 
      contents of GL_PIXEL_MAP_R_TO_R indexed by
 
      itself. The green component is scaled by
 
      GL_PIXEL_MAP_G_TO_G_SIZE, then replaced by the
 
      contents of GL_PIXEL_MAP_G_TO_G indexed by
 
      itself. The blue component is scaled by
 
      GL_PIXEL_MAP_B_TO_B_SIZE, then replaced by the
 
      contents of GL_PIXEL_MAP_B_TO_B indexed by
 
      itself.  And the alpha component is scaled by
 
      GL_PIXEL_MAP_A_TO_A_SIZE, then replaced by the
 
      contents of GL_PIXEL_MAP_A_TO_A indexed by
 
      itself. All components taken from the maps are
 
      then clamped to the range [0,1]. GL_MAP_COLOR
 
      is specified with glPixelTransfer. The contents
 
      of the various maps are specified with
 
      glPixelMap.
 
  
  Color index Each color index is shifted left by
+
:In diesem Schritt hängt das weitere Verfahren vom verlangten Format der resultierenden Pixel ab.<br>
      GL_INDEX_SHIFT bits; any bits beyond the number
+
:Wenn die Pixel in einen color-index-Puffer geschrieben werden sollen oder wenn sie zurück in den client-Speicher gelesen werden sollen (im Format '''GL_COLOR_INDEX'''), werden die Pixel weiterhin als Indices behandelt. Hat '''GL_MAP_COLOR''' den Wert '''true''', wird aus jedem Index der Bereich 2n-1 (n hat den Wert von '''GL_PIXEL_MAP_I_TO_I_SIZE''') entnommen, und anschließend durch den Inhalt von '''GL_PIXEL_MAP_I_TO_I''' ersetzt. '''GL_MAP_COLOR''' widr durch '''glPixelTransfer''' festgelegt. Der Inhalt der Index-Map wird mit [[glPixelMap]] bestimmt.<br>
      of fraction bits carried by the fixed-point
 
      index are filled with zeros. If GL_INDEX_SHIFT
 
      is negative, the shift is to the right, again
 
      zero filled.  Then GL_INDEX_OFFSET is added to
 
      the index.  GL_INDEX_SHIFT and GL_INDEX_OFFSET
 
      are specified with
 
      glPixelTransfer.
 
      From this point, operation diverges depending on
 
      the required format of the resulting pixels.  If
 
      the resulting pixels are to be written to a
 
      color index buffer, or if they are being read
 
      back to client memory in GL_COLOR_INDEX format,
 
      the pixels continue to be treated as indices.
 
      If GL_MAP_COLOR is true, each index is masked by
 
      2n - 1, where n is GL_PIXEL_MAP_I_TO_I_SIZE,
 
      then replaced by the contents of
 
      GL_PIXEL_MAP_I_TO_I indexed by the masked value.
 
      GL_MAP_COLOR is specified with glPixelTransfer.
 
      The contents of the index map is specified with
 
      glPixelMap.
 
  
      If the resulting pixels are to be written to an
+
:Sollen die resultierenden Pixel in einen RGBA-Farb-Puffer geschrieben werden, oder wenn sie in den client-Speicher in einem anderen Format als dem in '''GL_COLOR_INDEX''' angegebenen zurückgelesen werden sollen, werden die Pixel von Indices zu Farben konvertiert, bei Beziehung auf die vier Maps '''GL_PIXEL_MAP_I_TO_R''', '''GL_PIXEL_MAP_I_TO_G''',   '''GL_PIXEL_MAP_I_TO_B''' und '''GL_PIXEL_MAP_I_TO_A'''. Der Index wird auf den Bereich  2n-1 eingeschränkt, wobei sich n für die rote Map auf '''GL_PIXEL_MAP_I_TO_R_SIZE''', für die grüne Map auf '''GL_PIXEL_MAP_I_TO_G_SIZE''', für die blaue Map auf '''GL_PIXEL_MAP_I_TO_B_SIZE''' und für die Alpha-Map auf '''GL_PIXEL_MAP_I_TO_A_SIZE''' bezieht. Alle Komponenten, die den Maps entnommen wurden, werden dann auf den [0,1]-Bereich angepasst. Die Inhalte der vier Maps werden mit [[glPixelMap]] festgelegt.
      RGBA color buffer, or if they are read back to
 
      client memory in a format other than
 
      GL_COLOR_INDEX, the pixels are converted from
 
      indices to colors by referencing the four maps
 
      GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G,
 
      GL_PIXEL_MAP_I_TO_B, and GL_PIXEL_MAP_I_TO_A.
 
      Before being dereferenced, the index is masked
 
      by 2n - 1, where n is GL_PIXEL_MAP_I_TO_R_SIZE
 
      for the red map, GL_PIXEL_MAP_I_TO_G_SIZE for
 
      the green map, GL_PIXEL_MAP_I_TO_B_SIZE for the
 
      blue map, and GL_PIXEL_MAP_I_TO_A_SIZE for the
 
      alpha map. All components taken from the maps
 
      are then clamped to the range [0,1]. The
 
      contents of the four maps is specified with
 
      glPixelMap.
 
  
  Depth       Each depth value is multiplied by
 
      GL_DEPTH_SCALE, added to GL_DEPTH_BIAS, then
 
      clamped to the range [0,1].
 
  
  Stencil    Each index is shifted GL_INDEX_SHIFT bits just
+
'''depth:'''
      as a color index is, then added to
+
: Jeder Tiefenwert wird mit '''GL_DEPTH_SCALE''' multipliziert und zu '''GL_DEPTH_BIAS''' addiert. Anschließend wird das Ergebnis auf das Interval [0,1] beschränkt.
      GL_INDEX_OFFSET. If GL_MAP_STENCIL is true,
 
      each index is masked by 2n - 1, where n is
 
      GL_PIXEL_MAP_S_TO_S_SIZE, then replaced by the
 
      contents of GL_PIXEL_MAP_S_TO_S indexed by the
 
      masked value.
 
  
  The following table gives the type, initial value, and range
 
  of valid values for each of the pixel transfer parameters
 
  that are set with glPixelTransfer.
 
  
 +
'''stencil:'''
 +
: Jeder Index wird, genau wie die Farbindizes, '''GL_INDEX_SHIFT''' Bits weit verschoben und dann auf '''GL_INDEX_OFFSET''' addiert.
 +
: Wenn '''GL_MAP_STENCIL''' true ist, wird jeder Index durch 2^n -1 maskiert, wobei n gleich '''GL_PIXEL_MAP_S_TO_S_SIZE''' ist, und dann durch den Inhalt von '''GL_PIXEL_MAP_S_TO_S''', indexiert durch den maskierten Wert, ersetzt.
  
  
 +
Die nachfolgende Tabelle zeigt den Typ, Standardwert, und Wertebereich für jeden Pixeltransferparameter der mit '''glPixelTransfer''' gesetzt werden kann.
  
 +
<div align="center">
 +
{|{{Prettytable_B1}}  
 +
!pname !! type !! initial value !!  valid range
 +
|-
 +
| GL_MAP_COLOR  || boolean ||      false    || true/false 
 +
|-
 +
|GL_MAP_STENCIL  || boolean ||     false    || true/false 
 +
|-
 +
|GL_INDEX_SHIFT  || integer ||       0       || (-oo,oo) 
 +
|-
 +
|GL_INDEX_OFFSET || integer ||       0       || (-oo,oo) 
 +
|-
 +
| GL_RED_SCALE  ||  float  ||       1       || (-oo,oo) 
 +
|-
 +
|GL_GREEN_SCALE  ||  float  ||       1       || (-oo,oo) 
 +
|-
 +
| GL_BLUE_SCALE  ||  float  ||       1       || (-oo,oo) 
 +
|-
 +
|GL_ALPHA_SCALE  ||  float  ||       1       || (-oo,oo) 
 +
|-
 +
|GL_DEPTH_SCALE  ||  float  ||       1       || (-oo,oo) 
 +
|-
 +
|  GL_RED_BIAS  ||  float  ||       0       || (-oo,oo) 
 +
|-
 +
| GL_GREEN_BIAS  ||  float  ||       0       || (-oo,oo) 
 +
|-
 +
| GL_BLUE_BIAS  ||  float  ||       0       || (-oo,oo) 
 +
|-
 +
| GL_ALPHA_BIAS  ||  float  ||       0       || (-oo,oo) 
 +
|-
 +
| GL_DEPTH_BIAS  ||  float  ||       0       || (-oo,oo) 
 +
|-
 +
|}
 +
</div>
  
 +
'''glPixelTransferf''' kann verwendet werden, um beliebige Pixeltransfer-Parameter zu übergeben. Ist der Parameter-Typ eine Bool`sche Variable, gilt 0 als false und alle anderen Werte als true. Ist ''pname'' eine Integer-Variable, wird ''param'' auf eine ganzen Zahl gerundet.<br>
 +
<br>
 +
Analog dazu wird auch '''glPixelTransferi''' dazu verwendet, beliebige Pixeltransfer-Parameter festzulegen. Bool`sche Parameter haben den Wert false wenn ''param'' 0 ist, andernfalls hat der Parameter den Wert true. ''param'' wird vor der Zuordnung zu einem Fließkommawert-Parameter in eine FLießkommazahl umgewandelt.
 +
<br>
  
  _________________________________________________________
 
  | pname     |  type  | initial value | valid range |
 
  |________________|_________|_______________|_____________|
 
  | GL_MAP_COLOR  | boolean |     false    | true/false  |
 
  |GL_MAP_STENCIL  | boolean |     false    | true/false  |
 
  |GL_INDEX_SHIFT  | integer |       0       | (-oo,oo)  |
 
  |GL_INDEX_OFFSET | integer |       0       | (-oo,oo)  |
 
  | GL_RED_SCALE  |  float  |       1       | (-oo,oo)  |
 
  |GL_GREEN_SCALE  |  float  |       1       | (-oo,oo)  |
 
  | GL_BLUE_SCALE  |  float  |       1       | (-oo,oo)  |
 
  |GL_ALPHA_SCALE  |  float  |       1       | (-oo,oo)  |
 
  |GL_DEPTH_SCALE  |  float  |       1       | (-oo,oo)  |
 
  |  GL_RED_BIAS  |  float  |       0       | (-oo,oo)  |
 
  | GL_GREEN_BIAS  |  float  |       0       | (-oo,oo)  |
 
  | GL_BLUE_BIAS  |  float  |       0       | (-oo,oo)  |
 
  | GL_ALPHA_BIAS  |  float  |       0       | (-oo,oo)  |
 
  | GL_DEPTH_BIAS  |  float  |       0       | (-oo,oo)  |
 
  |________________|_________|_______________|_____________|
 
 
  glPixelTransferf can be used to set any pixel transfer
 
  parameter.  If the parameter type is boolean, 0 implies
 
  false and any other value implies true.  If pname is an
 
  integer parameter, param is rounded to the nearest integer.
 
 
  Likewise, glPixelTransferi can be used to set any of the
 
  pixel transfer parameters.  Boolean parameters are set to
 
  false if param is 0 and to true otherwise.  param is
 
  converted to floating point before being assigned to real-
 
  valued parameters.
 
'''
 
<br>
 
 
== Hinweise ==
 
== Hinweise ==
Sollte [[glCopyPixels]], [[glCopyTexImage1D]], [[glCopyTexImage2D]], [[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]], [[glDrawPixels]], [[glReadPixels]], [[glTexImage1D]], [[glTexImage2D]], [[glTexSubImage1D]] oder [[glTexSubImage2D]] in einer Displayliste ausgeführt werden (siehe [[glNewList]] und [[glCallList]]), werden die Pixeltransfer-Modi, die beim Aufruf der Display-Liste galten, verwendet. Diese unterscheiden sich eventuell von den Einstellungen, die gemacht wurden, als das Kommando in die Displayliste kompiliert wurde.
+
Sollte [[glCopyPixels]], [[glCopyTexImage1D]], [[glCopyTexImage2D]], [[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]], [[glDrawPixels]], [[glReadPixels]], [[glTexImage1D]], [[glTexImage2D]], [[glTexSubImage1D]] oder [[glTexSubImage2D]] in einer [[Displayliste]] ausgeführt werden (siehe [[glNewList]] und [[glCallList]]), werden die Pixeltransfer-Modi, die beim Aufruf der Displayliste galten, verwendet. Diese unterscheiden sich eventuell von den Einstellungen, die gemacht wurden, als die jeweilige Funktion in die Displayliste kompiliert wurde.
 
<br>
 
<br>
 +
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
 
'''GL_INVALID_ENUM''' wird generiert, wenn ''pname'' keinen zulässigen Wert hat.<br>
 
'''GL_INVALID_ENUM''' wird generiert, wenn ''pname'' keinen zulässigen Wert hat.<br>
Zeile 174: Zeile 127:
  
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
[[glGet]] mit Token [[glGet#GL_MAP_COLOR|GL_MAP_COLOR]]
+
[[glGet]] mit Token [[glGet#GL_MAP_COLOR|GL_MAP_COLOR]]<br>
[[glGet]] mit Token [[glGet#GL_MAP_STENCIL|GL_MAP_STENCIL]]
+
[[glGet]] mit Token [[glGet#GL_MAP_STENCIL|GL_MAP_STENCIL]]<br>
[[glGet]] mit Token [[glGet#GL_INDEX_SHIFT|GL_INDEX_SHIFT]]
+
[[glGet]] mit Token [[glGet#GL_INDEX_SHIFT|GL_INDEX_SHIFT]]<br>
[[glGet]] mit Token [[glGet#GL_INDEX_OFFSET|GL_INDEX_OFFSET]]
+
[[glGet]] mit Token [[glGet#GL_INDEX_OFFSET|GL_INDEX_OFFSET]]<br>
[[glGet]] mit Token [[glGet#GL_RED_SCALE|GL_RED_SCALE]]
+
[[glGet]] mit Token [[glGet#GL_RED_SCALE|GL_RED_SCALE]]<br>
[[glGet]] mit Token [[glGet#GL_RED_BIAS|GL_RED_BIAS]]
+
[[glGet]] mit Token [[glGet#GL_RED_BIAS|GL_RED_BIAS]]<br>
[[glGet]] mit Token [[glGet#GL_GREEN_SCALE|GL_GREEN_SCALE]]
+
[[glGet]] mit Token [[glGet#GL_GREEN_SCALE|GL_GREEN_SCALE]]<br>
[[glGet]] mit Token [[glGet#GL_GREEN_BIAS|GL_GREEN_BIAS]]
+
[[glGet]] mit Token [[glGet#GL_GREEN_BIAS|GL_GREEN_BIAS]]<br>
[[glGet]] mit Token [[glGet#GL_BLUE_SCALE|GL_BLUE_SCALE]]
+
[[glGet]] mit Token [[glGet#GL_BLUE_SCALE|GL_BLUE_SCALE]]<br>
[[glGet]] mit Token [[glGet#GL_BLUE_BIAS|GL_BLUE_BIAS]]
+
[[glGet]] mit Token [[glGet#GL_BLUE_BIAS|GL_BLUE_BIAS]]<br>
[[glGet]] mit Token [[glGet#GL_ALPHA_SCALE|GL_ALPHA_SCALE]]
+
[[glGet]] mit Token [[glGet#GL_ALPHA_SCALE|GL_ALPHA_SCALE]]<br>
[[glGet]] mit Token [[glGet#GL_ALPHA_BIAS|GL_ALPHA_BIAS]]
+
[[glGet]] mit Token [[glGet#GL_ALPHA_BIAS|GL_ALPHA_BIAS]]<br>
[[glGet]] mit Token [[glGet#GL_DEPTH_SCALE|GL_DEPTH_SCALE]]
+
[[glGet]] mit Token [[glGet#GL_DEPTH_SCALE|GL_DEPTH_SCALE]]<br>
[[glGet]] mit Token [[glGet#GL_DEPTH_BIAS|GL_DEPTH_BIAS]]
+
[[glGet]] mit Token [[glGet#GL_DEPTH_BIAS|GL_DEPTH_BIAS]]<br>
 +
 
 +
 
  
<br>
 
  
 
== Siehe auch ==
 
== Siehe auch ==
 
[[glCallList]], [[glCopyPixels]], [[glCopyTexImage1D]], [[glCopyTexImage2D]], [[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]], [[glDrawPixels]], [[glNewList]], [[glPixelMap]], [[glPixelStore]], [[glPixelZoom]], [[glReadPixels]], [[glTexImage1D]], [[glTexImage2D]], [[glTexSubImage1D]], [[glTexSubImage2D]]
 
[[glCallList]], [[glCopyPixels]], [[glCopyTexImage1D]], [[glCopyTexImage2D]], [[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]], [[glDrawPixels]], [[glNewList]], [[glPixelMap]], [[glPixelStore]], [[glPixelZoom]], [[glReadPixels]], [[glTexImage1D]], [[glTexImage2D]], [[glTexSubImage1D]], [[glTexSubImage2D]]
  
<br>
+
 
 +
 
 
'''[[Kategorie:GL|PixelTransfer]]'''
 
'''[[Kategorie:GL|PixelTransfer]]'''
 
+
[[Kategorie:GL1.0]]
----
 
{{Unvollständig}}
 

Aktuelle Version vom 13. Mai 2008, 21:36 Uhr

glPixelTransfer

Name

glPixelTransferi, glPixelTransferf - Bestimmt den Pixeltransfer-Modus



Delphi-Spezifikation

procedure glPixelTransferi(pname : GLenum; param : GLint)
procedure glPixelTransferf(pname : GLenum; param : GLfloat)



Parameter

pname Gibt den symbolischen Namen des Pixeltransfer-Parameters an. Muss eine der folgenden Konstanten sein:

GL_MAP_COLOR, GL_MAP_STENCIL, GL_INDEX_SHIFT, GL_INDEX_OFFSET, GL_RED_SCALE, GL_RED_BIAS, GL_GREEN_SCALE, GL_GREEN_BIAS, GL_BLUE_SCALE, GL_BLUE_BIAS, GL_ALPHA_SCALE, GL_ALPHA_BIAS, GL_DEPTH_SCALE oder GL_DEPTH_BIAS.

param Gibt den Wert an, dem pname zugewiesen wird.



Beschreibung

glPixelTransfer setzt die Pixeltransfer-Modi, die die Ausführung der untergeordneten Funtkionen

beeinflussen.
Die Algorithmen, die durch die Pixeltransfer-Modi spezifizert werden, werden nach dem Lesen vom Framebuffer auf die Pixels angewendet (bei glCopyPixels, glCopyTexImage1D, glCopyTexImage2D, glCopyTexSubImage1D, glCopyTexSubImage2D und glReadPixels) oder nach dem Entpacken aus dem Client-Speicher (bei glDrawPixels, glTexImage1D, glTexImage2D, glTexSubImage1D und glTexSubImage2D.
Pixeltransfer-Operationen werden in der selben Reihenfolge und Weise vorgenommen, unabhängig vom Ergebnis der Pixeloperation. Die Modi zur Pixel-Speicherung (siehe glPixelStore kontrollieren das Entpacken der Pixel, die aus dem Client-Speicher ausgelesen werden und das Packen der Pixel, die wieder in den Client-Speicher geschrieben werden.


Pixeltransfer-Operationen behandeln vier grundlegende Pixeltypen: color, color index, depth und stencil.
color-Pixel bestehen aus vier Fließkomma-Zahlen mit unbestimmter Mantissa und Exponenten, die die Größe angeben, so skaliert, dass 0 null und 1 voller Intensität entsprichen.
color-Indices bestehen aus einer einzelnen Fließkomma-Zahl mit unbestimmter Präzision hinter dem Komma.
depth-Pixel beinhalten eine einzelne Fließkomma-Zahl mit unbestimmter Mantissa und Exponenten, die die Größe angeben, so skaliert, dass 0.0 dem minimalen bzw 1.0 dem maximalen Depth-Buffer-Wert entsprichen.
stencil-Pixel bestehen aus einer einzelnen Fließkomma-Zahl, mit unbestimmter Präzision hinter dem Komma.

color:

Jede der vier Farbkomponenten wird mit einem Skalierungsfaktor multipliziert und dann zu einem bias-Faktor addiert. Die rote Farbkomponente wird mit GL_RED_SCALE multipliziert und dann zu GL_RED_BIAS addiert. Mit den grünen und blauen Farbkomponenten und mit dem Alphawert verhält es sich entsprechend. Die Ergebnisse dieser vier Operationen werden jeweils an den [0,1]-Bereich angepasst. Alle Farb-, Skalierungs- und Biaswerte werden mit glPixelTransfer angegeben.


Hat GL_MAP_COLOR den Wert true, wird jede Farbkomponente mit der zugehörigen color-to-color-Map skaliert und dann durch den Inhalt dieser Map, angegeben durch die skalierte Komponente, ersetzt. So wird die rote Komponente durch GL_PIXEL_MAP_R_TO_R_SIZE skaliert und dann durch den Inhalt von GL_PIXEL_MAP_R_TO_R ersetzt. Mit den anderen drei Werten verhält es sich analog, die Konstanten heissen dann dementsprechend GL_PIXEL_MAP_G_TO_G_SIZE / GL_PIXEL_MAP_G_TO_G, GL_PIXEL_MAP_B_TO_B_SIZE / GL_PIXEL_MAP_B_TO_B bzw. GL_PIXEL_MAP_A_TO_A_SIZE/ GL_PIXEL_MAP_A_TO_A. Alle Komponenten, die den Maps entnommen werden, werden anschließend an den [0,1]-Bereich angepasst. GL_MAP_COLOR wird durch glPixelTransfer festgelegt. Die Inhalte der verschiedenen Maps werden mit glPixelMap festgelegt.


color index:

Jeder Farbindex wird um so viele Bits nach links verschoben, wie in GL_INDEX_SHIFT angegeben sind. Alle Bits, die sich zwischen dem ursprünglichen Wert und dem Punkt befinden, werden mit Nullen aufgefüllt. Ist GL_INDEX_SHIFT negativ, wird nach rechts verschoben und wieder mit Nullen aufgefüllt. Dann wird GL_INDEX_OFFSET zu dem Index-Wert hinzuaddiert. :GL_INDEX_SHIFT und GL_INDEX_OFFSET werden mit glPixelTransfer festgelegt.
In diesem Schritt hängt das weitere Verfahren vom verlangten Format der resultierenden Pixel ab.
Wenn die Pixel in einen color-index-Puffer geschrieben werden sollen oder wenn sie zurück in den client-Speicher gelesen werden sollen (im Format GL_COLOR_INDEX), werden die Pixel weiterhin als Indices behandelt. Hat GL_MAP_COLOR den Wert true, wird aus jedem Index der Bereich 2n-1 (n hat den Wert von GL_PIXEL_MAP_I_TO_I_SIZE) entnommen, und anschließend durch den Inhalt von GL_PIXEL_MAP_I_TO_I ersetzt. GL_MAP_COLOR widr durch glPixelTransfer festgelegt. Der Inhalt der Index-Map wird mit glPixelMap bestimmt.
Sollen die resultierenden Pixel in einen RGBA-Farb-Puffer geschrieben werden, oder wenn sie in den client-Speicher in einem anderen Format als dem in GL_COLOR_INDEX angegebenen zurückgelesen werden sollen, werden die Pixel von Indices zu Farben konvertiert, bei Beziehung auf die vier Maps GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B und GL_PIXEL_MAP_I_TO_A. Der Index wird auf den Bereich 2n-1 eingeschränkt, wobei sich n für die rote Map auf GL_PIXEL_MAP_I_TO_R_SIZE, für die grüne Map auf GL_PIXEL_MAP_I_TO_G_SIZE, für die blaue Map auf GL_PIXEL_MAP_I_TO_B_SIZE und für die Alpha-Map auf GL_PIXEL_MAP_I_TO_A_SIZE bezieht. Alle Komponenten, die den Maps entnommen wurden, werden dann auf den [0,1]-Bereich angepasst. Die Inhalte der vier Maps werden mit glPixelMap festgelegt.


depth:

Jeder Tiefenwert wird mit GL_DEPTH_SCALE multipliziert und zu GL_DEPTH_BIAS addiert. Anschließend wird das Ergebnis auf das Interval [0,1] beschränkt.


stencil:

Jeder Index wird, genau wie die Farbindizes, GL_INDEX_SHIFT Bits weit verschoben und dann auf GL_INDEX_OFFSET addiert.
Wenn GL_MAP_STENCIL true ist, wird jeder Index durch 2^n -1 maskiert, wobei n gleich GL_PIXEL_MAP_S_TO_S_SIZE ist, und dann durch den Inhalt von GL_PIXEL_MAP_S_TO_S, indexiert durch den maskierten Wert, ersetzt.


Die nachfolgende Tabelle zeigt den Typ, Standardwert, und Wertebereich für jeden Pixeltransferparameter der mit glPixelTransfer gesetzt werden kann.

pname type initial value valid range
GL_MAP_COLOR boolean false true/false
GL_MAP_STENCIL boolean false true/false
GL_INDEX_SHIFT integer 0 (-oo,oo)
GL_INDEX_OFFSET integer 0 (-oo,oo)
GL_RED_SCALE float 1 (-oo,oo)
GL_GREEN_SCALE float 1 (-oo,oo)
GL_BLUE_SCALE float 1 (-oo,oo)
GL_ALPHA_SCALE float 1 (-oo,oo)
GL_DEPTH_SCALE float 1 (-oo,oo)
GL_RED_BIAS float 0 (-oo,oo)
GL_GREEN_BIAS float 0 (-oo,oo)
GL_BLUE_BIAS float 0 (-oo,oo)
GL_ALPHA_BIAS float 0 (-oo,oo)
GL_DEPTH_BIAS float 0 (-oo,oo)

glPixelTransferf kann verwendet werden, um beliebige Pixeltransfer-Parameter zu übergeben. Ist der Parameter-Typ eine Bool`sche Variable, gilt 0 als false und alle anderen Werte als true. Ist pname eine Integer-Variable, wird param auf eine ganzen Zahl gerundet.

Analog dazu wird auch glPixelTransferi dazu verwendet, beliebige Pixeltransfer-Parameter festzulegen. Bool`sche Parameter haben den Wert false wenn param 0 ist, andernfalls hat der Parameter den Wert true. param wird vor der Zuordnung zu einem Fließkommawert-Parameter in eine FLießkommazahl umgewandelt.

Hinweise

Sollte glCopyPixels, glCopyTexImage1D, glCopyTexImage2D, glCopyTexSubImage1D, glCopyTexSubImage2D, glDrawPixels, glReadPixels, glTexImage1D, glTexImage2D, glTexSubImage1D oder glTexSubImage2D in einer Displayliste ausgeführt werden (siehe glNewList und glCallList), werden die Pixeltransfer-Modi, die beim Aufruf der Displayliste galten, verwendet. Diese unterscheiden sich eventuell von den Einstellungen, die gemacht wurden, als die jeweilige Funktion in die Displayliste kompiliert wurde.

Fehlermeldungen

GL_INVALID_ENUM wird generiert, wenn pname keinen zulässigen Wert hat.
GL_INVALID_OPERATION wird generiert, wenn glPixelTransfer innerhalb eines glBegin-glEnd Blocks aufgerufen wird.

Zugehörige Wertrückgaben

glGet mit Token GL_MAP_COLOR
glGet mit Token GL_MAP_STENCIL
glGet mit Token GL_INDEX_SHIFT
glGet mit Token GL_INDEX_OFFSET
glGet mit Token GL_RED_SCALE
glGet mit Token GL_RED_BIAS
glGet mit Token GL_GREEN_SCALE
glGet mit Token GL_GREEN_BIAS
glGet mit Token GL_BLUE_SCALE
glGet mit Token GL_BLUE_BIAS
glGet mit Token GL_ALPHA_SCALE
glGet mit Token GL_ALPHA_BIAS
glGet mit Token GL_DEPTH_SCALE
glGet mit Token GL_DEPTH_BIAS



Siehe auch

glCallList, glCopyPixels, glCopyTexImage1D, glCopyTexImage2D, glCopyTexSubImage1D, glCopyTexSubImage2D, glDrawPixels, glNewList, glPixelMap, glPixelStore, glPixelZoom, glReadPixels, glTexImage1D, glTexImage2D, glTexSubImage1D, glTexSubImage2D


'