如何在GLFW中启用帧缓冲区透明性?

时间:2019-07-17 16:58:28

标签: c opengl transparency glfw

我对GLFW的窗口透明度一无​​所知,我遵循了他们的窗口指南和示例,但是似乎没有任何效果... 带有OpenGL 3.3的GLFW版本3.3。

我查看了GLFW存储库中的gears示例,该示例引入了一个完全透明的窗口,复制了所需的窗口提示(GLFW_FRAMEBUFFER_TRANSPARENCY)并将其设置为true。这对我不起作用

我正在使用以下方法初始化窗口:

if (!glfwInit()) {
    printf("Could not initialize GLFW\n");
    return 1;
}

GLFWwindow *window = glfwCreateWindow(500, 500, "opengl", NULL, NULL);
if (!window) {
    printf("Could not create GLFW window");
    return 1;
}

glfwWindowHint(GLFW_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_RESIZABLE, 1);
glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, 1);

glfwMakeContextCurrent(window);
glfwSwapInterval(1);
glfwSetFramebufferSizeCallback(window, resizeCallback);

然后我清除这种方式:

glClearColor(1.0, 1.0, 1.0, 0.1);
glClear(GL_COLOR_BUFFER_BIT);

我希望窗口是半透明的,我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

glfwWindowHint必须在创建窗口之前之前调用(可以在您提到的演示中看到)。否则它们没有任何作用。正确的代码:

glfwWindowHint(GLFW_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_RESIZABLE, 1);
glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, 1);

GLFWwindow *window = glfwCreateWindow(500, 500, "opengl", NULL, NULL);
if (!window) {
    printf("Could not create GLFW window");
    return 1;
}