glCopyConvolutionFilter

Aus DGL Wiki
Wechseln zu: Navigation, Suche

glCopyConvolutionFilter

Name

glCopyConvolutionFilter - Kopiert Pixel in einen ein- oder zweidimensionalen Convolution-Filter.


Delphi-Spezifikation

procedure glConvolutionFilter1D(target : TGLenum; internalformat : TGLenum;
                                x : TGLint; y : TGLint; width : TGLsizei)

procedure glConvolutionFilter2D(target : TGLenum; internalformat : TGLenum;
                                x : TGLint; y : TGLint;
                                width : TGLsizei, height : TGLsizei)


Parameter

target Gibt den Zielfilter an. Muss für glCopyConvolutionFilter1D als GL_CONVOLUTION_1D und für glCopyConvolutionFilter2D als GL_CONVOLUTION_2D gesetzt sein.
internalformat Format, in das die Daten aus dem Framebuffer konvertiert werden sollen. Möglich Werte sind : GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, GL_ALPHA16, GL_LUMINANCE, GL_LUMINANCE4, GL_LUMINANCE8, GL_LUMINANCE12, GL_LUMINANCE16, GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12, GL_LUMINANCE16_ALPHA16, GL_INTENSITY, GL_INTENSITY4, GL_INTENSITY8, GL_INTENSITY12, GL_INTENSITY16, GL_RGB, GL_R3_G3_B2, GL_RGB4, GL_RGB5, GL_RGB8, GL_RGB10, GL_RGB12, GL_RGB16, GL_RGBA, GL_RGBA2, GL_RGBA4, GL_RGB5_A1, GL_RGBA8, GL_RGB10_A2, GL_RGBA12 und GL_RGBA16.
x, y Gibt die Fenster-Koordinaten der linken, unteren Ecke des zu kopierenden Pixel-Rechtecks an.
width Gibt die Breite des zu kopierenden Pixel-Rechtecks an.
height Gibt bei glCopyConvolutionFilter2D die Höhe des zu kopierenden Pixel-Rechtecks an.



Beschreibung

glCopyConvolutionFilter2D (glCopyConvolutionFilter1D) definiert einen zweidimensionalen (eindimensionalen) Convolution-Faltungskern mit Pixel aus dem aktuellen GL_READ_BUFFER (nicht aus dem Hauptspeicher, so wie es bei glConvolutionFilter2D der Fall ist).

Das am Bildschirm ausgerichtete Pixel-Rechteck mit der unteren, linken Ecke bei (x, y), der Breite width und der Höhe height (bei glCopyConvolutionFilter1D ist die Höhe 1) wird benutzt, um einen Convolution-Filter zu definieren. Falls irgendeiner der Pixel in diesem Bereich ausserhalb des Fensters ist, welches mit dem Renderkontext assoziert wird, sind die Werte geltend für diese Pixel undefiniert.

Die Pixel in dem Rechteck werden genauso verarbeitet, als wenn glReadPixels mit dem gesetzten Format RGBA aufgerufen wäre, nur dass der Prozess vor der letzten Konvertierung gestoppt wird. Danach werden die R, G, B, und A-Komponenten aller Pixel in beiden Arrays durch die vier 2D- bzw. 1D-GL_CONVOLUTION_FILTER_SCALE-Parameterwerte skaliert und durch die vier 2D- bzw. 1D-GL_CONVOLUTION_FILTER_BIAS-Parameterwerte verschoben. (Die Skalierungs- und Biasparameter werden mit der Funktion glConvolutionParameter, dem Ziel GL_CONVOLUTION_2D(GL_CONVOLUTION_1D) und den Parametern GL_CONVOLUTION_FILTER_SCALE und GL_CONVOLUTION_FILTER_BIAS gesetzt. Die Parameter selbst sind vierwertige Vektoren, welche auf die Rot-, Grün-, Blau- und Alphakomponenten angewendet werden.) Die R, G, B, und A-Werte werden während des ganzen Prozesses nicht auf den Bereich [0,1] gemappt.

Jeder Pixel wird dann intern in das mit internalformat angegebene Format konvertiert. Diese Konvertierung mappt die Komponentenwerte der Pixel (R, G, B, and A) einfach auf die Werte, welche zum internen Format gehören (Rot, Grün, Blau, Alpha, Helligkeit und Intensität). Das Mapping geschieht folgendermassen:

Internes Format Rot Grün Blau Alpha Helligkeit Intensität
GL_LUMINANCE R
GL_LUMINANCE_ALPHA A R
GL_INTENSITY R
GL_RGB R G B
GL_RGBA R G B A

Die Rot-, Grün-, Blau-, Alpha-, Helligkeits-, und/oder Intensitäts-Komponenten der resultierenden Pixel werden im Fließkomma-Format gespeichert.

Die Pixelreihenfolge ist so, dass die tiefen x-Bildschirmkoordinaten den tiefen i Filterbild-Koordinaten entsprechen, und die tiefen y-Bildschirmkoordinaten den tiefen j Filterbild-Koordinaten entsprechen.

Beachte, dass, nachdem eine Convolution-Operation ausgeführt wird, die resultierenden Farbkomponenten auch durch ihre entsprechenden GL_POST_CONVOLUTION_c_SCALE-Parameter skaliert und ihre GL_POST_CONVOLUTION_c_BIAS-Parameter verschoben werden (wobei c die Werte RED, GREEN, BLUE und ALPHA annimmt). Diese Parameter werden durch die Funktion glPixelTransfer gesetzt.


Hinweise

glCopyConvolutionFilter1D und glCopyConvolutionFilter2D sind ab OpenGL Version 1.2 verfügbar.

glCopyConvolutionFilter1D und glCopyConvolutionFilter2D sind nur verfügbar, falls GL_ARB_imaging beim Aufruf der Funktion glGetString mit dem Argument GL_EXTENSIONS zurückgegeben wird.

Fehlermeldungen

GL_INVALID_ENUM wird generiert, wenn target nicht GL_CONVOLUTION_1D oder GL_CONVOLUTION_2D ist. (entsprechend der benutzten Funktion)

GL_INVALID_ENUM wird generiert, wenn internalformat ungültige Werte übergeben wurden.

GL_INVALID_VALUE wird generiert, wenn die Parameter width und height kleiner als 0 oder größer als die jeweilig maximal zulässigen Werte sind. Mittels glGetConvolutionParameter (mit target GL_CONVOLUTION_1D und Parameter GL_MAX_CONVOLUTION_WIDTH oder GL_CONVOLUTION_2D und Parameter GL_MAX_CONVOLUTION_WIDTH oder GL_MAX_CONVOLUTION_HEIGHT) können diese Werte abgefragt werden.

GL_INVALID_OPERATION wird generiert, wenn glCopyConvolutionFilter1D oder glCopyConvolutionFilter2D innerhalb eines glBegin-glEnd Blocks aufgerufen wird.



Zugehörige Wertrückgaben

glGetConvolutionFilter
glGetConvolutionParameter



Siehe auch

glConvolutionFilter1D, glConvolutionFilter2D, glConvolutionParameter, glGetConvolutionFilter, glGetConvolutionParameter, glPixelTransfer, glSeparableFilter2D