이 문서에서는 Khronos© 샘플 앱을 다운로드, 컴파일, 실행하여 Vulkan 그래픽 라이브러리를 시작하는 방법을 설명합니다.
기본 요건
시작하기 전에 적합한 하드웨어 및 플랫폼 버전이 준비되어 있어야 합니다. Vulkan을 지원하며 Android 7.0(Nougat), API 수준 24 이상을 실행하는 기기나 에뮬레이터를 사용해야 합니다.
Android 버전을 확인하려면 설정 메뉴로 이동하여 휴대전화 정보 > Android 버전을 선택하면 됩니다. 적합한 하드웨어 및 플랫폼 버전이 설치되어 있는 것이 확인되면 필요한 소프트웨어를 다운로드할 수 있습니다.
다운로드
시작하기 전에 먼저 여러 도구와 기타 소프트웨어를 다운로드해야 합니다. Windows 호스트에서는 도구 및 소스 코드에 심층적 파일 경로 계층 구조를 사용하지 않는 것이 좋습니다. 이렇게 하면 일부 Windows OS 버전에서 발생하는 파일 경로 제한을 해결할 수 있습니다.
- Android 스튜디오가 아직 없으면 다운로드합니다. Android 스튜디오에는 최신 Android SDK가 포함되어 있습니다.
- Android 스튜디오 내에서 NDK 및 CMake를 설치하거나 별도로 다운로드하여 설치합니다.
- Hello JNI 샘플을 빌드하고 실행하여 Android 스튜디오가 제대로 작동하는지 확인합니다.
- build.md에 나열된 호스트 플랫폼용 python3 및 기타 구성요소를 설치합니다.
가져오기
이 섹션에서는 Khronos© Vulkan© 샘플 저장소를 다운로드하고 Android Gradle 프로젝트를 생성한 후 Android 스튜디오 IDE를 사용하여 엽니다.
- 다음 환경 변수를 설정합니다.
export ANDROID_HOME=/path/to/sdk-directory export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/{your-ndk-version-dir}
- Android 빌드 스크립트를 생성하는 데 사용되는 $PATH에 CMake를 추가합니다.
export PATH=$PATH:$ANDROID_HOME/cmake/{your-cmake-version}/bin
- 다음과 같이 터미널을 열고 소스 코드를 개발 디렉터리에 다운로드합니다.
cd dev-directory git clone --recursive https://github.com/KhronosGroup/Vulkan-Samples.git
- Build.md의 다음 안내에 따라 Android 샘플 프로젝트를
생성합니다.
cd Vulkan-Samples ./scripts/generate.py android
- Android 스튜디오를 엽니다. File > Open을 선택하고
Vulkan-Samples/build/android_gradle/build.gradle
을 선택합니다. Android 스튜디오에서 프로젝트를 로드하고 나면 다음과 같이 표시됩니다.그림 1. Android 스튜디오 내 샘플 프로젝트
컴파일
이 저장소의 모든 샘플은 하나의 Android 프로젝트로 구성됩니다. 프로젝트를 컴파일하려면 다음 중 하나를 실행하세요.
- 소스만 컴파일하려면 메뉴 Build > Make Project를 사용하거나 Ctrl-F9 단축키를 입력합니다.
- 샘플 APK를 생성하려면 메뉴 Build > Build Bundle(s)/APK(s) > Build APK(s)를 선택합니다.
Android 스튜디오의 Build 창 안에 빌드 성공 메시지가 표시됩니다. 오류가 표시되면 오류를 수정하고 다시 컴파일합니다.
![스튜디오로 샘플 프로젝트 컴파일](https://developer.android.com/ndk/guides/images/vk-guide-compile-project.png?authuser=0000&hl=ko)
실행
샘플 프로젝트를 실행하기 전에 Android 스튜디오가 연결된 Vulkan 기기나 Android Emulator를 인식하는지 확인합니다. 다음과 같이 표시되어야 합니다.
![스튜디오에 테스트 기기 연결](https://developer.android.com/ndk/guides/images/vk-guide-test-device.png?authuser=0000&hl=ko)
프로젝트를 실행하려면 다음 단계를 따르세요.
- 메뉴 Run > Run vulkan_sample을 사용하거나 툴바에서 실행 버튼
을 클릭한 후 샘플이 설치되고 연결된 기기에서 시작될 때까지 기다립니다.
- 연결된 Android 기기에서 필요한 액세스 요청을 승인합니다.
- Allow access to manage all files를 사용 설정하고 화살표 뒤로 버튼을 탭하여 샘플 기본 시작 화면으로 돌아갑니다.
- 디스크 액세스를 허용합니다.
그림 4. 디스크 액세스 사용 설정
- 아래와 같은 샘플 기본 메뉴 화면이 표시됩니다.
그림 5. 샘플 기본 메뉴 - 샘플 목록을 살펴보고 실행할 몇 가지를 선택합니다.
Vulkan 개발이 처음이라면 'API' 샘플부터 시작해 보세요.
예를 들어 'Hello Triangle'을 탭하면 다음과 같은 렌더링된 삼각형이 표시됩니다.
그림 6. Hello Triangle 샘플
이제 테스트 기기에서 샘플을 실행하도록 개발 시스템이 설정되었습니다.
Vulkan 샘플은 데스크톱 및 모바일용 운영체제를 비롯하여 여러 운영체제용으로 개발되었습니다. Performance, Extensions, Tooling의 일부 샘플은 불안정하거나 기기에서 비정상 종료될 수 있습니다. 다음과 같은 다양한 이유 때문일 수 있습니다.
- Android용으로 설계되지 않은 특정 Vulkan 기능
- 지원되지 않는 Android OS 버전
- 하드웨어 플랫폼의 GPU 기능
알아보기
Vulkan 샘플의 자바 섹션은 NativeActivity 클래스에서 파생됩니다. 앱 생성, 시작, 중지, 소멸과 같은 일반적인 애플리케이션 수명 주기 이벤트를 C/C++ 코드에 전달합니다. 샘플의 C/C++ 섹션에는 런타임 하위 샘플 전환 기능을 구현하는 샘플 프레임워크가 있습니다. 매우 높은 수준에서 Android 시스템 이벤트/메시지는 다음 경로를 거쳐 샘플 앱의 Vulkan 코드에 도달합니다.
NativeSampleActivity
자바 섹션NativeSampleActivity
C/C++ 섹션android_native_glue
코드android_main
- 샘플 프레임워크
- 개별 하위 샘플 코드
android_main
은 NativeSampleActivity
와 앱 코드 간을 연결하며 이는 개발자가 샘플 코드를 따라가는 시작점이 될 수 있습니다. Vulkan 관련 소스에만 집중하고 싶다면 다음이 포함된 Vulkan_Samples\samples
에서 코드를 살펴보면 됩니다.
- 'api' 카테고리 샘플
- 'performance' 카테고리 샘플
- 'extensions' 카테고리 샘플
- 'tooling' 샘플
Vulkan_Samples\shaders
는 모든 셰이더의 공간입니다.
'API' 카테고리 샘플을 탐색하여 기본 Vulkan 사용법과 샘플 프레임워크를 알아볼 수 있습니다. 그런 다음 'Performance' 및 'Extensions' 카테고리 샘플로 진행하면 됩니다. 셰이더 코드의 경우 Android 스튜디오의 Project 뷰를 사용할 수 있습니다.
![삼각형 셰이더](https://developer.android.com/ndk/guides/images/vk-guide-shaders.png?authuser=0000&hl=ko)
추가 리소스
Vulkan API는 몇 가지 버전을 거쳤으며 계속 발전하고 있습니다. Vulkan 표준 위원회와 Vulkan 커뮤니티에서는 API의 사용법과 권장사항을 보여주는 다양한 Vulkan 머티리얼 세트를 만들었습니다. 다음 목록에는 Vulkan 애플리케이션 개발을 위한 리소스가 몇 가지 포함되어 있습니다.
Vulkan 사양. Khronos Group은 Vulkan 사양을 유지합니다. 전체 사양, 학습, 가이드, 튜토리얼은 Vulkan 홈페이지를 참고하세요.
유효성 검사 계층. 유효성 검사 계층은 애플리케이션 개발에 필수적입니다. 자세한 내용은 Android의 Vulkan 유효성 검사 계층 문서를 참고하세요.
Shaderc. NDK의 Shaderc 코드는 Shaderc 저장소의 다운스트림입니다. 사용 문서와 최신 버전 다운로드 안내는 셰이더 컴파일러를 참고하세요.