Implementieren Sie eine nahezu Echtzeit-CPU-Fähigkeit wie GLALPHAFUNC (GL_GR_GREATER) mit RGB-Quelle und RGBA-Überlagerung

StackOverflow https://stackoverflow.com//questions/22018826

Frage

Latenz ist hier das größte Anliegen. Ich habe festgestellt, dass der Versuch, 3 1920x1080 Video-Feeds mit RGBA-Überlagerungen an einzelne Fenster über OpenGL zu rendern, hat Grenzen. Ich bin in der Lage, zwei Fenster mit Overlays oder 3 Windows ohne Overlays gut zu rendern, aber wenn das dritte Fenster eingeführt wird, sind Rendering-Stände offensichtlich. Ich glaube, dass das Problem auf der Überbeanspruchung von GLALPHAFUNCUNCE () an der Überlagerung und der RGBA-basierten Textur auf einer RGB-Video-Textur zurückzuführen ist. Um den Überaus zu reduzieren, ist mein Gedanke, einige der Überlagerungsfunktion in die CPU zu verschieben (wie ich viele CPU-Dual Hexcore Xeon habe). Der ideale Ort, um dies zu tun, wäre, wenn Sie das Quellrgb-Image kopieren, auf das zugeordnete PBO und das Ersetzen der RGB-Werte mit den von der RGBA-Überlagerung, wo A> 0.

Ich habe versucht, Intel IPP-Methoden zu verwenden, es gibt jedoch keine Methode, die keine mehrfachen Anrufe beinhaltet, und ergibt zu viel Latenzzeit. Ich habe gerade C-Code ausprobiert, aber dies dauert länger als die 33 ms, die ich erlaubt bin. Ich brauche Hilfe beim Erstellen einer optimierten Montage- oder SSE-basierten Routine, die eine minimale Latenzzeit bereitstellt.

Kompilieren Sie den folgenden Code mit> G ++ -FOPENMP -O2 -MTUNE= Native

Basic C-Funktion für Klarheit:

generasacodicetagpre.

War es hilfreich?

Lösung

Hier ist eine SSE4-Implementierung, die etwas mehr als 5-mal schneller ist als der Code, den Sie mit der Frage (ohne Parallelisierung der Schleife) veröffentlicht haben.Wie geschrieben ist, arbeitet es nur auf RGBA-Puffern, die 16-Byte in Multiples von 64 ausgerichtet und dimensioniert sind, und auf RGB-Puffern, die 16-Byte in Multiples von 48 ausgerichtet sind und Größe ausgerichtet sind. Die Größenanforderungen werden Anforderungen perfekt mit der Auflösung von 1920 x 1080Möglicherweise müssen Sie Code hinzufügen, um sicherzustellen, dass Ihre Puffer 16-Byte ausgerichtet sind.

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top