如何在全屏模式下(在OpenGL中)使背景透明

How to make the background transparent in fullscreen mode (in OpenGL)?

本文关键字:背景 透明 OpenGL 模式      更新时间:2023-10-16

我想创建一个透明的背景,但只有当第4个(monitor(参数设置为NULL时,它才能工作。如果我将窗口修改为全屏(如下面的代码所示(,背景就会变成黑色,没有任何透明度。有什么解决办法吗?

注意:我只希望背景是透明的。不是整个窗口及其内容。

//at configuring  
glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, 1);       
...  
//at window creation  
GLFWmonitor* primary = glfwGetPrimaryMonitor();  
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "Application",primary, NULL);
...
//in render loop  
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

我尝试了一些东西,如果您在操作系统主题上支持透明,那么默认情况下看起来透明是有效的(有些Windows7主题只是纯色,所以请小心,因为您的操作系统主题将禁用操作系统透明支持(。
main.cpp文件:

// INCLUDE
#include "main.h"
// DECLARATION
static void key_event(GLFWwindow*, int, int, int, int);
// GLOBAL VARIABLES
int app_width = 512;
int app_height = 256;
// RUN
void main(void)
{
if (!glfwInit()) { exit(EXIT_FAILURE); }
//glfwWindowHint(GLFW_DECORATED, GLFW_FALSE);
glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE);
GLFWmonitor* monitor = glfwGetPrimaryMonitor();
const GLFWvidmode* mode = glfwGetVideoMode(monitor);
GLFWwindow* window = glfwCreateWindow(mode->width, mode->height, "GLFW Test", monitor, NULL);
glfwSetKeyCallback(window, key_event);
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
while (!glfwWindowShouldClose(window))
{
glfwGetFramebufferSize(window, &app_width, &app_height);
glViewport(0, 0, app_width, app_height);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
// TO DO
glBegin(GL_TRIANGLES);
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, 0.5f);
glVertex2f(0.5f, -0.5f);
glEnd();
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
exit(EXIT_SUCCESS);
}
static void key_event(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) { 
glfwSetWindowShouldClose(window, GLFW_TRUE); 
glfwTerminate();
exit(EXIT_SUCCESS);
}
}


main.h文件:

#pragma once
// INCLUDE
#include <iostream>
#include <conio.h>
#include <GLFW/glfw3.h>

对我来说就是工作。(我看到如果glClearColor没有完整的0.0f值,背景将不会完全透明…