vertex_update_buffer_from_vertex 함수 설명
이 문서는 vertex_update_buffer_from_vertex
함수에 대한 설명과 활용 예제를 제공합니다. 이 함수는 한 정점 버퍼의 내용을 다른 정점 버퍼로 업데이트하는 데 사용됩니다.
함수 개요
vertex_update_buffer_from_vertex
함수는 다음과 같은 기능을 제공합니다:
- 다른 정점 버퍼의 일부 내용을 사용하여 정점 버퍼의 내용을 업데이트합니다.
frozen
정점 버퍼는 이 함수에 전달할 수 없습니다.
사용 방법
- 시작 정점과 복사할 정점 수를 선택적으로 제공할 수 있습니다.
- 목적지 정점 버퍼의 정점 형식은 원본 정점 버퍼와 동일한 속성을 가져야 합니다(정점 형식은 다를 수 있습니다).
- 목적지 정점 버퍼에 정점이 추가된 적이 없다면, 원본 버퍼의 정점 형식을 사용하여 정점이 추가됩니다.
- 정점 버퍼의 현재 크기 외부에 데이터를 작성하면 필요에 따라 정점 버퍼의 크기가 조정됩니다.
문법
vertex_update_buffer_from_vertex(dest_vbuff, dest_vert, src_vbuff[, src_vert, src_vert_num]);
인수 설명
인수 이름 | 타입 | 설명 |
---|---|---|
dest_vbuff | Vertex Buffer | 정점을 복사할 목적지 정점 버퍼 |
dest_vert | Real | 목적지 정점 버퍼에서 복사할 첫 번째 정점의 인덱스 |
src_vbuff | Vertex Buffer | 정점을 복사할 원본 정점 버퍼 |
src_vert | Real | 원본 정점 버퍼에서 복사할 첫 번째 정점의 인덱스 |
src_vert_num | Real | 복사할 정점의 수 |
반환 값
- N/A
예제 코드
다음은 vertex_update_buffer_from_vertex
함수를 사용하는 예제입니다.
Create Event
vertex_format_begin();
vertex_format_add_position_3d(); // 세 개의 buffer_f32 값
vertex_format_add_color(); // 네 개의 buffer_u8 값
vertex_format_add_texcoord(); // 두 개의 buffer_f32 값
vertex_format = vertex_format_end();
vb = vertex_create_buffer();
vertex_begin(vb, vertex_format);
vertex_position_3d(vb, 100, 100, 0);
vertex_color(vb, c_lime, 1);
vertex_texcoord(vb, 0, 0);
vertex_position_3d(vb, 200, 100, 0);
vertex_color(vb, c_lime, 1);
vertex_texcoord(vb, 1, 0);
vertex_position_3d(vb, 200, 200, 0);
vertex_color(vb, c_lime, 1);
vertex_texcoord(vb, 1, 1);
vertex_end(vb);
vb2 = vertex_create_buffer();
vertex_update_buffer_from_vertex(vb2, 0, vb);
Draw Event
vertex_submit(vb2, pr_trianglelist, -1);
위의 코드는 정점 버퍼의 내용을 새로 생성된 다른 정점 버퍼로 복사하는 방법을 보여줍니다. 먼저 Create 이벤트에서 Passthrough Vertex Format
과 동일한 정점 형식을 생성하고 vertex_format
변수에 저장합니다. 그런 다음 새로운 정점 버퍼를 생성하고 정점 형식에 따라 세 개의 정점으로 채웁니다. 이후 두 번째 정점 버퍼 vb2
를 생성하고 vertex_update_buffer_from_vertex
를 사용하여 vb
의 정점 데이터로 업데이트합니다. 함수 호출 후 vb2
의 정점 데이터는 vb
와 동일해집니다. 마지막으로 Draw 이벤트에서 vb2
를 vertex_submit
을 사용하여 그립니다.
활용 예제
- 정점 데이터 복사: 여러 개의 정점 버퍼를 관리할 때, 특정 정점 버퍼의 데이터를 다른 버퍼로 쉽게 복사할 수 있습니다.
gml vertex_update_buffer_from_vertex(targetBuffer, 0, sourceBuffer);
- 정점 형식 변경: 원본 정점 버퍼의 형식을 유지하면서 새로운 형식으로 데이터를 복사할 수 있습니다.
gml vertex_format_new = vertex_format_end(); vertex_update_buffer_from_vertex(newBuffer, 0, oldBuffer);
- 정점 버퍼 크기 조정: 정점 버퍼의 크기를 동적으로 조정하여 필요한 만큼의 정점을 추가할 수 있습니다.
gml vertex_update_buffer_from_vertex(dynamicBuffer, startIndex, staticBuffer);
- 정점 애니메이션: 애니메이션 효과를 위해 정점 데이터를 주기적으로 업데이트할 수 있습니다.
gml vertex_update_buffer_from_vertex(animatedBuffer, currentVertexIndex, keyframeBuffer);
이와 같은 다양한 활용 예제를 통해 vertex_update_buffer_from_vertex
함수를 효과적으로 사용할 수 있습니다.