buffer_get_surface 함수 설명
buffer_get_surface 함수는 주어진 버퍼에 서피스의 정보를 기록하는 기능을 제공합니다. 이 함수는 다음과 같은 특징이 있습니다:
- 버퍼는 미리 생성되어야 하며, 1바이트 정렬이 되어 있어야 합니다.
- 서피스의 데이터를 저장할 수 있을 만큼 충분히 커야 합니다.
- 서피스의 정보는 항상 버퍼의 시작 부분에 기록되지만, 오프셋 값을 지정하여 기록 위치를 조정할 수 있습니다.
서피스의 형식에 따라 버퍼에 기록되는 방식이 달라질 수 있습니다. 각 픽셀이 서피스에서 차지하는 공간에 대한 정보는 관련 페이지의 표를 참조하세요. 동일한 형식이라도 플랫폼에 따라 다르게 기록될 수 있습니다.
함수 구문
buffer_get_surface(buffer, surface, offset);
인수 설명
| 인수 | 타입 | 설명 |
|---|---|---|
| buffer | Buffer | 사용할 버퍼입니다. |
| surface | Surface | 사용할 서피스입니다. |
| offset | Real | 데이터 오프셋 값(바이트 단위)입니다. |
반환값
- N/A
예제
다음은 buffer_get_surface 함수를 사용하는 예제입니다:
var _surf_width = surface_get_width(surf1);
var _surf_height = surface_get_height(surf1);
buff1 = buffer_create(_surf_width * _surf_height * 4, buffer_fixed, 1);
buffer_get_surface(buff1, surf1, 0);
위의 예제는 서피스의 너비와 높이를 로컬 변수에 저장한 후, 서피스의 크기에 맞는 버퍼를 생성합니다. 이 버퍼는 각 픽셀의 4바이트를 저장할 수 있는 공간을 만듭니다. 이후 서피스 데이터를 해당 버퍼에 기록합니다.
버퍼는 항상 소스 서피스의 모든 픽셀을 저장할 수 있는 충분한 공간이 필요하며, 이는 서피스의 형식에 따라 달라집니다.
다양한 활용 예제
- RGBA16Float 형식의 버퍼 생성
gml // rgba16float - 16비트 또는 2바이트 per channel, RGBA - 따라서 픽셀당 8바이트 buff2 = buffer_create(_surf_width * _surf_height * 8, buffer_fixed, 1); - R8Unorm 형식의 버퍼 생성
gml // r8unorm - 8비트 또는 1바이트 per pixel, 오직 R 채널 - 따라서 픽셀당 1바이트 buff3 = buffer_create(_surf_width * _surf_height, buffer_fixed, 1);
이와 같은 방식으로 다양한 서피스 형식에 맞춰 버퍼를 생성하고 데이터를 기록할 수 있습니다.