버퍼 생성 및 활용 가이드
이 문서는 게임에서 버퍼를 생성하고 활용하는 방법에 대해 설명합니다. 특히, 기존의 정점 버퍼에서 정점 데이터를 복사하여 새로운 버퍼를 생성하는 buffer_create_from_vertex_buffer_ext
함수에 대해 다룹니다.
함수 설명
buffer_create_from_vertex_buffer_ext
함수는 게임에서 메모리의 일부를 버퍼로 할당하고, 이전에 생성된 정점 버퍼의 정점 데이터 범위로 채웁니다. 이 함수는 버퍼에 대한 참조를 반환하며, 이 참조는 변수에 저장되어 이후의 모든 함수 호출에 사용됩니다.
주요 매개변수
매개변수 | 타입 | 설명 |
---|---|---|
vertex_buffer | Vertex Buffer | 사용할 정점 버퍼에 대한 참조 |
type | Buffer Type Constant | 생성할 버퍼의 유형 (아래 상수 목록 참조) |
alignment | Real | 버퍼의 바이트 정렬 |
start_vertex | Real | 복사를 시작할 정점 |
num_vertices | Real | 복사할 정점의 총 개수 |
정렬 가이드라인
버퍼의 바이트 정렬은 저장할 데이터에 따라 달라지며, 대부분의 경우 1로 설정하는 것이 적합합니다. 그러나 특정 작업에는 특정 정렬이 필수적이며, 잘못된 정렬은 오류를 발생시킬 수 있습니다. 다음은 각 데이터 유형에 적합한 정렬 값에 대한 일반적인 가이드입니다:
데이터 유형 | 정렬 값 |
---|---|
문자열 | 1 바이트 |
8비트 정수 (부호 있음/없음) | 1 바이트 |
16비트 정수 (부호 있음/없음) | 2 바이트 |
32비트 정수 (부호 있음/없음) | 4 바이트 |
16비트 부동 소수점 | 2 바이트 |
32비트 부동 소수점 | 4 바이트 |
64비트 부동 소수점 | 8 바이트 |
사용 예제
다음은 buffer_create_from_vertex_buffer_ext
함수를 사용하는 예제입니다:
var _v_num = vertex_get_number(model_buff);
player_buffer = buffer_create_from_vertex_buffer_ext(model_buffer, buffer_grow, 1, 0, _v_num - 1);
위 코드는 메모리를 버퍼에 할당하고, 주어진 정점 버퍼에서 모든 정점의 데이터를 복사하여 새로운 버퍼를 반환합니다. 이 버퍼는 player_buffer
변수에 저장되어 이후에 사용됩니다.
활용 및 응용 예제
- 정점 데이터 복사: 특정 모델의 정점 데이터를 복사하여 다른 객체에 적용할 수 있습니다.
gml var enemy_buffer = buffer_create_from_vertex_buffer_ext(enemy_model_buffer, buffer_static, 1, 0, vertex_get_number(enemy_model_buffer) - 1);
- 버퍼 유형 변경: 정점 데이터를 복사하면서 버퍼의 유형을 변경할 수 있습니다.
gml var terrain_buffer = buffer_create_from_vertex_buffer_ext(terrain_model_buffer, buffer_dynamic, 2, 0, vertex_get_number(terrain_model_buffer) - 1);
- 정렬 조정: 데이터의 성격에 맞게 정렬을 조정하여 성능을 최적화할 수 있습니다.
gml var particle_buffer = buffer_create_from_vertex_buffer_ext(particle_model_buffer, buffer_grow, 4, 0, vertex_get_number(particle_model_buffer) - 1);
이와 같은 방법으로 버퍼를 생성하고 활용하여 게임의 성능을 향상시킬 수 있습니다.