Поэтому у меня есть прозрачное окно с контекстом 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) установить формат пикселя следующим образом
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);
Я думаю, что это обмануло, потому что регион просто не прав.
Итак, все выглядело так, как я хотел
Надеюсь, это может кому-то помочь.