glConvolutionFilter

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

Ava

Gast

Betreff: glConvolutionFilter

BeitragFr, Jul 04, 2008 14:37
Antworten mit Zitat
So, ich habe nochmal ein Frage an die openGL-Experten hier im Forum. Rolling Eyes

Und zwar bekomme ich den ConvolutionFilter nicht zum Laufen. Was ich auch probiere, er spuckt mir ständig nur einen unhandled memory exception error aus. Confused Es liegt wohl an der Übergabe des image Parameters, doch wie übergebe ich diesen korrekt?

Code: [AUSKLAPPEN]
filter:Float[] = [0.00000067, 0.00002292, 0.00019117, 0.00038771, 0.00019117, 0.00002292, 0.00000067,  0.00002292, 0.00078633, 0.00655965, 0.01330373, 0.00655965, 0.00078633, 0.00002292, 0.00019117, 0.00655965, 0.05472157, 0.11098164, 0.05472157, 0.00655965, 0.00019117, 0.00038771, 0.01330373, 0.11098164, 0.22508352, 0.11098164, 0.01330373, 0.00038771, 0.00019117, 0.00655965, 0.05472157, 0.11098164, 0.05472157, 0.00655965, 0.00019117, 0.00002292, 0.00078633, 0.00655965, 0.01330373, 0.00655965, 0.00078633, 0.00002292, 0.00000067, 0.00002292, 0.00019117, 0.00038771, 0.00019117, 0.00002292, 0.00000067]

size:int = int(sqr(filter.length))

glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_LUMINANCE4, size, size, GL_LUMINANCE, GL_FLOAT, filter)


Ich habs bereits mit einem Pointer auf filter ausprobiert und auch mit einem 2D-Array ... und was weis ich nicht alles noch. Ich komme nicht weiter. Sad

HILFE!! Crying or Very sad

Vertex

BeitragMo, Jul 07, 2008 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

läuft hier ohne Probleme. Habe das mit einem kleinen Faltungskern zur Kantendetektion (3x3 Matrix) ausprobiert und es ging. Bei deinem Faltungskern konnte ich keinen Unterschied sehen (wird wohl ein Blur-Filter sein, der bei meiner Textur nicht gut sichtbar ist).

Der Fehler liegt also sicher wo anders. Bzw. wann kommt Memory Acccess Violation? Doch nicht beim Aufruf von glConvolutionFilter2D sondern eher bei glCopyTexImage2D o.ä. wenn er auf data zugreifen will.

mfg olli
vertex.dreamfall.at | GitHub
 

Ava

Gast

BeitragMo, Jul 07, 2008 16:13
Antworten mit Zitat
Hi Vertex,

doch doch, der Debugger zeigt mir die Memory Access Violation direkt auf die Zeile glConvolutionFilter2D. Confused Könntest Du mir einen kleinen Code-Schnippsel kopieren, der bei Dir funktioniert? Nur damit ich es mal vergleichen kann. Smile

Lieben Gruss, Ava

Vertex

BeitragMo, Jul 07, 2008 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier die texture.png
user posted image

Mein Faltungskern ist der Laplace-Operator zur Kantenerkennung:
Code: [AUSKLAPPEN]
    | 0 -1  0|
g = |-1  4 -1|
    | 0 -1  0|


Angewandt aufs Bild kommt das dabei heraus:
user posted image

Code: [AUSKLAPPEN]
SuperStrict

Framework BRL.Blitz
Import BRL.GLGraphics
Import Pub.Glew
Import BRL.PNGLoader

Local pixmap  : TPixmap, ..
      texture : Int, ..
      kernel  : Float[]

GLGraphics(640, 480)
glewInit()

pixmap = ConvertPixmap(LoadPixmap("texture.png"), PF_RGBA8888)

glEnable(GL_TEXTURE_2D)
glGenTextures(1, Int Ptr(texture))
glBindTexture(GL_TEXTURE_2D, texture)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)

kernel = [ 0.0, -1.0,  0.0, ..
          -1.0,  4.0, -1.0, ..
           0.0, -1.0,  0.0]
glEnable(GL_CONVOLUTION_2D)
glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_LUMINANCE4, 3, 3, GL_LUMINANCE, GL_FLOAT, kernel)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixmap.pixels)
glDisable(GL_CONVOLUTION_2D)

glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, 640.0, 480.0, 0.0, -1.0, 1.0)
glClearColor(1.0, 1.0, 1.0, 0.0)

While Not KeyDown(KEY_ESCAPE)
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
   
   glMatrixMode(GL_MODELVIEW)
   glLoadIdentity()
   
   glBindTexture(GL_TEXTURE_2D, texture)
   glBegin(GL_QUADS)
   glTexCoord2f(0.0, 0.0) ; glVertex2f(192.0, 112.0)
   glTexCoord2f(1.0, 0.0) ; glVertex2f(448.0, 112.0)
   glTexCoord2f(1.0, 1.0) ; glVertex2f(448.0, 368.0)
   glTexCoord2f(0.0, 1.0) ; glVertex2f(192.0, 368.0)
   glEnd()
   
   Flip()
Wend

End


Der Faltungskern wird beim Aufruf von glTexImage2D auf die Textur angewandt.

mfg olli
vertex.dreamfall.at | GitHub
  • Zuletzt bearbeitet von Vertex am Mo, Jul 07, 2008 17:19, insgesamt 2-mal bearbeitet

maximilian

BeitragMo, Jul 07, 2008 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Blitz-Arrays sind anders als C-Arrays. Dementsprechend ist die Übergabe eines Float-Arrays höchst kritisch, und vllt. sollte man da besser einen Pointer nehmen.

edit: aber komisch das es bei Vertex funktioniert o_O das wirds wohl doch nicht sein

edit2: vertex' sample geht bei mir auch nicht, ich probier mal ne Version mit Pointer

edit3: *hust* keine chance, stürzt andauernd ab Sad
Variety is the spice of life. One day ignore people, next day annoy them.

kog

BeitragMo, Jul 07, 2008 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiss zwar keine Lösung, aber ich will Anmerken das das Beispiel von Vertex bei mir Funktioniert:
Code: [AUSKLAPPEN]
NVIDIA Systeminformationen-Bericht erstellt am: 07/07/2008 21:40:00
Name des Systems: KOG-PC

[Anzeige]
Prozessor:      Intel(R) Pentium(R) Dual  CPU  E2160  @ 1.80GHz (1800 MHz)
Betriebssystem:   Microsoft Windows XP (Service Pack 3)
DirectX-Version:   9.0c
&GPU-Prozessor:      GeForce 8600 GTS
ForceWare-Version:   163.71
Speicher:      512 MB
Video-BIOS-Version:   60.84.32.00.00
IRQ:         16
Bus:         PCI Express x16

[Komponenten]

nvCplUIR.dll      1.4.900.10      NVIDIA Control Panel
nvCpl.cpl      1.4.900.10      NVIDIA Control Panel Applet
nvExpBar.dll      1.4.900.10      NVIDIA Control Panel
nvCplUI.exe      1.4.900.10      NVIDIA Control Panel
nvViTvSR.dll      6.14.11.6371      NVIDIA Video and TV Server
nvViTvS.dll      6.14.11.6371      NVIDIA Video and TV Server
nvDispSR.dll      6.14.11.6371      NVIDIA Display Server
NVMCTRAY.DLL      6.14.11.6371      NVIDIA Media Center Library
NVOGLNT.DLL      6.14.11.6371      NVIDIA Compatible OpenGL ICD
nvDispS.dll      6.14.11.6371      NVIDIA Display Server
NVCPL.DLL      6.14.11.6371      NVIDIA Compatible Windows 2000 Display driver, Version 163.71
NV4_MINI.SYS      6.14.11.6371      NVIDIA Compatible Windows 2000 Miniport Driver, Version 163.71
NV4_DISP.DLL      6.14.11.6371      NVIDIA Compatible Windows 2000 Display driver, Version 163.71
nvGameSR.dll      6.14.11.6371      NVIDIA 3D Settings Server
nvGameS.dll      6.14.11.6371      NVIDIA 3D Settings Server

Vertex

BeitragDi, Jul 08, 2008 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie im engl. Forum schon steht, prüft einfach mal, ob glConvolutionFilter2D überhaupt vom Treiber unterstützt wird. Unhadeled Memory Exception kann in dem Zusammenhang geworfen werden, wenn der Funktionspointer = NULL ist.
Zitat:
glConvolutionFilter2D is present only if ARB_imaging is returned when glGetString
is called with an argument of GL_EXTENSIONS.
vertex.dreamfall.at | GitHub

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group