2012-07-03 4 views
0

화면에 특정 효과를 직접 추가하고 싶습니다 (예 : 우분투 12.04). 예를 들어 흐리게 처리 할 수있는 C++ 데몬을 코딩하고 싶습니다. 실시간으로 내 모든 화면. 하나는 마우스를 움직일 수 있어야하고, 텍스트를 읽고, 인터넷을 검색 할 수 있어야하지만 모든 것이 여전히 흐릿합니다. 나는 작업이 화면 버퍼에 접근하고 수정해야한다는 것을 읽었다. 그게 사실이야? OpenGL을 사용하여 잘못된 방법을 찾고 있습니까?OpenGL : 화면에 효과를 추가하는 방법

+0

잘 모르겠지만,'렌더링 컨텍스트'를 만들 때'장치 컨텍스트 '를 지정해야합니다. 대개 창을 만들고 장치 컨텍스트를 가져옵니다. 그러나 적어도 Windows에서는 데스크톱의 장치 컨텍스트를 가져 오는 것이 가능합니다 (기억하는 한). – Gigi

답변

2

Compiz과 같은 합성 관리자를 사용해야합니다.이 관리자는 OpenGL을 통해 모든 도면을 재 라우팅하고 모든 종류의 멋진 작업을 수행 할 수있게합니다.

예를 들어, 우분투와 함께 제공되는 제품은 화면에 빗방울이 떨어질 수 있으며, 이는 Compiz settings manager을 통해 켤 수 있습니다.

OpenGL을 처음 사용하는 사람이라면이 작업을 적극 권장하지 않을 것입니다. 먼저 기본 그리기 호출에 대해 알아보고 쉐이더를 처리하십시오. 그리고 당신은 또한 (대한

+0

좋은 아이디어인데, 내가 찾고있는 것의 정신에 정확하게 맞는 가젯을 기억하고 있습니다. 하지만 제 목적은 (나중에, 물론) 다중 판형 소프트웨어를 사용하는 것입니다. 각 OS마다 다른 방법을 사용해야하는 경우 매우 까다 롭습니다! –

+1

그러면 매우 까다 롭습니다. 창 관리가 각 OS마다 매우 다르기 때문에이 방법을 휴대용 방식으로 수행 할 방법이 없습니다. – Thomas

1

나는 내가 그 수있을 것 데몬 ++은 C를 코딩하고 싶습니다 예를 들어, 직접 (첫번째 우분투 12.04에) 화면에 특정 효과를 추가 할 X.에 대해 배울 필요가 있습니다 예) 내 모든 화면을 실시간으로 흐리게 처리합니다. 하나는 마우스를 움직일 수 있어야하고, 텍스트를 읽고, 인터넷을 검색 할 수 있어야하지만 모든 것이 여전히 흐릿합니다.

은 조성 효과라고하며, 일반적으로 내가 작업에 액세스하고 screenbuffer을 수정해야한다는 읽은 컴포 지터

위한 플러그인으로 구현됩니다.

최신 OS에서는 화면 버퍼에 직접 액세스 할 수 없습니다. 그래서 이것은 효과가 없을 것입니다.

사실입니까?

아니요. 실제로는 매우 부정확합니다.

나는 OpenGL을 사용하여 잘못된 방법을 찾고 있습니까?

아니요, 올바른 방향을 찾고 있습니다.

설명하자면, 옛날 화면은 모든 응용 프로그램이 공유하는 하나의 대형 프레임 버퍼로 구성되었습니다. 그러나 응용 프로그램을 서로 보호하기 위해 해당 프레임 버퍼에 직접 액세스 할 수 없습니다. 대신 그들은 리눅스의 경우 전통적으로 X11 (현재 다른 시스템이 있지만 솔직히, 나는 그 디자인을 몹시 싫어한다.), GDI는 Windows, Quartz는 MacOS X이다.

그래픽 시스템은 창에 대한 그리기 작업이 스크린 버퍼의 올바른 위치에 끝나고 창 지오메트리와 화면의 다른 창에 의해 적절하게 잘리고 닫힐 수 있으므로주의해야했습니다. 창 크기가 조정되거나 이전에 폐색 된 부분이 노출 될 때마다 해당 부분을 다시 그리는 메시지가 전송됩니다. intrabuffer bitblitting을 사용하면 윈도우를 움직일 수 있습니다.

현대 GPU와 로컬 프레임 버퍼 메모리 모델의 출현으로이 오래된 창 관리 방식은 시대 착오적이되었습니다. 이제는 각 창에 독자적인 프레임 버퍼를 제공 할 수 있습니다.창 크기를 조정 한 경우에만 강제 다시 그리기가 필요합니다. 창 콘텐츠를 손상시킬 수있는 오 클루 션이 더 이상 없습니다.

그러나이 모델이 작동하려면 사용자에게 제공되는 스크린 버퍼의 단일 이미지로 창 내용을 포함하는 개별적인 별도의 프레임 버퍼를 사용하여이를 합성하는 프로그램이 필요합니다. 이것은 컴포 지터에 의해 수행됩니다. 또한 어떤 드로잉 API를 사용할 지에 따라 컴포지션이 발생할 수 있으므로 OpenGL을 사용하고 미친 효과를 적용 할 수 있습니다.

관련 문제