gpt4 book ai didi

c++ - GLFW 洋红色导致意外行为

转载 作者:行者123 更新时间:2023-12-04 03:38:28 26 4
gpt4 key购买 nike

当我使用 GLFW 创建窗口(在 Windows 操作系统上)并通过 glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, 1); 将 GLFW_TRANSPARENT_FRAMEBUFFER 设置为 1 时; 我无法用洋红色 glColor3f(1.f, 0.f, 1.f); 绘制矩形。这种颜色使矩形变得透明,使我能够点击窗口的这一部分。

我没有预料到会出现这种行为,也没有找到任何对此进行解释的文档。

我在 GLFW homepage 上使用了示例代码并添加了一个灰色、黄色和品红色矩形,其中只有灰色和黄色矩形产生预期的行为。

Screenshot that shows the window

#include <GLFW/glfw3.h>

int main(void)
{
GLFWwindow* window;

/* Initialize the library */
if (!glfwInit())
return -1;

// ADDED THIS LINE
glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, 1);

/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}

/* Make the window's context current */
glfwMakeContextCurrent(window);

/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);

// ADDED THE FOLLOWING LINES
// background
glColor3f(0.1f, 0.1f, 0.1f); // gray
glRectf(-0.75f, 0.75f, 0.75f, -0.75f);

// unexpected behavior: makes part of the window transparent and click through
glColor3f(1.f, 0.f, 1.f); // magenta
glRectf(-0.1f, -0.1f, 0, 0);

// draws yellow rect
glColor3f(1.0f, 1.f, 0.f); // yellow
glRectf(-0.1f, 0.1f, 0, 0);


/* Swap front and back buffers */
glfwSwapBuffers(window);

/* Poll for and process events */
glfwPollEvents();
}

glfwTerminate();
return 0;
}

GLFW_TRANSPARENT_FRAMEBUFFER 设置为 0 时,可以正确绘制洋红色。

最佳答案

此行为的原因是当前透明色键等于洋红色。以这种颜色绘制的所有像素都是透明的。

要更改颜色键(在 Windows 操作系统上),您可以调用函数 SetLayeredWindowAttributes .

此示例会将颜色键更改为红色: SetLayeredWindowAttributes(glfwGetWin32Window(window), RGB(255, 0, 0), NULL, LWA_COLORKEY);

documentation该函数的声明如下关于颜色键:

crKey

Type: COLORREF

A COLORREF structure that specifies the transparency color key to beused when composing the layered window. All pixels painted by thewindow in this color will be transparent. To generate a COLORREF, usethe RGB macro.

为了调用glfwGetWin32Window你需要定义宏 #define GLFW_EXPOSE_NATIVE_WIN32并包括 #include <GLFW/glfw3native.h>正如解释的那样 here .

关于c++ - GLFW 洋红色导致意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66490852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com