창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳
글 수 185
보니까 backbuffer에 그림을 붙이던데
backbuffer가 배경 버퍼니까 바로 화면에 출력되는건가요?
그런데 그걸 직접 쓰면 MFC의 DC처럼 깜박임과 속도저하가 오는건 아니죠?ㅡ,.ㅡ;
추가로 LoadPicture로 불러온 그림을 다시 안불러온것처럼 되돌리는건 없나요?
backbuffer가 배경 버퍼니까 바로 화면에 출력되는건가요?
그런데 그걸 직접 쓰면 MFC의 DC처럼 깜박임과 속도저하가 오는건 아니죠?ㅡ,.ㅡ;
추가로 LoadPicture로 불러온 그림을 다시 안불러온것처럼 되돌리는건 없나요?
똥똥배
- 2008.06.29
- 07:06:23
- (*.193.78.136)
네, 그거죠. 프로그램 규모가 커지면 이것이 문제라서 초기부터 잘 잡아 둬야 합니다.
(솔직히 구문 에러는 문제도 아니죠. 프로그램 수준이 되면 모두 메모리 싸움입니다.)
일단 memory leak이라고 해서 프로그램이 종료된 뒤까지 delete가 안 된 메모리는 컴파일러가 알려줍니다.
이건 특수한 방법으로 찾으면 일단 해결은 가능하죠.
지금 제가 겪고 있는 문제는 그거랑 조금 별개라고 해야할까?
라이브러리 특성인지 메모리를 어느 정도 선을 넘어야 릴리즈 시키는데
제가 프로그램에는 결벽증 수준으로 꼼꼼한 성격이라서 제가 계산하지 않은 메모리를 어디서 쓰는 게 있으면
참지 못하고 다 찾아내서 최적화를 시켜야 됩니다. 지금 그게 문제라는 거지, 사실 memory leak은 없습니다.
(특히 요즘 NDS 프로그램 하다보니 메모리에는 신경질적으로 신경 쓰게 되는군요.)
Warning이 많은 것은 이게 VC++ 2003인가 이전 버전으로 만들어 진 탓도 있고
제작한 것은 문진섭님이라서 제가 손대서 오히려 나빠지는 것 보다 낫다고 생각해서 놔둔겁니다.
사실 워닝도 전부 없애버리고 싶어요. 그래서 저번에 건드렸다가 이상하게 되서 안정성있는 지금 이대로 그냥 놔두고 있습니다.
어쨌든 결론은 문라이브는 제가 몇년간 써서 안정성은 보장되어 있습니다.
(솔직히 구문 에러는 문제도 아니죠. 프로그램 수준이 되면 모두 메모리 싸움입니다.)
일단 memory leak이라고 해서 프로그램이 종료된 뒤까지 delete가 안 된 메모리는 컴파일러가 알려줍니다.
이건 특수한 방법으로 찾으면 일단 해결은 가능하죠.
지금 제가 겪고 있는 문제는 그거랑 조금 별개라고 해야할까?
라이브러리 특성인지 메모리를 어느 정도 선을 넘어야 릴리즈 시키는데
제가 프로그램에는 결벽증 수준으로 꼼꼼한 성격이라서 제가 계산하지 않은 메모리를 어디서 쓰는 게 있으면
참지 못하고 다 찾아내서 최적화를 시켜야 됩니다. 지금 그게 문제라는 거지, 사실 memory leak은 없습니다.
(특히 요즘 NDS 프로그램 하다보니 메모리에는 신경질적으로 신경 쓰게 되는군요.)
Warning이 많은 것은 이게 VC++ 2003인가 이전 버전으로 만들어 진 탓도 있고
제작한 것은 문진섭님이라서 제가 손대서 오히려 나빠지는 것 보다 낫다고 생각해서 놔둔겁니다.
사실 워닝도 전부 없애버리고 싶어요. 그래서 저번에 건드렸다가 이상하게 되서 안정성있는 지금 이대로 그냥 놔두고 있습니다.
어쨌든 결론은 문라이브는 제가 몇년간 써서 안정성은 보장되어 있습니다.
플립 방식에 대해 혹시 모르실까 설명 드리자면
A와 B의 화면이 있다면
A를 보여주고 있을 때는 B에다 그리고, 다 그렸으면 보여주는 화면을 B로 교체하는 방식입니다.
즉, 2화면을 서로 교대로 보여주면서 안 보여주는 쪽에 그림을 그리는 방식이죠.
대부분 다이렉트X를 쓰면 이런 식으로 그래픽을 출력합니다. 더블버퍼링보다 훨씬 빠르기 때문이죠.
더블 버퍼링에서는 다 그린 후 그것을 화면에 올리기 위해 한 번 더 그려주는 데,
이 한 번 더 그리는 일이 줄어들게 되죠.
그리고 플립이 이루어지는 순간은 jdd-Render()가 실행되는 순간입니다.
Render 전에는 어떤 그리기 명령을 실행해도 Render를 시키기 전까지는 아무것도 표시되지 않습니다.
왜냐면 보이지 않는 다른 면에 그리고 있기 때문이죠.
그리고 LoadPicture로 불러온 그림을 없애는 것은 DeletePicture입니다.
좀 더 훌륭한 프로그램을 하시려면 메모리 관리자를 띄어놓고
메모리 사용량을 확인하는 게 좋을 겁니다.
문D라이브 문제로 CCommand 쪽은 메모리 해체가 약간 문제 있는 듯 한데
그것은 차후 수정할 수준입니다.
(일단 컴퓨터 다운 시킬 수준의 누수도 아니고, 어느 정도 선에 가면 자동으로 릴리즈 되는 듯)