2017-03-05 21 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 我想用混合,但不能得到目的地阿爾法工作。我可以混合或創建沒有目標alpha的透明效果嗎?

許多OpenGL設備不支持目標alpha。 特別是,來自Microsoft的OpenGL 1.1軟件渲染庫不支持它。 OpenGL規範不需要它。

另外:

No Alpha in the Framebuffer

如果你正在做的交融,你需要一個目標阿爾法,你需要確保你的渲染目標有一個。渲染到Framebuffer對象時很容易確保。但是使用默認幀緩衝區,這取決於您如何創建OpenGL上下文。

例如,如果你正在使用GLUT,你需要確保你通過GLUT_ALPHAglutInitDisplayMode功能。

+0

是的,謝謝,我知道目標alpha不可用是這種情況。然而,正如我以爲我已經在我的問題中明確表達的那樣,我並沒有要求OpenGL使用目標alpha,甚至不要求alpha混合。我試圖使用混合將源和目標RGB值一起調製。我想知道的是,是否有一個技巧來完成這項工作,或者這個版本的OpenGL根本無法實現。如果您認爲我的代碼錯誤,請解釋。 – Entropy

0

好吧,我犯了一個愚蠢的錯誤:我誤解了我自己的腳本代碼,並最終在錯誤的渲染過程中應用了紋理。 OpenGL不是怪,混合DOES的工作。