2014-07-09 2 views
1

그래서 나는 OpenGL 3.3 컨텍스트 (Windows 8) 투명 창이 있습니다. 내가 뭔가를 그리려고 할 때마다 그것은이 같은 반투명 그리는 이유를 몇 가지,하지만 난 그것을 불투명합니다 :투명 OpenGL 창 이상한 그릴

enter image description here

조각 쉐이더가

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

그래서 그냥 녹색되어야하고, 그러나 그렇지 않습니다. 마진과 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로 설정됩니다.

어떻게하면 해결할 수 있습니까?

+0

내가 묻는 것에 대해 혼란스러워합니다. 이미지의 녹색 상자는 완전히 불투명합니다. 또한 순수한 녹색입니다. 나는 분명히 그것이 "녹색이어야한다. 그러나 그렇지 않다"라고 왜 말하고 있는지 분명하지 않다. 또한 녹색 상자를 투명하게 만들기 위해 노력하고 있습니까? – Freddy

+0

내 'wglarb' 라이브러리의 "계층화 된"테스트 프로그램을보고 싶을 수도 있습니다. DWM 흐리게/투명하게 작동하는 예제입니다. 나는 그것이 당신의 문제에 정말로 대답하지 않는다는 것을 안다. 그러나 이것이 당신에게보기 흉하지 않은 머리부터 시작한다는 것을 알 수있다. https://github.com/datenwolf/wglarb – datenwolf

+0

@Freddy이 녹색 상자는 불투명하지 않습니다. 하단의 텍스트를 보면 : 배경이 흰색 인 경우 녹색 상자의 알파가 갑자기 0이됩니다. –

답변

1

관심이있는 사람들을 위해 : 나는 결국 대답을 찾았습니다.

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

나는이 생각 : 다음과 같이 blurbehind 설정)이

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와 같은 픽셀 포맷을 설정

1) :

그래서 기본적으로, 나는 그 단계를했다 지역이 단순히 틀렸기 때문에 흐림을 속였습니다.

은 그럼 모두 내가

enter image description here

이 사람을 도움이 될 희망을 원하는 것처럼 보였다.