2017-03-05 6 views
-1

XP上でOpenGLを使用してブレンドしてDIBセクションにレンダリングしようとしています。しかし、それがブレンドされた画像を描画するのに失敗したOpenGLブレンドがDIBセクションで動作しない

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

:私はのように、送信元と送信先の色成分を一緒に乗算しようとしています。私が求めているブレンドのタイプを変更することで、ブレンドしないかのように描画したり、まったく描画したりすることはできません。しかし、それは混ざり合いません。

はここで私が使用しているOpenGLのバージョンについての詳細は、次のとおりです。

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

私は、「ジェネリック」(ソフトウェア)DIBセクションでのレンダリングに制限さだと知っていたが、私はにブレンド期待していませんでした失敗します。私はブレンディングがこのような場合にサポートされているかどうかについての確認を探しましたが、役に立たなかった。

ご協力いただければ幸いです。

答えて

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

Transparency, Translucency, and Blending

15.060 私はブレンドを使用したいが、仕事に先のアルファを取得することはできません。宛先アルファなしで透明効果をブレンドまたは作成できますか?

多くのOpenGLデバイスは、宛先アルファをサポートしていません。 特に、MicrosoftのOpenGL 1.1ソフトウェアレンダリングライブラリは、それをサポートしていません。 OpenGL仕様では、この仕様は必要ありません。

また

No Alpha in the Framebuffer:あなたはブレンドを行っている、あなたは先のアルファが必要な場合は

、あなたのレンダーターゲットが1つを持っていることを確認する必要があります。これは、Framebufferオブジェクトにレンダリングするときに確実にするのが容易です。しかし、デフォルトフレームバッファでは、OpenGLコンテキストの作成方法によって異なります。

たとえば、GLUTを使用している場合は、GLUT_ALPHAglutInitDisplayMode関数に渡す必要があります。

+0

はい、ありがとうございます。この場合、宛先アルファは使用できません。しかし、私が私の質問で明確にしたと思ったように、私はOpenGLに目的地のアルファを使うことを頼むのではなく、アルファブレンディングをまったく行うことさえしていません。私はブレンドを使用してソースとデスティネーションのRGB値を一緒にモジュレーションしようとしています。私が知りたいのは、この仕事をするためのトリックがあるのか​​、それともこのバージョンのOpenGLでは不可能なのかということです。私のコードが間違っていると思うなら、説明してください。 – Entropy

0

私は愚かな間違いを犯しました。私自身のスクリプトコードを誤ってしまい、誤ったレンダリングパスでテクスチャを適用してしまいました。 OpenGLは責任を負うことはなく、ブレンドは機能します。

関連する問題