'web'에 해당되는 글 1건

  1. 2011.01.25 Dx 기반 프로그램 위에 웹을 띄우려고 한다면
2011. 1. 25. 16:14

Dx 기반 프로그램 위에 웹을 띄우려고 한다면


Dx기반 프로그램 위에 웹을 띄우려고 하면 여러 가지 방법이 있다.
 
주요 부분은 따로 끌어옴!!

1. 팡야와 같이 갈무리해서 쓴다
장점 : 파싱으로 얻은 결과를 gameui로 찍으면 화면은 더할나이 없겠죠?
단점 :  링크와 버튼 같은 경우도 전부 구현해 줘야 하구요 이경우는 엄청난 파싱코드가 난무하게 되며 당연히 게임의 속도를 까먹는 리소스 벌래가 되겠구요 페이지가 큰겨우에

비례해서 n * time이 되겠죠

결론 : ui에 신경을 많이 쓰고 싶은 게임이라면 한번쯤은 가능하다 하지만 조잡하고 속도가 떨어진다
하지만 게시판이 뜨는경우를 생각하면 게임진행사황이 거의 아니무로 이방법도 괜찮겠지만 제작시간이 오래 걸린다

 

2. ATL
장점 : 쉽게 뜬다 -_- 단 3줄? 다른 라이브러리기 때문에 웹페이지에 대한 정의를 내릴 필요가 없다.
단점 : 다른 라이브러리를 쓰기때문에 다른 제작자들의 컴파일러와 라이브러리 버젼이 일치해야 한다.
세부컨트롤이 불가능하므로 AtlAxWin을 그대로 쓰는것보다는 CAxWindow계열의 윈도우를 생성해내
obj를 붙여 제작하는게 더현실적이다. 예제 코드가 별로 없다.

결론 : 역시나 쉬운게 비지떡이라고 세부 컨트롤 즉 마우스 오른쪽 클릭을 막고 싶다던지 쉬프트키 누르고
 링크를 눌렀을때 같이 새창이 뜨는 경우를 막으려면 코드량이 좀 늘것 같고 ATL을 공부해야 한다. -_-;

ATL을 이용한 예제와 소스
http://mypage.sarang.net/phpBB2/viewtopic.php?t=215

 

3. COM
장점 : IWebBrowser2 계열로 쉽게 뜨고 쉽게 컨트롤이 가능하다
단점 : ATL과 마찬가지로 멤버 메소드(COM을 기반으로 함수라는 말은 메소드로 정정) 들이 세부적인 컨트롤을 못하므로
멤버 이벤트 메소드들을 제정의해서 써야한다. 그리고 ATL과 마찬가지로 COM을 공부해야 한다 ATL보다 더 자비심이 없는것 같다 ;ㅁ;

결론 : 많은 게임이 이 방식을 쓰고 있지만 제정의해서 써야하는건 마찬가지 그리고 단일객체만 선언해서는 효력이 별로 없는것 같다;

 

위와 같은 방식으로 제작한다면 윈도우(창)모드에서는 이상없이 잘 작동한다. 하지만 전체화면일때 웹을 구동하는 것이 문제인데, 몇가지만 신경써준다면 구현이 가능하다.

1.

DirectX 9.0c를 기반으로 작성됨. SetDialogBoxMode() 함수를 이용하여 풀스크린에서도 윈도우 컨트롤을 사용할 수 있게 한다. 단 이렇게 하면 프레임 저하가 있으므로 웹브라우저가 보이지 않을때에는 꺼줘야 한다.

코드:
m_pD3DDevice->SetDialogBoxMode(TRUE); 
또, SetDialogBoxMode() 함수를 사용하려면 D3DPRESENT_PARAMETERS에서 Flags에 D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 를 추가해줘야 한다.

2.

방식은 간단히 우선 DX 수직동기화를 화면 주파수가 아닌 IMM 으로 맞추고
창모드에서도 켜줘야 하지만 다이얼로그 모드를 켜주구요
웹창이 뜰때만 우선 이펙트 스왑을 COPY로 바꿔 놓고 Present를 무려 4번 합니다

3.

  2번 방식을 잘 모르겠다면 그냥 프리젠트를 하지 않고 쓴느것도 하나의 방법,

4.

  몇몇 오류사항들이 발생하는데, 전체화면에서 포커스를 읽어서 최소화될때라던지.. 이런 버그들이 있는데, 일단은 그런 이벤트가 발생시에는 웹창을 강제로 종료시켜 주었다.

 

이정도...