2017-03-05 2 views
-1

Ich versuche, zu einem DIB-Abschnitt mit Mischen mit OpenGL unter XP zu rendern. Ich versuche, die Quell- und Ziel-Farbkomponenten zusammen, wie es in sich zu vermehren:OpenGL Blending funktioniert nicht mit DIB Abschnitt

glEnable(GL_BLEND); 
glBlendFunc(GL_DST_COLOR, GL_ZERO); 

es jedoch nicht um ein gemischtes Bild zu zeichnen. Indem ich die Art der Mischung ändere, nach der ich frage, kann ich sie so zeichnen, als ob sie ohne Mischen wäre oder gar nicht. Aber es weigert sich zu mischen.

Hier sind Details über die OpenGL-Version Ich verwende:

Vendor: Microsoft Corporation 
Renderer: GDI Generic 
Version: 1.1.0 
Extensions: GL_WIN_swap_hint GL_EXT_bgra GL_EXT_paletted_texture 

Ich war mir bewusst, dass ich begrenzt auf „generische“ (Software) Rendering mit DIB Abschnitten, aber ich habe nicht erwartet, Blending Scheitern. Ich habe nach einer Bestätigung gesucht, ob die Mischung in solchen Fällen unterstützt wird oder nicht, aber ohne Erfolg.

Jede Hilfe würde sehr geschätzt werden.

Antwort

1
glBlendFunc(GL_DST_COLOR, GL_ZERO); 
       ^^^ oh? 

Transparency, Translucency, and Blending:

15,060 Ich möchte Mischen verwenden, kann aber nicht Ziel alpha an die Arbeit. Kann ich einen Transparenzeffekt ohne Ziel-Alpha mischen oder erstellen?

Viele OpenGL-Geräte unterstützen kein Ziel-Alpha. Insbesondere die OpenGL 1.1 Software-Rendering-Bibliotheken von Microsoft unterstützen dies nicht. Die OpenGL-Spezifikation erfordert es nicht.

auch:

No Alpha in the Framebuffer:

Wenn Sie Blending tun und brauchen ein Ziel alpha, müssen Sie sicherstellen, dass Ihr Ziel muss man machen. Dies ist beim Rendern in ein Framebuffer-Objekt einfach sicherzustellen. Bei einem Standard-Framebuffer hängt es jedoch davon ab, wie Sie Ihren OpenGL-Kontext erstellt haben. Wenn Sie beispielsweise GLUT verwenden, müssen Sie sicherstellen, dass Sie GLUT_ALPHA an die glutInitDisplayMode-Funktion übergeben.

+0

Ja, danke, ich bin mir bewusst, dass Ziel Alpha nicht verfügbar ist, ist dieser Fall. Wie ich jedoch in meiner Frage klargestellt hatte, frage ich OpenGL nicht nach Ziel-Alpha oder überhaupt nach Alpha-Blending. Ich versuche, die Quell- und Ziel-RGB-Werte mithilfe der Überblendung zu modulieren. Was ich gerne wissen würde, ist, ob es einen Trick gibt, um das zu machen, oder es ist einfach nicht möglich mit dieser Version von OpenGL. Wenn Sie denken, dass mein Code falsch ist, erklären Sie dies bitte. – Entropy

0

Ok Ich habe einen dummen Fehler gemacht: Ich habe meinen eigenen Skriptcode falsch gelesen und die Textur im falschen Rendering-Durchlauf angewendet. OpenGL war nicht schuld, und das Mischen funktioniert.