我已经在游戏过程中注入了一个DLL来制作叠加界面,但问题是alpha值被“裁剪”(根本不渲染)
我测试了几个alpha值,如果alpha低于0.3,它似乎会失败。
为了说明发生了什么,我试图渲染的图像是:
和渲染图像的游戏是:
这里到底发生了什么?它的当前状态是opengl?我是API的新手,我不知道为什么会这样。
更多信息:
使用以下内容从缓冲区创建纹理:
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, this->width, this->height, GL_BGRA_EXT, GL_UNSIGNED_BYTE, this->buffer);
我从Awesomium收到此缓冲区,值正确...我已检查过alpha值。
渲染是使用此功能完成的(我也尝试过调用游戏的纹理渲染功能,但同样的问题也会发生):
void DrawTextureExt(int texture, float x, float y, float width, float height)
{
glPushAttrib(GL_ALL_ATTRIB_BITS);
{
glPushMatrix();
{
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// glBlendFunc(GL_ONE, GL_ONE); << tried this too.. ugly results
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glTranslatef(x, y, 0.0);
glRotatef(0, 0.0, 0.0, 1.0);
glTranslatef(-x, -y, 0.0);
glBegin(GL_QUADS);
{
glTexCoord2f(0, 0); glVertex2f(x, y);
glTexCoord2f(0, 1); glVertex2f(x, y + height);
glTexCoord2f(1, 1); glVertex2f(x + width, y + height);
glTexCoord2f(1, 0); glVertex2f(x + width, y);
}
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
}
glPopMatrix();
}
glPopAttrib();
}
答案 0 :(得分:1)
对我来说听起来就像你正在进行的程序一样是在它结束时使用alpha测试的渲染功能(这很有意义)并在结束时启用alpha测试,然后你就可以了碰上了。试试如果你在钩子中首先禁用alpha测试会发生什么。 (glDiable(GL_ALPHA_TEST)
)。