c - 如何在 GLFW 中启用帧缓冲区透明度?

标签 c opengl transparency glfw

我被 GLFW 中的窗口透明度所困,我遵循了他们的窗口指南和示例,但似乎没有任何效果...... GLFW 3.3 版以及 OpenGL 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);

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

最佳答案

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;
}

关于c - 如何在 GLFW 中启用帧缓冲区透明度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57080896/

相关文章:

C 中的 Char 和 if 语句

c - 当我尝试从二进制文件中读取数组时,它没有出现在我的文本文件中

iPhone键盘透明度

c - 使用popen()在c程序中执行ssh命令

c - && 运算符在两个字符串之间时有何作用?

c++ - glVertexAttribPointer - 顶点法线或颜色

c - Spritesheet 动画与视频渲染

java - 使用 VAO 的 JOGL 中纹理为黑色

html - 如何在透明背景图像后面添加背景颜色?

c++ - 如何将 Direct2D 渲染目标清除为完全透明