OpenGL和(缺少)glBlendFuncSeparate

时间:2013-10-17 12:36:05

标签: windows opengl glew

我需要将一些图像混合成一个图像,就像这里描述的那样:OpenGL - mask with multiple textures
我使用了那里提出的解决方案,但glBlendFuncSeparate方法存在问题。

原来这个方法是在以后的openGL版本中引入的,根据我的gl.h文件,我使用的版本是1.
经过大量的搜索和阅读后,我意识到这是我必须使用的,我不能只升级我的openGL版本。

我继续下载GLEW 我将glew.hglew.c添加到我的VS10项目中,定义了GLEW_BUILD,现在最终编译时没有抱怨glBlendFuncSeparate,但是当我运行程序时它会在尝试时崩溃调用方法,说Access Violation,我猜它指向NULL,然后在运行时崩溃。

我继续阅读并搜索此内容,根据我的理解,我需要使用OpenGl Extensions才能使其正常工作。
如果Using OpenGL extensions On Windows中的内容是正确的,那么我就会遗漏一些东西 让我说我做了它所说的一切,我“为你的显卡下载并安装最新的驱动程序和SDK”,然后编译它,即使它在我的机器上运行,我看不能保证它不会在别人的机器上崩溃,因为他们可能没有做同样的事情。

我有两个问题:

  1. 我在这里遗漏了什么吗?整个过程似乎过于复杂,与环境有关。
  2. 在这种情况下是否有使用glBlendFuncSeparate的替代方案?

1 个答案:

答案 0 :(得分:2)

您不需要glBlendFuncSeparate(GL_ZERO,GL_ONE,GL_SRC_COLOR,GL_ZERO);使用OpenGL - mask with multiple textures中描述的技巧。是的,您无法直接将颜色添加到Alpha通道中,如前面示例中所述,但您可能会有点棘手。

在编写掩码时,只需禁用所有颜色通道的写入,但alpha:

除外

glColorMask(false, false, false, true);

并在背景alpha通道上启用倍增遮罩的alpha:

glBelndFunc(GL_ZERO, GL_SRC_ALPHA);

编写位掩码后,不要忘记设置glColorMask。

glColorMask(true, true, true, true);

// --------------------------------------------- -------------------------------------------------- ------------------------

是的,您需要使用Alpha通道中的信息进行掩码:

1)可以使用GIMP完成(非常简单,但需要GIMP知识)。

2)你可以编写自己的rootine,用于在创建蒙版纹理之前将颜色信息推送到alpha通道(它非常简单 - 只需几行代码)。

3)或者只使用GL_ALPHA"格式" glTexImage2D中的属性用于蒙版纹理。此标志只是将位图颜色写入纹理alpha通道。

相关问题