Прозрачное окно OpenGL рисует странно

Поэтому у меня есть прозрачное окно с контекстом OpenGL 3.3 (Windows 8). Всякий раз, когда я пытаюсь что-то нарисовать, почему-то рисует полупрозрачный, как это, но я хочу, чтобы это было непрозрачным:

введите описание изображения здесь

Фрагмент шейдера есть

#version 330 core

uniform sampler2D Texture;
uniform sampler2D Texture2;

in vec2 fragTexcoord;
out vec4 color;

void main(void)
{
color = vec4(0.0, 1.0, 0.0, 1.0);
}

Так что просто ДОЛЖНО быть зеленым, но это не так;

Я также пытался добиться прозрачности двумя способами: с помощью MARGINS и DWM_BLURBEHIND:

    DWM_BLURBEHIND bb = {0};
bb.dwFlags = DWM_BB_ENABLE;
bb.fEnable = true;
bb.fTransitionOnMaximized = 1;
bb.hRgnBlur = CreateRectRgn(-0, -0, 1000, 1000);DwmEnableBlurBehindWindow(_hWnd, &bb);SendMessage(_hWnd, WM_PAINT, NULL, NULL);UpdateWindow(_hWnd);

// The second way
MARGINS margins;
margins.cxLeftWidth = 0;
margins.cyTopHeight = 0;
margins.cxRightWidth = _Options.width;
margins.cyBottomHeight = _Options.height;
DwmExtendFrameIntoClientArea(_hWnd, &margins);

Но оба способа действуют одинаково.

Здесь я установил формат пикселя:

    PIXELFORMATDESCRIPTOR pfd;
int format;

memset(&pfd, 0, sizeof(pfd));
pfd.nSize = sizeof(pfd);
pfd.nVersion = 1;
pfd.dwFlags =  PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER | PFD_SUPPORT_COMPOSITION;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 24;
pfd.iLayerType = PFD_MAIN_PLANE;

Окно имеет стили WS_EX_COMPOSITED и WS_POPUP. glClearColor имеет значение 0,0f, 0,0f, 0,0f, 0,0f.

Любые идеи, как я могу это исправить?

1

Решение

Для тех, кого это волнует: я наконец-то нашел ответ.

В общем, я сделал эти шаги:

1) установить формат пикселя следующим образом

int format;

memset(&pfd, 0, sizeof(pfd));
pfd.nSize = sizeof(pfd);
pfd.nVersion = 1;
pfd.dwFlags =  PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER | PFD_SUPPORT_COMPOSITION;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pfd.cDepthBits = 24;
pfd.cAlphaBits = 8;
pfd.cGreenBits = 8;
pfd.cRedBits = 8;
pfd.cStencilBits = 8;
pfd.cBlueBits = 8;
pfd.iLayerType = PFD_MAIN_PLANE;

2) тогда я установил blurbehind как это:

DWM_BLURBEHIND bb = {0};
bb.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;
bb.fEnable = true;
bb.fTransitionOnMaximized = 1;
bb.hRgnBlur = CreateRectRgn(0, 0, -1, -1);

Я думаю, что это обмануло, потому что регион просто не прав.

Итак, все выглядело так, как я хотел

введите описание изображения здесь

Надеюсь, это может кому-то помочь.

1

Другие решения


По вопросам рекламы [email protected]