Ich weiß nicht, wie das Projekt zu starten, dies umzusetzen:Bildberechnungs OpenCL und dann Bildschirm Rendering
- Eine Matrix von 16-Bit-Integer in GPU-Speicher geladen (Dies ist ein Graustufenbild Radiologie) (Kontraststeigerungs Algorithmus zum Beispiel)
- ein Bereich von Interesse der zweiten Matrix umgewandelt wird in ein RGB-Bild für die Bildschirmanzeige
- eine zweite Matrix aus 16 Bits der ganzen Zahlen wird von dem ersten Array, berechnet durch eine Funktion der Anwendung .
Ich kann Schritt eins und zwei tun, und ich bin auf Schritt 3 fest! Ich habe das alles in der CPU implementiert, also geht es hier nicht darum, Graustufen- oder RGB-Bilder zu bearbeiten oder Bitmaps für die Anzeige zu erstellen. Ich habe auch die ersten beiden Schritte in OpenCL implementiert und dann die resultierende Matrix im CPU-Speicher für RGB-Bitmap-Konvertierung gelesen und dann angezeigt. Aber das ist natürlich langsam, weil Daten zwischen CPU- und GPU-Speicher hin und her bewegt werden (Bilder sind wirklich groß: mehr als 100 Megapixel).
Jede Hilfe wird geschätzt. Ich programmiere mit Delphi 10, aber Beispielcode in C/C++ ist in Ordnung. Ich habe VC2010 und erfolgreich NVidia OpenCL oclNbody Beispielanwendung neu erstellen.
Was hast du schon versucht, hat nicht funktioniert? Sie können OpenCL-Bilder für die Graustufenquelle und das RGB- oder RGBA-Ergebnis erstellen und an die Rechenkerne übergeben. – Dithermaster
Für Schritt 3 habe ich nichts erstellt, da ich keine Ahnung habe, wie es geht. Genau darum bitte ich. Ich weiß nicht, wie man ein Bild in OpenCL (clCreateImage) auf dem Bildschirm in einem Fenster anzeigt, das von Windows API CreateWindow erstellt wurde. – fpiette
Ich habe etwas Quellcode gefunden, der ziemlich nah an dem ist, was ich brauche (http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2013/12/AMD_OpenCL_Programming_User_Guide2.pdf Kapitel E.1.1 Erstellen eines CL-Kontextes von einem GL Kontext, mit Win32 API). Unglücklicherweise erzeugt der Aufruf von clGetGLContextInfoKHR eine Zugriffsverletzung, die durch eine Plattformvariable verursacht wird, die an das Funktion-durch-Eigenschaft-Argument übergeben wird. Ich habe diesen Quellcode nach Delphi portiert und dies könnte der Schuldige sein. Wenn ich das vollständige Beispielprogramm in C hätte, könnte ich diese C-Version zur Laufzeit mit meiner Delphi-Version vergleichen und verstehen, was falsch ist. – fpiette