셰이더 배열 행렬 설정 함수
이 문서는 셰이더에서 행렬 값을 저장하는 배열을 설정하는 함수에 대해 설명합니다. 이 함수는 shader_set_uniform_matrix_array를 사용하여 셰이더 상수를 설정합니다.
함수 설명
shader_set_uniform_matrix_array 함수는 행렬 값의 배열을 보관할 셰이더 상수를 설정합니다. 이 함수를 사용하기 전에 shader_get_uniform 함수를 통해 상수의 "핸들"을 얻어야 하며, 배열은 부동 소수점 값의 배열로 초기화되어야 합니다. 각 16개의 부동 소수점 그룹은 4x4 행렬의 내용을 포함합니다.
셰이더에서는 다음과 같이 유니폼을 정의합니다:
uniform mat4 u_mTransforms[MAX_TRANSFORMS];
배열의 각 16개 요소는 유니폼 배열의 요소로 직접 접근할 수 있습니다. 즉, 첫 번째 16개 배열 요소는 u_mTransforms[0]에 해당하고, 다음 16개 요소는 u_mTransforms[1]에 해당합니다.
구문
shader_set_uniform_matrix_array(handle, array);
인수 설명
| 인수 | 유형 | 설명 |
|---|---|---|
| handle | 셰이더 유니폼 핸들 | 설정할 셰이더 상수의 핸들입니다. |
| array | 배열 | 이전에 초기화된 부동 소수점 값의 배열입니다. 길이는 16의 배수여야 합니다. 즉, number_of_matrices * 16이어야 합니다. |
반환값
- N/A
활용 예제
다음은 행렬 배열을 초기화하고 셰이더에 전송하는 방법을 보여주는 예제입니다.
max_transforms = 32;
arr_transform_matrices = array_create(max_transforms * 16);
var _arr_matrix = matrix_build_identity();
var i = 0;
repeat(max_transforms) {
array_copy(arr_transform_matrices, i * 16, _arr_matrix, 0, 16);
i++;
}
shader_set(sh_dynamic_batch);
shader_params = shader_get_uniform(sh_dynamic_batch, "u_mTransforms");
shader_set_uniform_matrix_array(shader_params, arr_transform_matrices);
vertex_submit(vb_batch, pr_trianglelist, texture);
shader_reset();
예제 설명
- 최대 변환 수를 정의하고 해당 수의 변환을 보관할 배열을 생성합니다.
- 단위 행렬을 배열에 복사하여 각 개별 행렬을 초기화합니다.
sh_dynamic_batch셰이더를 현재 셰이더로 설정하고,shader_get_uniform을 사용하여 유니폼의 핸들을 가져옵니다.shader_set_uniform_matrix_array를 호출하여 해당 유니폼의 값을 주어진 배열로 설정합니다.- 마지막으로,
vb_batch에 저장된 정점 버퍼를 제출합니다.