다양한 글들/Win32 API

05_DoubleBuffering

smile blog 2022. 11. 17. 17:15
화면을 스무스하게 (DoubleBuffering)

Engine

 Common

  Common.h (펜이랑 브러쉬 객체화 구조체로)

  def.h

  Maths.h

  yaEntity.cpp

  yaEntity.h

 

GameObject

 Base (기초가 됨)

   yaGameObject.cpp

   yaGameObject.h

 yaMissile.cpp

 yaMissile.h

 yaPlayer.cpp

 yaPlayer.h

 

High Level Interface

 yaApplication.cpp (더블버퍼링 효과 만들기)

 yaApplication.h

 

Manager

 yaInput.cpp

 yaInput.h ==> 키보드에서 키를 눌렀을 때 호출되는 파일들

 yaSceneManager.cpp

 yaSceneManager.h

 yaTime.cpp

 yaTime.h ==> deltatime 설정

 

Scene

 Base ( 기초가 됨 )

   yaScene.cpp

   yaScene.h

 yaLogoScene.cpp

 yaLogoScene.h

 

main

 framework.h

 main.cpp

 Resource.h

 targetver.h

 WindowsAPI.h


기타

API에는 더블버퍼링 기능이 없으므로 그렇게 보이도록 만들어줘야 한다

 

BitBlt 함수

GDI에서는 DC와 DC간에 그림으 복사할 수 있는 BitBlt라는 함수가 있다

https://blog.naver.com/tipsware/220994341959

 

BitBlt 함수에 대하여

: Windows 데스크톱 응용 프로그래밍 관련 전체 목차 http://blog.naver.com/tipsware/221059977193 1. 화...

blog.naver.com


용어 정리

더블 버퍼링(Double Buffering)

이중 버퍼링이라 불리기도 하며, 그래픽 객체에 이미지를 그릴 때 사용되는 기법이다.

API로 게임을 만들다보면 화면이 깜빡거리는데 이 깜빡거림을 없애주는게 더블버퍼링 기법이다.

 

Q) 왜 사용하는가 ? 

A) API를 시작하다보면 비트맵 이미지를 사용하게 된다. 그 때 이미지들이 전환되면서 영상처럼 부드럽게 움직일 거라 생각하지만 실제로 이미지들이 움직일 때마다 화면이 깜빡이는 현상이 눈에 들어온다. 쉽게 말하자면 아래와 같은 상황인 것이다.

 

▶ 게임 캐릭터이미지를 구현할 때 이미지를 움직이게 하고 싶다.

그러나 캐릭터가 띄엄띄엄 움직임과 동시에 깜빡거리는 화면

때문에 게임할 맛이 안난다.

 

원리
메모리에 먼저 그림을 그린후 그 그림이 완성되면 화면에 출력해주는 것이다.

 

더블버퍼링 기법을 안쓸때, 프로그램은 그림을 화면에 바로 출력한다.
이는 비디오카드에 출력한단뜻인데, 비디오카드는 입출력이 매우 느리다.


그대로 출력시, 화면에 일일히 접근하여 하나하나씩 처리하기때문에 느려지고 이때문에 화면이 깜빡거린다.

하지만 메모리는 입출력이 매우매우 빠르다.


메모리에 먼저 그림을 그려준다음 그림을 다 그린후 화면에 뿌려주면 비디오카드입장에서는 한번만 처리하면 되므로 속도문제도 해결되고 물론 깜빡임도 해결된다.

 

https://movefast.tistory.com/6t

 

Double Buffering - 더블 버퍼링 기법

더블 버퍼링(Double Buffering)은 이중 버퍼링이라 불리기도 하며, 그래픽 객체에 이미지를 그릴 때 사용되는 기법이다. Q) 왜 사용하는가 ? A) API를 시작하다보면 비트맵 이미지를 사용하게 된다. 그

movefast.tistory.com

 

비트맵(Bitmap) 그래픽

비트맵 그래픽은 간단히 말해 서로 다른 점(픽셀)들의 조합으로 그려지는 이미지 표현 방식입니다. 비트맵 이미지는 정교하고 화려한 표현이 가능하여, 주로 사진 이미지에 주로 사용됩니다. 비트맵 이미지는 크기를 늘리거나 줄이면 원본 이미지에 손상이 가는 것이 특징이며, 우리는 흔히 이것을 '이미지가 깨졌다'라고 표현합니다.