ห้องสมุดกราฟิก 3D ระดับต่ำข้ามแพลตฟอร์มที่ทันสมัยและกรอบการแสดงผล
เครื่องยนต์ Dialigent เป็นห้องสมุดกราฟิก API Abstraction กราฟิกที่มีน้ำหนักเบา API Abstraction และกรอบการเรนเดอร์ มันถูกออกแบบมาเพื่อใช้ประโยชน์อย่างเต็มที่จาก Direct3D12, Vulkan, Metal และ WebGPU ในขณะที่รองรับแพลตฟอร์มเก่าผ่าน Direct3D11, OpenGL, OpenGles และ WebGL เครื่องยนต์ที่ขยันหมั่นเพียรเปิดเผย API ส่วนหน้าทั่วไปและใช้ HLSL เป็นภาษาแรเงาสากลในทุกแพลตฟอร์มและการแสดงผลส่วนท้าย การเป็นตัวแทนของ Shader เฉพาะแพลตฟอร์ม (GLSL, MSL, DX Bytecode หรือ SPIRV) สามารถใช้กับ back-end ที่สอดคล้องกัน เครื่องยนต์มีจุดประสงค์เพื่อใช้เป็นระบบย่อยกราฟิกในเอ็นจิ้นเกมหรือแอปพลิเคชัน 3D อื่น ๆ มีการแจกจ่ายภายใต้ใบอนุญาต Apache 2.0 และใช้งานได้ฟรี
แพลตฟอร์ม | D3D11 | D3D12 | opengl/gles | Vulkan | โลหะ | WebGPU | สร้างสถานะ |
---|---|---|---|---|---|---|---|
![]() | - | ✔ 3 | ![]() | ||||
![]() | - | - | - | - | ![]() | ||
![]() | - | - | - | ✔ 3 | ![]() | ||
![]() | - | - | - | - | ![]() | ||
![]() | - | - | ✔ 1 | ✔ 2 | ✔ 3 | ![]() | |
![]() | - | - | ✔ 1 | ✔ 2 | - | ![]() | |
![]() | - | - | - | ✔ 1 | ✔ 2 | - | ![]() |
![]() | - | - | - | - | ![]() |
1 Vulkan API ไม่ได้รับการสนับสนุนบนแพลตฟอร์ม MacOS, iOS และ TVOS และต้องใช้การใช้งาน Vulkan Portability เช่น MoltenVK หรือ GFX-portability
2 พร้อมใช้งานภายใต้ใบอนุญาตเชิงพาณิชย์ - กรุณาติดต่อเราสำหรับรายละเอียด
3 ต้องการการใช้งานดั้งเดิมของ WebGPU ขอแนะนำให้ Dawn
#if defined(_WIN32)
... #elif defined(LINUX)
... #elif defined(ANDROID)
...#if defined(D3D11)
... #elif defined(D3D12)
... #elif defined(OPENGL)
...รุ่น API ระดับต่ำที่รองรับขั้นต่ำ:
นี่คือที่เก็บหลักที่มีสี่ submodules ในการรับที่เก็บและ submodules ทั้งหมดให้ใช้คำสั่งต่อไปนี้:
git clone --recursive https://github.com/DiligentGraphics/DiligentEngine.git
เมื่ออัปเดตที่เก็บที่มีอยู่อย่าลืมอัปเดต submodules ทั้งหมด:
git pull
git submodule update --recursive
นอกจากนี้ยังเป็นความคิดที่ดีที่จะเรียกใช้ CMake อีกครั้งและทำการสร้างใหม่ที่สะอาดหลังจากได้รับเวอร์ชันล่าสุด
ที่เก็บต้นแบบรวมถึง submodules ต่อไปนี้:
เครื่องยนต์ที่ขยันหมั่นเพียรใช้ CMake เป็นเครื่องมือสร้างข้ามแพลตฟอร์ม ในการเริ่มต้นใช้ CMake ให้ดาวน์โหลดรุ่นล่าสุด (3.20 หรือใหม่กว่านั้นเป็นสิ่งจำเป็น) สิ่งที่จำเป็นต้องมีการสร้างอีกอย่างคือ Python Interpreter (3.0 หรือใหม่กว่านั้นเป็นสิ่งจำเป็น) หากหลังจากทำตามคำแนะนำด้านล่างคุณมีปัญหาการสร้าง/เรียกใช้โปรดดูที่การแก้ไขปัญหา
สร้างข้อกำหนดเบื้องต้น:
.NET การสนับสนุนต้องใช้. NET SDK 6.0 หรือใหม่กว่า
ใช้เครื่องมือ CMake GUI หรือเครื่องมือบรรทัดคำสั่งเพื่อสร้างไฟล์บิลด์ ตัวอย่างเช่นในการสร้างโซลูชัน Visual Studio 2022 64 บิตและไฟล์โครงการในโฟลเดอร์ Build/Win64 นำทางไปยังโฟลเดอร์รูทของเอ็นจิ้นและเรียกใช้คำสั่งต่อไปนี้:
cmake -S . -B ./build/Win64 -G "Visual Studio 17 2022" -A x64
คุณสามารถสร้างโซลูชัน Win32 ที่กำหนดเป้าหมาย Win8.1 SDK โดยใช้คำสั่งต่อไปนี้:
cmake -D CMAKE_SYSTEM_VERSION=8.1 -S . -B ./build/Win64_8.1 -G "Visual Studio 17 2022" -A x64
หากคุณใช้ MINGW คุณสามารถสร้างไฟล์ Make โดยใช้คำสั่งด้านล่าง (โปรดทราบว่าฟังก์ชันการทำงานจะถูก จำกัด และ MINGW นั้นไม่ใช่วิธีที่แนะนำในการสร้างเครื่องยนต์):
cmake -S . -B ./build/MinGW -D CMAKE_BUILD_TYPE=Release -G "MinGW Makefiles"
ในการเปิดใช้งานเลเยอร์การตรวจสอบ Vulkan คุณจะต้องดาวน์โหลด Vulkan SDK และเพิ่มตัวแปรสภาพแวดล้อม VK_LAYER_PATH
ที่มีเส้นทางไปยังไดเรกทอรี bin ในโฟลเดอร์การติดตั้ง Vulkansdk
เปิดไฟล์ diligentEngine.sln ในโฟลเดอร์ Build/Win64 เลือกการกำหนดค่าและสร้างเครื่องยนต์ ตั้งค่าโครงการที่ต้องการเป็นโครงการเริ่มต้น (โดยค่าเริ่มต้นตัวดู GLTF จะถูกเลือก) และเรียกใช้
โดยค่าเริ่มต้นแอปพลิเคชันตัวอย่างและการสอนจะแสดงกล่องโต้ตอบการเลือกแบ็กเอนด์ ใช้ตัวเลือกบรรทัดคำสั่งต่อไปนี้เพื่อบังคับ D3D11, D3D12, OpenGL หรือโหมด Vulkan: -โหมด D3D11 , -โหมด D3D12 , -โหมด GL หรือ โหมด VK หากคุณต้องการเรียกใช้แอปพลิเคชันนอกสภาพแวดล้อม Visual Studio โฟลเดอร์ของแอปพลิเคชันจะต้องตั้งค่าเป็นไดเรกทอรีการทำงาน (สำหรับ Visual Studio สิ่งนี้จะถูกกำหนดค่าโดยอัตโนมัติโดย CMake) หรือคุณสามารถนำทางไปยังโฟลเดอร์บิลด์หรือติดตั้งโฟลเดอร์และเรียกใช้ปฏิบัติการได้จากที่นั่น
ในการสร้างไฟล์บิลด์สำหรับแพลตฟอร์ม Universal Windows คุณต้องกำหนดตัวแปร CMake สองตัวต่อไปนี้:
CMAKE_SYSTEM_NAME=WindowsStore
CMAKE_SYSTEM_VERSION=< Windows Version >
ตัวอย่างเช่นในการสร้างโซลูชัน Visual Studio 2022 64 บิตและไฟล์โครงการในโฟลเดอร์ Build/UWP64 ให้เรียกใช้คำสั่งต่อไปนี้จากโฟลเดอร์รูทของเอ็นจิ้น:
cmake -D CMAKE_SYSTEM_NAME=WindowsStore -D CMAKE_SYSTEM_VERSION=10.0 -S . -B ./build/UWP64 -G "Visual Studio 17 2022" -A x64
ตั้งค่าโครงการที่ต้องการเป็นโครงการเริ่มต้น (โดยค่าเริ่มต้นตัวดู GLTF จะถูกเลือก) และเรียกใช้
โดยค่าเริ่มต้นแอปพลิเคชันจะทำงานในโหมด D3D12 คุณสามารถเลือก D3D11 หรือ D3D12 โดยใช้ตัวเลือกบรรทัดคำสั่งต่อไปนี้: -โหมด D3D11 , -โหมด D3D12
หมายเหตุ: เป็นไปได้ที่จะสร้างโซลูชันที่กำหนดเป้าหมาย Windows 8.1 โดยการกำหนดตัวแปร CMAKE_SYSTEM_VERSION = 8.1 CMAKE ตัวแปร แต่จะไม่สามารถสร้างได้เนื่องจากจะใช้ชุดเครื่องมือ Visual Studio 2013 (V120) ที่ขาดการสนับสนุน C ++ 14 ที่เหมาะสม
สภาพแวดล้อม Linux ของคุณจะต้องมีการตั้งค่าสำหรับการพัฒนา C ++ หากเป็นอยู่แล้วตรวจสอบให้แน่ใจว่าเครื่องมือ C ++ ของคุณทันสมัยเป็นเครื่องยนต์ที่ขยันหมั่นเพียรใช้คุณสมบัติ C ++ ที่ทันสมัย (แนะนำให้ Clang 10 หรือใหม่กว่า)
คุณอาจต้องติดตั้งแพ็คเกจต่อไปนี้:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
sudo apt-get install cmake
sudo apt-get install libx11-dev
sudo apt-get install mesa-common-dev
sudo apt-get install mesa-utils
sudo apt-get install libgl-dev
sudo apt-get install python3-distutils
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libxrandr-dev
sudo apt-get install libxinerama-dev
sudo apt-get install libxcursor-dev
sudo apt-get install libxi-dev
ในการกำหนดค่า Vulkan คุณจะต้อง:
ในการสร้างไฟล์ Make สำหรับการกำหนดค่าการดีบักให้เรียกใช้คำสั่ง cmake ต่อไปนี้จากโฟลเดอร์รูทของเอ็นจิ้น:
cmake -S . -B ./build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE="Debug"
ในการสร้างเครื่องยนต์ให้เรียกใช้คำสั่งต่อไปนี้:
cmake --build ./build
ใน Ubuntu 23 และใหม่กว่ามันอาจผิดพลาดหากคุณไม่ได้ติดตั้ง LibtInfo5 คุณจะต้องเพิ่ม
โฟลเดอร์รูทของเอ็นจิ้นมีไฟล์การตั้งค่ารหัส Visual Studio ที่กำหนดค่า IDE เพื่อสร้างเครื่องยนต์ คุณสามารถเรียกใช้แอปพลิเคชันโดยตรงจาก IDE ในการเรียกใช้แอปพลิเคชันจากบรรทัดคำสั่งโฟลเดอร์สินทรัพย์ของแอปจะต้องเป็นไดเรกทอรีปัจจุบัน
โปรดตรวจสอบให้แน่ใจว่าเครื่องของคุณได้รับการตั้งค่าสำหรับการพัฒนา Android ดาวน์โหลด Android Studio ติดตั้งและกำหนดค่า NDK และ CMAKE และเครื่องมืออื่น ๆ ที่จำเป็น จำเป็นต้องใช้ NDK R24 หรือใหม่กว่า หากคุณไม่ได้ใช้เวอร์ชัน CMake ที่รวมกับ Android Studio ตรวจสอบให้แน่ใจว่าไฟล์บิลด์ของคุณได้รับการกำหนดค่าอย่างเหมาะสม ในการตรวจสอบว่าสภาพแวดล้อมของคุณได้รับการตั้งค่าอย่างถูกต้องลองสร้างตัวอย่างกาน้ำชาเช่นเดียวกับการสอน Android Vulkan
เปิดโฟลเดอร์ Dialigentsamples/Android พร้อม Android Studio เพื่อสร้างและเรียกใช้บทช่วยสอนและตัวอย่างบน Android
โดยค่าเริ่มต้นแอปพลิเคชันจะทำงานในโหมด Vulkan หากต้องการเรียกใช้ในโหมด Vulkan ให้เพิ่ม Flag Launch ต่อไปนี้: --es mode gles
(ใน Android Studio ให้ไปที่เมนู Run-> Edit Configurations)
ข้อกำหนดเบื้องต้น:
หลังจากที่คุณโคลน repo ให้เรียกใช้คำสั่งต่อไปนี้จากโฟลเดอร์รูทของเอ็นจิ้นเพื่อสร้างโครงการ XCode:
cmake -S . -B ./build/MacOS -G "Xcode"
โครงการจะอยู่ในโฟลเดอร์ build/MacOS
โปรดทราบว่าหาก CMake ไม่สามารถค้นหาคอมไพเลอร์ได้คุณอาจต้องเรียกใช้คำสั่งต่อไปนี้:
sudo xcode-select --reset
โดยค่าเริ่มต้นไม่มีการใช้งาน Vulkan บน MacOS เครื่องยนต์ที่ขยันโหลด Vulkan แบบไดนามิกและสามารถใช้การใช้งาน Vulkan Portability เช่น moltenvk หรือ GFX-portability ติดตั้ง Vulkansdk และตรวจสอบให้แน่ใจว่าระบบของคุณได้รับการกำหนดค่าอย่างถูกต้องตามที่อธิบายไว้ที่นี่ โดยเฉพาะอย่างยิ่งคุณอาจต้องกำหนดตัวแปรสภาพแวดล้อมต่อไปนี้ (สมมติว่า Vulkan SDK ติดตั้งที่ /Users/MyName/VulkanSDK/1.3.290.0
และคุณต้องการใช้ moltenvk):
export VULKAN_SDK=/Users/MyName/VulkanSDK/1.3.290.0/macOS
export PATH=$VULKAN_SDK/bin:$PATH
export DYLD_LIBRARY_PATH=$VULKAN_SDK/lib:$DYLD_LIBRARY_PATH
export VK_ADD_LAYER_PATH=$VULKAN_SDK/share/vulkan/explicit_layer.d
export VK_ICD_FILENAMES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json
export VK_DRIVER_FILES=$VULKAN_SDK/share/vulkan/icd.d/MoltenVK_icd.json
โปรดทราบว่าตัวแปรสภาพแวดล้อมที่ตั้งอยู่ในเชลล์จะไม่เห็นโดยแอปพลิเคชันที่เปิดตัวจาก Launchpad หรือ Desktop GUI อื่น ๆ ดังนั้นเพื่อให้แน่ใจว่าแอปพลิเคชันค้นหาไลบรารี Vulkan จึงต้องเริ่มต้นจากบรรทัดคำสั่ง เนื่องจากเหตุผลเดียวกันไฟล์โครงการ XCode ควรเปิดจากเชลล์โดยใช้คำสั่ง open
ด้วย Xcode Version 7 และใหม่กว่าพฤติกรรมนี้อาจต้องเปิดใช้งานก่อนโดยใช้คำสั่งต่อไปนี้:
defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
โปรดดูหน้านี้สำหรับรายละเอียดเพิ่มเติม
DYLD_LIBRARY_PATH
และ LD_LIBRARY_PATH
จะถูกละเว้นใน MACOS เว้นแต่ว่าการป้องกันความสมบูรณ์ของระบบจะถูกปิดใช้งาน (ซึ่งไม่แนะนำโดยทั่วไป) เพื่อให้ผู้ดำเนินการค้นหาห้องสมุด Vulkan ต้องอยู่ใน RPATH หากตัวแปรสภาพแวดล้อม VULKAN_SDK
ถูกตั้งค่าและชี้ไปยังตำแหน่งที่ถูกต้องเครื่องยนต์ที่ขยันจะกำหนดค่า RPATH สำหรับแอปพลิเคชันทั้งหมดโดยอัตโนมัติ
Vulkan SDK รุ่นล่าสุดที่ทดสอบแล้ว: 1.3.290.0
ข้อกำหนดเบื้องต้น:
เรียกใช้คำสั่งด้านล่างจากโฟลเดอร์รูทของเอ็นจิ้นเพื่อสร้างโครงการ XCode ที่กำหนดค่าสำหรับ iOS Build:
cmake -S . -B ./build/iOS -DCMAKE_SYSTEM_NAME=iOS -G "Xcode"
หากจำเป็นคุณสามารถจัดเตรียมเป้าหมายการปรับใช้ iOS (13.0 หรือใหม่กว่า) เช่นเดียวกับพารามิเตอร์อื่น ๆ เช่น:
cmake -S . -B ./build/iOS -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=13.0 -G "Xcode"
iphonesimulator
นอกจากนี้คุณยังสามารถใช้ตัวแปร CMAKE_OSX_ARCHITECTURES
เพื่อระบุสถาปัตยกรรมเป้าหมายเช่น:
cmake -S . -B ./build/iOSSim -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=arm64 -G "Xcode"
เปิดไฟล์โครงการ Xcode ในโฟลเดอร์ build/IOS
และสร้างเครื่องยนต์ ในการเรียกใช้แอปพลิเคชันบนอุปกรณ์ iOS คุณจะต้องตั้งทีมพัฒนาที่เหมาะสมในการตั้งค่าโครงการ
หากต้องการเปิดใช้งาน Vulkan บน iOS ให้ดาวน์โหลดและติดตั้ง Vulkansdk ไม่มีตัวโหลด Vulkan บน iOS และการเชื่อมโยงเครื่องยนต์ที่ขยันขันแข็งโดยตรงกับ moltenvk xcframework (ดูคู่มือติดตั้ง moltenvk) ที่ใช้ Vulkan บนโลหะ ในการเปิดใช้งาน Vulkan ในเครื่องยนต์ที่ขยันขันแข็งบน iOS ให้ระบุเส้นทางไปยัง Vulkan SDK เมื่อใช้งาน cmake ตัวอย่างเช่น (สมมติว่า Vulkan SDK ติดตั้งที่ /Users/MyName/VulkanSDK/1.3.290.0
):
cmake -DCMAKE_SYSTEM_NAME=iOS -DVULKAN_SDK=/Users/MyName/VulkanSDK/1.3.290.0 -S . -B ./build/iOS -G "Xcode"
โดยค่าเริ่มต้นเครื่องยนต์จะเชื่อมโยงกับ moltenvk xcframework ที่อยู่ใน Vulkan SDK หากสิ่งนี้ไม่ต้องการหรือแอปพลิเคชันต้องการใช้ไลบรารีที่เฉพาะเจาะจงก็สามารถให้เส้นทางเต็มรูปแบบไปยังไลบรารีผ่านตัวแปร MOLTENVK_LIBRARY
CMake
อ้างถึงคู่มือผู้ใช้ Moltenvk สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้ง moltenvk และการใช้งาน
Vulkan SDK รุ่นล่าสุดที่ทดสอบแล้ว: 1.3.290.0
สร้างข้อกำหนดเบื้องต้น:
เพื่อเปิดใช้งานเส้นทางและตัวแปรสภาพแวดล้อมอื่น ๆ ในเทอร์มินัลปัจจุบัน
source ${PATH_TO_EMSDK} /emsdk/emsdk_env.sh
${PATH_TO_EMSDK}/emsdk/emsdk_env.bat
แทน source ${PATH_TO_EMSDK}/emsdk/emsdk_env.sh
ในการสร้างโครงการให้เรียกใช้คำสั่ง cmake ต่อไปนี้จากโฟลเดอร์รูทของเอ็นจิ้น:
emcmake cmake -S . -B ./build/Emscripten -G "Ninja"
ในการสร้างเครื่องยนต์ให้เรียกใช้คำสั่งต่อไปนี้:
cmake --build ./build/Emscripten
ในการทดสอบแอปพลิเคชัน Emscripten ให้เรียกใช้เว็บเซิร์ฟเวอร์พื้นฐาน
cd ./build/Emscripten
python https_server.py
เปิดเบราว์เซอร์และนำทางไปยัง http://localhost
ตัวอย่างเช่นการสอน Hello Triangle จะมีให้ที่
http://localhost/DiligentSamples/Tutorials/Tutorial01_HelloTriangle/Tutorial01_HelloTriangle.html
ในการเข้าถึงเซิร์ฟเวอร์จากคอมพิวเตอร์เครื่องอื่นบนเครือข่ายท้องถิ่นให้ใช้เซิร์ฟเวอร์ HTTPS หากต้องการเปิดใช้งานสิ่งนี้ก่อนอื่นให้ติดตั้งโมดูล cryptography
คุณสามารถทำได้โดยเรียกใช้คำสั่งต่อไปนี้:
pip install cryptography
ในการเริ่มต้นเซิร์ฟเวอร์ HTTPS ให้ใช้คำสั่งต่อไปนี้:
python https_server.py --mode=https
ใช้โปรโตคอล HTTPS เพื่อเปิดหน้า ตัวอย่างเช่น:
https://localhost/DiligentSamples/Tutorials/Tutorial01_HelloTriangle/Tutorial01_HelloTriangle.html
เมื่อใช้เซิร์ฟเวอร์ HTTPS ซึ่งแตกต่างจากเซิร์ฟเวอร์ HTTP คุณอาจพบข้อผิดพลาดต่อไปนี้เมื่อโหลดหน้า: net::ERR_CERT_AUTHORITY_INVALID
มีสองวิธีในการแก้ไขปัญหานี้:
Advanced
จากนั้นเลือก Proceed to localhost (unsafe)
python https_server.py --mode=https --register
เราใช้พอร์ตเริ่มต้นสำหรับโปรโตคอล HTTP/HTTPS, 80
และ 443
ตามลำดับ หากคุณมีเซิร์ฟเวอร์ที่ทำงานบนพอร์ตเหล่านั้นอยู่แล้วคุณสามารถระบุหมายเลขพอร์ตอื่นโดยใช้อาร์กิวเมนต์ --port
และรวมหมายเลขพอร์ตที่เกี่ยวข้องใน URL หลังจากที่อยู่ IP ตัวอย่างเช่น:
http://localhost:${YOUR_PORT}/DiligentSamples/Tutorials/Tutorial01_HelloTriangle/Tutorial01_HelloTriangle.html
Diligent มีโครงสร้างแบบแยกส่วนดังนั้นสำหรับโครงการของคุณคุณสามารถใช้ submodules เหล่านั้นที่ใช้ฟังก์ชันการทำงานที่ต้องการเท่านั้น แผนภาพด้านล่างแสดงการพึ่งพาระหว่างโมดูล
Core
|
+------>Tools----------.
| | |
| V |
+------->FX---------. |
| | |
| V V
'----------------->Samples
อย่าลืมที่จะเริ่มต้น submodules ซ้ำหากคุณกำลังเพิ่ม repos ที่ขยันขันแข็งเป็น submodules ในโครงการของคุณ
หากโครงการของคุณใช้ CMake การเพิ่มเครื่องยนต์ที่ขยันต้องใช้รหัสเพียงไม่กี่บรรทัด สมมติว่าโครงสร้างไดเรกทอรีมีลักษณะเช่นนี้:
|
+-DiligentCore
+-HelloDiligent.cpp
จากนั้นขั้นตอนต่อไปนี้จะต้องทำ:
add_subdirectory(DiligentCore)
ด้านล่างเป็นตัวอย่างของไฟล์ cmake:
cmake_minimum_required ( VERSION 3.6)
project (HelloDiligent CXX)
add_subdirectory (DiligentCore)
add_executable (HelloDiligent WIN32 HelloDiligent.cpp)
target_compile_options (HelloDiligent PRIVATE -DUNICODE)
target_link_libraries (HelloDiligent
PRIVATE
Diligent-GraphicsEngineD3D11-shared
Diligent-GraphicsEngineOpenGL-shared
Diligent-GraphicsEngineD3D12-shared
Diligent-GraphicsEngineVk-shared
)
copy_required_dlls(HelloDiligent)
copy_required_dlls()
เป็นฟังก์ชั่นความสะดวกสบายที่คัดลอกไลบรารีที่ใช้ร่วมกันถัดจากปฏิบัติการเพื่อให้ระบบสามารถค้นหาและโหลดได้ โปรดดูที่การสอนการเริ่มต้นใช้งานสำหรับ Windows และ Linux
บนแพลตฟอร์มส่วนใหญ่ไลบรารีเครื่องยนต์หลักถูกสร้างขึ้นในทั้งรุ่นคงที่และแบบไดนามิก (ตัวอย่างเช่น Diligent-GraphicsEngineD3D12-static
และ Diligent-GraphicsEngineD3D12-shared
) คุณสามารถเลือกเวอร์ชันที่จะลิงก์ด้วยการเปลี่ยนชื่อเป้าหมายในคำสั่ง target_link_libraries()
cmake เมื่อเชื่อมโยงกับไลบรารีไดนามิกมาโคร ENGINE_DLL
จะถูกกำหนดและไลบรารีจะต้องโหลดเมื่อรันไทม์ ตัวอย่างเช่นสำหรับแบ็กเอนด์ Direct3D12:
# if ENGINE_DLL
// Load the dll and import GetEngineFactoryD3D12() function
auto GetEngineFactoryD3D12 = LoadGraphicsEngineD3D12();
# endif
auto * pFactoryD3D12 = GetEngineFactoryD3D12();
เมื่อใช้การเชื่อมโยงแบบคงที่มาโคร ENGINE_DLL
จะไม่ถูกกำหนดและฟังก์ชั่น GetEngineFactoryD3D12
จะเชื่อมโยงแบบคงที่กับการดำเนินการ
ไฟล์ SampleApp.cpp ให้ตัวอย่างของวิธีการเริ่มต้นเครื่องยนต์บนแพลตฟอร์มที่แตกต่างกันโดยใช้การเชื่อมโยงแบบคงที่หรือแบบไดนามิก
คุณสามารถใช้ FetchContent เพื่อดาวน์โหลดโมดูลเครื่องยนต์ที่ขยัน ข้อแม้เพียงอย่างเดียวคือคุณต้องระบุไดเรกทอรีต้นฉบับสำหรับแต่ละโมดูลให้เหมือนกับชื่อโมดูลเพื่อให้สามารถพบไฟล์ส่วนหัวได้ ด้านล่างเป็นตัวอย่างของไฟล์ cmake ที่ใช้ fetchContent:
cmake_minimum_required ( VERSION 3.6)
project (HelloDiligent CXX)
include (FetchContent)
FetchContent_Declare(
DiligentCore
GIT_REPOSITORY https://github.com/DiligentGraphics/DiligentCore.git
SOURCE_DIR _deps/DiligentCore
)
FetchContent_Declare(
DiligentTools
GIT_REPOSITORY https://github.com/DiligentGraphics/DiligentTools.git
SOURCE_DIR _deps/DiligentTools
)
FetchContent_Declare(
DiligentFX
GIT_REPOSITORY https://github.com/DiligentGraphics/DiligentFX.git
SOURCE_DIR _deps/DiligentFX
)
FetchContent_MakeAvailable(DiligentCore DiligentTools DiligentFX)
add_executable (HelloDiligent WIN32 HelloDiligent.cpp)
target_include_directories (HelloDiligent
PRIVATE
${diligentcore_SOURCE_DIR}
${diligenttools_SOURCE_DIR}
${diligentfx_SOURCE_DIR}
)
target_compile_definitions (HelloDiligent PRIVATE UNICODE)
target_link_libraries (HelloDiligent
PRIVATE
Diligent-BuildSettings
Diligent-GraphicsEngineD3D11-shared
Diligent-GraphicsEngineD3D12-shared
Diligent-GraphicsEngineOpenGL-shared
Diligent-GraphicsEngineVk-shared
DiligentFX
)
copy_required_dlls(HelloDiligent)
หากโครงการของคุณไม่ได้ใช้ CMAKE ขอแนะนำให้สร้างห้องสมุดด้วย CMAKE และเพิ่มลงในระบบการสร้างของคุณ คุณสามารถดาวน์โหลดสิ่งประดิษฐ์บิลด์ล่าสุดจาก GitHub
ไดเรกทอรีการติดตั้ง CMake ทั่วโลกถูกควบคุมโดยตัวแปร CMAKE_INTALL_PREFIX โปรดทราบว่ามันเป็นค่าเริ่มต้นเป็น /usr/local
บนไฟล์ UNIX และ c:/Program Files/${PROJECT_NAME}
บน Windows ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ ใช้ -D CMAKE_INSTALL_PREFIX=install
เพื่อใช้โฟลเดอร์ install
ในพื้นที่แทน:
cmake -S . -B ./build/Win64 -D CMAKE_INSTALL_PREFIX=install -G "Visual Studio 17 2022" -A x64
ในการติดตั้งไลบรารีและไฟล์ส่วนหัวให้เรียกใช้คำสั่ง cmake ต่อไปนี้จากโฟลเดอร์บิลด์:
cmake --build . --target install
ไดเรกทอรีการติดตั้ง DiligentCore จะมีทุกอย่างที่จำเป็นในการรวมเครื่องยนต์:
วิธีที่ง่ายกว่าคือการเชื่อมโยงกับไลบรารีแบบไดนามิก เมื่อเชื่อมโยงแบบคงที่คุณจะต้องแสดงรายการ diligentcore เช่นเดียวกับไลบรารีของบุคคลที่สามทั้งหมดที่ใช้โดยเครื่องยนต์ นอกจากนั้นคุณจะต้องระบุไลบรารีระบบเฉพาะแพลตฟอร์ม ตัวอย่างเช่นสำหรับแพลตฟอร์ม Windows รายการไลบรารีโครงการของคุณจะต้องเชื่อมโยงกับอาจมีลักษณะเช่นนี้:
DiligentCore.lib glslang.lib HLSL.lib OGLCompiler.lib OSDependent.lib spirv-cross-core.lib SPIRV.lib SPIRV-Tools-opt.lib SPIRV-Tools.lib glew-static.lib GenericCodeGen.lib MachineIndependent.lib dxgi.lib d3d11.lib d3d12.lib d3dcompiler.lib opengl32.lib
ส่วนหัวของเครื่องยนต์ขยันต้องใช้หนึ่งในแมโครแพลตฟอร์มต่อไปนี้ที่จะกำหนดเป็น 1
: PLATFORM_WIN32
, PLATFORM_UNIVERSAL_WINDOWS
, PLATFORM_ANDROID
, PLATFORM_LINUX
, PLATFORM_MACOS
, PLATFORM_IOS
คุณสามารถควบคุมส่วนประกอบของเครื่องยนต์ที่คุณต้องการติดตั้งโดยใช้ตัวเลือก cmake ต่อไปนี้: DILIGENT_INSTALL_CORE
, DILIGENT_INSTALL_FX
, DILIGENT_INSTALL_SAMPLES
และ DILIGENT_INSTALL_TOOLS
อีกวิธีหนึ่งในการรวมเครื่องยนต์คือการสร้างไฟล์บิลด์ (เช่นโครงการ Visual Studio) และเพิ่มลงในระบบการสร้างของคุณ สร้างการปรับแต่งที่อธิบายไว้ด้านล่างสามารถช่วยปรับแต่งการตั้งค่าสำหรับความต้องการเฉพาะของคุณ
ตัวเลือก CMake ที่มีอยู่สรุปไว้ในตารางด้านล่าง:
ตัวเลือก | ค่าเริ่มต้น | คำอธิบาย |
---|---|---|
DILIGENT_NO_DIRECT3D11 | เลขที่ | อย่าสร้างแบ็กเอนด์ Direct3d11 |
DILIGENT_NO_DIRECT3D12 | เลขที่ | อย่าสร้างแบ็กเอนด์ Direct3d12 |
DILIGENT_NO_OPENGL | เลขที่ | อย่าสร้างแบ็กเอนด์ OpenGL |
DILIGENT_NO_VULKAN | เลขที่ | อย่าสร้างแบ็กเอนด์ Vulkan |
DILIGENT_NO_METAL | เลขที่ | อย่าสร้างแบ็กเอนด์โลหะ |
DILIGENT_NO_WEBGPU | เลขที่ | อย่าสร้างแบ็กเอนด์ WebGPU |
DILIGENT_NO_ARCHIVER | เลขที่ | อย่าสร้าง Archiver |
DILIGENT_NO_RENDER_STATE_PACKAGER | เลขที่ | อย่าสร้างเครื่องมือ Packager สถานะเรนเดอร์ |
DILIGENT_ENABLE_DRACO | เลขที่ | เปิดใช้งานการสนับสนุนการบีบอัด Draco ในตัวโหลด GLTF |
DILIGENT_USE_RAPIDJSON | เลขที่ | ใช้ตัวแยกวิเคราะห์ Rapidjson ในตัวโหลด GLTF |
DILIGENT_BUILD_TOOLS | ใช่ | สร้างโมดูลเครื่องมือ |
DILIGENT_BUILD_FX | ใช่ | สร้างโมดูล FX |
DILIGENT_BUILD_SAMPLES | ใช่ | สร้างโมดูลตัวอย่าง |
DILIGENT_BUILD_SAMPLE_BASE_ONLY | เลขที่ | สร้างโครงการ SampleBase เท่านั้นและไม่มีตัวอย่าง/บทเรียนอื่น ๆ |
DILIGENT_BUILD_TESTS | เลขที่ | สร้างการทดสอบหน่วย |
DILIGENT_NO_GLSLANG | เลขที่ | อย่าสร้าง glslang และ spriv-tools |
DILIGENT_NO_HLSL | เลขที่ | ปิดการใช้งานการสนับสนุน HLSL ในแบ็กเอนด์ที่ไม่ใช่ทิศทาง 3D |
DILIGENT_NO_FORMAT_VALIDATION | ใช่ | ปิดใช้งานการตรวจสอบการจัดรูปแบบการจัดรูปแบบซอร์สโค้ด |
DILIGENT_LOAD_PIX_EVENT_RUNTIME | เลขที่ | เปิดใช้งานการสนับสนุนกิจกรรม PIX |
DILIGENT_NVAPI_PATH | เส้นทางสู่ nvapi sdk | |
DILIGENT_INSTALL_CORE | ใช่ | ติดตั้งโมดูลหลัก |
DILIGENT_INSTALL_TOOLS | ใช่ | ติดตั้งโมดูลเครื่องมือ |
DILIGENT_INSTALL_FX | ใช่ | ติดตั้งโมดูล FX |
DILIGENT_INSTALL_SAMPLES | ใช่ | ติดตั้งโมดูลตัวอย่าง |
DILIGENT_INSTALL_PDB | เลขที่ | ติดตั้งฐานข้อมูลการดีบักโปรแกรม |
DILIGENT_DEAR_IMGUI_PATH | เส้นทางเสริมไปยังโครงการ Dear Imgui ที่ผู้ใช้มอบให้ | |
DILIGENT_ARGS_DIR | เส้นทางเสริมไปยังโครงการ Args ที่ผู้ใช้ให้ | |
DILIGENT_NUKLEAR_DIR | เส้นทางเสริมไปยังโครงการ Nuklear ที่ผู้ใช้ให้ | |
DILIGENT_MSVC_COMPILE_OPTIONS | ตัวเลือกการรวบรวม MSVC เพิ่มเติมสำหรับการกำหนดค่าทั้งหมด | |
DILIGENT_MSVC_DEBUG_COMPILE_OPTIONS | ตัวเลือกการรวบรวม MSVC เพิ่มเติมสำหรับการกำหนดค่าการดีบัก | |
DILIGENT_MSVC_RELEASE_COMPILE_OPTIONS | /gl /arch: avx2 | ตัวเลือกการรวบรวม MSVC เพิ่มเติมสำหรับการกำหนดค่าการเปิดตัว |
DILIGENT_CLANG_COMPILE_OPTIONS | ตัวเลือกการรวบรวมข้อมูลเพิ่มเติมสำหรับการกำหนดค่าทั้งหมด | |
DILIGENT_CLANG_DEBUG_COMPILE_OPTIONS | ตัวเลือกการรวบรวมเสียงดังเพิ่มเติมสำหรับการกำหนดค่าการดีบัก | |
DILIGENT_CLANG_RELEASE_COMPILE_OPTIONS | -MAVX2 | ตัวเลือกการรวบรวมข้อมูลเพิ่มเติมสำหรับการกำหนดค่าการเปิดตัว |
DILIGENT_USD_PATH | Path ไปยังโฟลเดอร์การติดตั้ง USD |
โดยค่าเริ่มต้นแบ็คเอนด์ทั้งหมดที่มีอยู่บนแพลตฟอร์มปัจจุบันจะถูกสร้างขึ้น ในการปิดใช้งาน back-end ที่เฉพาะเจาะจงให้ใช้ตัวเลือกต่อไปนี้: DILIGENT_NO_DIRECT3D11
, DILIGENT_NO_DIRECT3D12
, DILIGENT_NO_OPENGL
, DILIGENT_NO_VULKAN
, DILIGENT_NO_METAL
, DILIGENT_NO_WEBGPU
แบ็กเอนด์ WebGPU ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อสร้างเว็บ หากต้องการเปิดใช้งานบนแพลตฟอร์มอื่นให้ใช้ DILIGENT_NO_WEBGPU=OFF
ตัวเลือกสามารถตั้งค่าผ่าน CMake UI หรือจากบรรทัดคำสั่งดังตัวอย่างด้านล่าง:
cmake -D DILIGENT_NO_DIRECT3D11=TRUE -S . -B ./build/Win64 -G "Visual Studio 17 2022" -A x64
นอกจากนี้ส่วนประกอบของเครื่องยนต์แต่ละตัวสามารถเปิดใช้งานหรือปิดใช้งานได้โดยใช้ตัวเลือกต่อไปนี้: DILIGENT_BUILD_TOOLS
, DILIGENT_BUILD_FX
, DILIGENT_BUILD_SAMPLES
หากคุณต้องการสร้างโครงการ SampleBase
เท่านั้นคุณสามารถใช้ตัวเลือก DILIGENT_BUILD_SAMPLE_BASE_ONLY
โดยค่าเริ่มต้นของ Vulkan back-end เชื่อมโยงกับ Glslang ที่ช่วยให้การรวบรวม HLSL และ GLSL Shaders ไปยัง SPIRV ในเวลาทำงาน หากไม่จำเป็นต้องมีการรวบรวมรันไทม์ GLSLANG สามารถปิดใช้งานได้ด้วยตัวเลือก DILIGENT_NO_GLSLANG
CMAKE นอกจากนี้การรองรับ HLSL ในแบ็กเอนด์ที่ไม่ใช่ทิศทาง 3D สามารถปิดใช้งานได้ด้วยตัวเลือก DILIGENT_NO_HLSL
การเปิดใช้งานตัวเลือกจะช่วยลดขนาดของ Binararies Back-end OpenGL และ OpenGL ซึ่งอาจมีความสำคัญอย่างยิ่งสำหรับแอปพลิเคชันมือถือ
เครื่องยนต์ที่ขยันหมั่นเพียรใช้รูปแบบเสียงดังเพื่อให้แน่ใจว่าการจัดรูปแบบที่สอดคล้องกันตลอดฐานรหัส การตรวจสอบความถูกต้องสามารถปิดใช้งานได้โดยใช้ตัวเลือก cmake DILIGENT_NO_FORMAT_VALIDATION
cmake โปรดทราบว่าคำขอดึงใด ๆ จะล้มเหลวหากพบปัญหาการจัดรูปแบบ
เครื่องยนต์ที่ขยันหมั่นเพียรใช้การตรวจสอบอย่างกว้างขวางซึ่งเปิดใช้งานเสมอในการดีบักบิลด์ การตรวจสอบบางส่วนอาจเปิดใช้งานในการกำหนดค่าการเปิดตัวโดยการตั้งค่าตัวเลือก cmake DILIGENT_DEVELOPMENT
หากต้องการเปิดใช้งานการสนับสนุนกิจกรรม PIX ให้ตั้งค่า Flag CMake DILIGENT_LOAD_PIX_EVENT_RUNTIME
ในการเปิดใช้งานคุณสมบัติขั้นสูงบางอย่างบน Nvidia GPUs (เช่นการสนับสนุนทางอ้อมหลายครั้งใน Direct3D11) ให้ดาวน์โหลด NVAPI และตั้งค่าตัวแปร DILIGENT_NVAPI_PATH
CMAKE
เครื่องยนต์ที่ขยันหมั่นเพียรใช้ห้องสมุดบุคคลที่สามหลายแห่ง หากไฟล์ cmake ของแอปพลิเคชันกำหนดไลบรารีใด ๆ เหล่านั้นอย่างขยันขันแข็งจะใช้เป้าหมายที่มีอยู่ แอปพลิเคชันจะต้องตรวจสอบให้แน่ใจว่าการตั้งค่าการสร้างนั้นเข้ากันได้กับความขยัน
เอ็นจิ้นขยันช่วยให้ลูกค้าสามารถปรับแต่งการตั้งค่าการสร้างโดยการจัดเตรียมไฟล์สคริปต์การกำหนดค่าที่กำหนดฟังก์ชั่น CMake ที่เป็นตัวเลือกต่อไปนี้:
custom_configure_build()
- กำหนดคุณสมบัติการสร้างทั่วโลกเช่นการกำหนดค่าบิลcustom_pre_configure_target()
- กำหนดการตั้งค่าที่กำหนดเองสำหรับทุกเป้าหมายในการสร้างและเรียกก่อนที่ระบบบิลด์ของเครื่องยนต์จะเริ่มกำหนดค่าเป้าหมายcustom_post_configure_target()
- เรียกว่าหลังจากระบบบิลด์ของเครื่องยนต์ได้กำหนดค่าเป้าหมายเพื่อให้คุณสมบัติการแทนที่ไคลเอ็นต์ที่กำหนดโดยเครื่องยนต์ เส้นทางไปยังสคริปต์การกำหนดค่าควรได้รับผ่านตัวแปร BUILD_CONFIGURATION_FILE
เมื่อเรียกใช้ cmake และจะต้องสัมพันธ์กับโฟลเดอร์รูท CMake ตัวอย่างเช่น:
cmake -D BUILD_CONFIGURATION_FILE=BuildConfig.cmake -S . -B ./build/Win64 -G "Visual Studio 17 2022" -A x64
หากกำหนดฟังก์ชั่น custom_configure_build()
จะถูกเรียกก่อนที่จะมีการเพิ่มเป้าหมายการสร้างใด ๆ โดยค่าเริ่มต้น CMAKE จะกำหนดสี่การกำหนดค่าต่อไปนี้: การดีบัก, รีลีส, relwithDebinfo, minsizerel หากคุณต้องการคุณสามารถกำหนดค่าการสร้างของคุณเองโดยการตั้งค่าตัวแปร CMAKE_CONFIGURATION_TYPES
ตัวอย่างเช่นหากคุณต้องการมีการกำหนดค่าเพียงสองครั้งเท่านั้น: การดีบักและ releasemt ให้เพิ่มบรรทัดต่อไปนี้ในฟังก์ชั่น custom_configure_build()
:
set (CMAKE_CONFIGURATION_TYPES Debug ReleaseMT CACHE STRING "Configuration types: Debug, ReleaseMT" FORCE )
ระบบบิลด์จำเป็นต้องทราบรายการการดีบักและการเปิดตัว (ปรับให้เหมาะสม) ดังนั้นจึงต้องตั้งค่าตัวแปรสองตัวต่อไปนี้เมื่อตัวแปร CMAKE_CONFIGURATION_TYPES
ถูกกำหนด:
set (DEBUG_CONFIGURATIONS DEBUG CACHE INTERNAL "" FORCE )
set (RELEASE_CONFIGURATIONS RELEASEMT CACHE INTERNAL "" FORCE )
โปรดทราบว่าเนื่องจากเฉพาะ CMake ชื่อการกำหนดค่าที่ระบุไว้ใน DEBUG_CONFIGURATIONS
และ RELEASE_CONFIGURATIONS
จะต้องเป็นตัวพิมพ์ใหญ่
หากคุณกำหนดค่าการกำหนดค่าใด ๆ นอกเหนือจาก CMAKE มาตรฐานสี่แบบคุณต้องตั้งค่าตัวแปรต่อไปนี้สำหรับการกำหนดค่าใหม่ทุกครั้ง:
CMAKE_C_FLAGS_<Config>
- c Compile FlagsCMAKE_CXX_FLAGS_<Config>
- C ++ คอมไพล์ธงCMAKE_EXE_LINKER_FLAGS_<Config>
- ธงลิงก์ที่เรียกใช้งานได้CMAKE_SHARED_LINKER_FLAGS_<Config>
- แฟล็กลิงค์ไลบรารีที่ใช้ร่วมกันตัวอย่างเช่น:
set (CMAKE_C_FLAGS_RELEASEMT "/MT" CACHE INTERNAL "" FORCE )
set (CMAKE_CXX_FLAGS_RELEASEMT "/MT" CACHE INTERNAL "" FORCE )
set (CMAKE_EXE_LINKER_FLAGS_RELEASEMT "/OPT:REF" CACHE INTERNAL "" FORCE )
set (CMAKE_SHARED_LINKER_FLAGS_RELEASEMT "/OPT:REF" CACHE INTERNAL "" FORCE )
ด้านล่างเป็นตัวอย่างของฟังก์ชั่น custom_configure_build ():
function (custom_configure_build)
if (CMAKE_CONFIGURATION_TYPES)
# Debug configurations
set (DEBUG_CONFIGURATIONS DEBUG CACHE INTERNAL "" FORCE )
# Release (optimized) configurations
set (RELEASE_CONFIGURATIONS RELEASEMT CACHE INTERNAL "" FORCE )
# CMAKE_CONFIGURATION_TYPES variable defines build configurations generated by cmake
set (CMAKE_CONFIGURATION_TYPES Debug ReleaseMT CACHE STRING "Configuration types: Debug, ReleaseMT" FORCE )
set (CMAKE_CXX_FLAGS_RELEASEMT "/MT" CACHE INTERNAL "" FORCE )
set (CMAKE_C_FLAGS_RELEASEMT "/MT" CACHE INTERNAL "" FORCE )
set (CMAKE_EXE_LINKER_FLAGS_RELEASEMT "/OPT:REF" CACHE INTERNAL "" FORCE )
set (CMAKE_SHARED_LINKER_FLAGS_RELEASEMT "/OPT:REF" CACHE INTERNAL "" FORCE )
endif ()
endfunction ()
หากกำหนดไว้แล้ว custom_pre_configure_target()
จะถูกเรียกใช้สำหรับทุกเป้าหมายที่สร้างโดยระบบบิลด์และอนุญาตให้กำหนดค่าคุณสมบัติเฉพาะเป้าหมาย
โดยค่าเริ่มต้นระบบบิลด์ตั้งค่าคุณสมบัติเป้าหมายบางอย่าง หาก custom_pre_configure_target()
ตั้งค่าคุณสมบัติที่ต้องการทั้งหมดจะสามารถบอกระบบการสร้างว่าไม่จำเป็นต้องมีการประมวลผลเพิ่มเติมโดยการตั้งค่า TARGET_CONFIGURATION_COMPLETE
ตัวแปรขอบเขตหลักเป็น TRUE
:
set (TARGET_CONFIGURATION_COMPLETE TRUE PARENT_SCOPE )
ต่อไปนี้เป็นตัวอย่างของฟังก์ชั่น custom_pre_configure_target()
:
function (custom_pre_configure_target TARGET )
set_target_properties ( ${TARGET} PROPERTIES
STATIC_LIBRARY_FLAGS_RELEASEMT /LTCG
)
set (TARGET_CONFIGURATION_COMPLETE TRUE PARENT_SCOPE )
endfunction ()
หากไคลเอนต์ต้องการแทนที่การตั้งค่าบางอย่างอาจกำหนดฟังก์ชั่น custom_post_configure_target()
ที่เรียกว่าหลังจากเครื่องยนต์เสร็จสิ้นการกำหนดค่าเป้าหมายเช่น:
function (custom_post_configure_target TARGET )
set_target_properties ( ${TARGET} PROPERTIES
CXX_STANDARD 17
)
endfunction ()
โปรดดูหน้านี้ นอกจากนี้บทเรียนและตัวอย่างที่แสดงด้านล่างเป็นจุดเริ่มต้นที่ดี
สัญกรณ์การเรนเดอร์ Dialigent เป็นภาษาที่ใช้ JSON ที่อธิบายถึง shaders, สถานะไปป์ไลน์, ลายเซ็นทรัพยากรและวัตถุอื่น ๆ ในรูปแบบที่สะดวกเช่น:
{
"Shaders" : [
{
"Desc" : {
"Name" : " My Vertex shader " ,
"ShaderType" : " VERTEX "
},
"SourceLanguage" : " HLSL " ,
"FilePath" : " cube.vsh "
},
{
"Desc" : {
"Name" : " My Pixel shader " ,
"ShaderType" : " PIXEL "
},
"SourceLanguage" : " HLSL " ,
"FilePath" : " cube.psh " ,
}
],
"Pipeleines" : [
{
"GraphicsPipeline" : {
"DepthStencilDesc" : {
"DepthEnable" : true
},
"RTVFormats" : {
"0" : " RGBA8_UNORM_SRGB "
},
"RasterizerDesc" : {
"CullMode" : " FRONT "
},
"BlendDesc" : {
"RenderTargets" : {
"0" : {
"BlendEnable" : true
}
}
}
},
"PSODesc" : {
"Name" : " My Pipeline State " ,
"PipelineType" : " GRAPHICS "
},
"pVS" : " My Vertex shader " ,
"pPS" : " My Pixel shader "
}
]
}
ไฟล์ JSON สามารถแยกวิเคราะห์ได้ในเวลาทำงาน อีกทางเลือกหนึ่งแอปพลิเคชันสามารถใช้เครื่องมือ Packager ในการประมวลผลคำอธิบายไปป์ไลน์ล่วงหน้า (คอมไพล์ Shaders สำหรับแพลตฟอร์มเป้าหมายกำหนดเค้าโครงทรัพยากรภายใน ฯลฯ ) ลงในไฟล์เก็บถาวรแบบไบนารีที่ได้รับการปรับให้เหมาะสมสำหรับประสิทธิภาพการโหลดรันไทม์
การสอน | ภาพหน้าจอ | คำอธิบาย |
---|---|---|
01 - สวัสดีสามเหลี่ยม | ![]() | บทช่วยสอนนี้แสดงวิธีการแสดงสามเหลี่ยมง่าย ๆ โดยใช้ API เครื่องยนต์ที่ขยันหมั่นเพียร |
02 - ลูกบาศก์ | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการแสดงวัตถุ 3 มิติจริงเป็นลูกบาศก์ มันแสดงวิธีโหลด Shaders จากไฟล์สร้างและใช้จุดสุดยอดดัชนีและบัฟเฟอร์เครื่องแบบ |
03 - พื้นผิว | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้พื้นผิวกับวัตถุ 3 มิติ มันแสดงวิธีการโหลดพื้นผิวจากไฟล์สร้างวัตถุที่มีผลผูกพันทรัพยากร Shader และวิธีการสุ่มตัวอย่างพื้นผิวใน shader |
03 - Texturing -C | ![]() | บทช่วยสอนนี้เหมือนกับการสอน 03 แต่ใช้งานโดยใช้ C API |
03 - Texturing -Dotnet | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้ API เครื่องยนต์ที่ขยันหมั่นเพียรในแอปพลิเคชัน. NET |
04 - เข้าสู่ระบบ | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้ Instancing เพื่อแสดงผลหลายชุดของวัตถุหนึ่งโดยใช้เมทริกซ์การแปลงที่ไม่ซ้ำกันสำหรับทุกสำเนา |
05 - อาร์เรย์พื้นผิว | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการรวม instancing เข้ากับอาร์เรย์พื้นผิวเพื่อใช้พื้นผิวที่ไม่ซ้ำกันสำหรับทุก ๆ อินสแตนซ์ |
06 - มัลติเธรด | ![]() | บทช่วยสอนนี้แสดงวิธีสร้างรายการคำสั่งแบบขนานจากหลายเธรด |
07 - Shader เรขาคณิต | ![]() | บทช่วยสอนนี้แสดงวิธีการใช้เรขาคณิต shader เพื่อแสดงผลลวดเรียบ |
08 - Tessellation | ![]() | บทช่วยสอนนี้แสดงวิธีการใช้ฮาร์ดแวร์ tessellation เพื่อใช้อัลกอริทึมการเรนเดอร์ภูมิประเทศแบบปรับตัวได้อย่างง่าย |
09 - Quads | ![]() | บทช่วยสอนนี้แสดงวิธีการเรนเดอร์หลาย ๆ 2D ลี่สองการสลับพื้นผิวและโหมดผสมผสานบ่อยครั้ง |
10 - การสตรีมข้อมูล | ![]() | บทช่วยสอนนี้แสดงกลยุทธ์การแมปบัฟเฟอร์แบบไดนามิกโดยใช้ MAP_FLAG_DISCARD และ MAP_FLAG_DO_NOT_SYNCHRONIZE FLAGS เพื่อสตรีมข้อมูลจำนวนที่แตกต่างกันไปยัง GPU |
11 - การอัปเดตทรัพยากร | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการต่าง ๆ ในการอัปเดตบัฟเฟอร์และพื้นผิวในเครื่องยนต์ที่ขยันและอธิบายรายละเอียดภายในที่สำคัญและผลกระทบด้านประสิทธิภาพที่เกี่ยวข้องกับแต่ละวิธี |
12 - เรนเดอร์เป้าหมาย | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการแสดงผลลูกบาศก์ 3 มิติลงในเป้าหมายการเรนเดอร์นอกจอและทำเอฟเฟกต์หลังการประมวลผลอย่างง่าย |
13 - แผนที่เงา | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการแสดงเงาพื้นฐานโดยใช้แผนที่เงา |
14 - คำนวณ Shader | ![]() | บทช่วยสอนนี้แสดงวิธีการใช้ระบบการจำลองอนุภาคอย่างง่ายโดยใช้ Shaders คำนวณ |
15 - หลายหน้าต่าง | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้เครื่องยนต์ที่ขยันเพื่อแสดงผลกับหน้าต่างหลายบาน |
16 - ทรัพยากรที่ไม่มี bindless | ![]() | บทช่วยสอนนี้แสดงวิธีการใช้ทรัพยากร Bindless ซึ่งเป็นเทคนิคที่ใช้ประโยชน์จากคุณสมบัติการจัดทำดัชนีทรัพยากรแบบไดนามิก Shader ที่เปิดใช้งานโดย APIs รุ่นต่อไปเพื่อปรับปรุงประสิทธิภาพการแสดงผลอย่างมีนัยสำคัญ |
17 - MSAA | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้การต่อต้านการเป็นนามธรรมหลายตัวอย่าง (MSAA) เพื่อให้ขอบเรขาคณิตดูราบรื่นขึ้นและมีเสถียรภาพชั่วคราวมากขึ้น |
18 - คำถาม | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้การสืบค้นเพื่อดึงข้อมูลต่าง ๆ เกี่ยวกับการดำเนินการ GPU เช่นจำนวนของการแสดงผลเบื้องต้นระยะเวลาการประมวลผลคำสั่ง ฯลฯ |
19 - เรนเดอร์ผ่าน | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้ Render Passes API เพื่อใช้การแรเงาที่เลื่อนออกไปอย่างง่าย |
20 - Shader ตาข่าย | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้การขยายและเฉดสีตาข่ายขั้นตอนใหม่ที่ตั้งโปรแกรมได้เพื่อใช้การคัดเลือกการคัดเลือก frustum และการคำนวณวัตถุ LOD บน GPU |
21 - การติดตามเรย์ | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงพื้นฐานของการใช้ Ray Tracing API ในเครื่องยนต์ที่ขยัน |
22 - การเรนเดอร์ไฮบริด | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้ตัวเรนเดอร์ไฮบริดอย่างง่ายที่รวมแรสเตอร์กับการติดตามเรย์ |
23 - คิวคำสั่ง | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้คิวคำสั่งหลายคำเพื่อดำเนินการเรนเดอร์ควบคู่ไปกับการดำเนินการคัดลอกและคำนวณ |
24 - การแรเงาอัตราผันแปร | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้การแรเงาอัตราผันแปรเพื่อลดภาระการแรเงาพิกเซล |
25 - Render State Packager | ![]() | บทช่วยสอนนี้แสดงวิธีการสร้างและเก็บถาวรสถานะไปป์ไลน์ด้วยเครื่องมือออฟไลน์ Packager State Packager ในตัวอย่างของเส้นทางการติดตามเส้นทางอย่างง่าย |
26 - RENDER STATE CACHE | ![]() | บทช่วยสอนนี้ขยายเทคนิคการติดตามเส้นทางที่ใช้ในบทช่วยสอนก่อนหน้าและสาธิตวิธีการใช้แคชสถานะเรนเดอร์เพื่อบันทึกสถานะไปป์ไลน์ที่สร้างขึ้นในเวลาทำงานและโหลดเมื่อแอปพลิเคชันเริ่มต้น |
27 - โพสต์การประมวลผล | ![]() | บทช่วยสอนนี้แสดงให้เห็นถึงวิธีการใช้เอฟเฟกต์หลังการประมวลผลจากโมดูล diligentFX |
ตัวอย่าง | ภาพหน้าจอ | คำอธิบาย |
---|---|---|
ตัวอย่างบรรยากาศ | ![]() | ตัวอย่างนี้แสดงให้เห็นถึงวิธีการรวมเอฟเฟกต์การกระเจิงของแสง epipolar การกระเจิงหลังการประมวลผลเข้ากับการประยุกต์ใช้เพื่อแสดงบรรยากาศทางร่างกาย |
การสาธิต GLFW | ![]() | มินิเกมเขาวงกตนี้แสดงให้เห็นถึงวิธีการใช้ GLFW เพื่อสร้างหน้าต่างและจัดการอินพุตแป้นพิมพ์และเมาส์ |
ผู้ชม GLTF | ![]() | ตัวอย่างนี้แสดงให้เห็นถึงวิธีการใช้ตัวโหลดสินทรัพย์และตัวแสดงผล PBR เพื่อโหลดและแสดงรุ่น GLTF |
ผู้ชม USD | ![]() | ตัวอย่างนี้แสดงให้เห็นถึงวิธีการแสดงไฟล์ USD โดยใช้ไฮโดรเจนต์การใช้งาน API การเรนเดอร์ไฮดราในเครื่องยนต์ที่ขยัน |
เงา | ![]() | ตัวอย่างนี้แสดงให้เห็นถึงวิธีการใช้ส่วนประกอบเงาเพื่อแสดงเงาคุณภาพสูง |
Dear Imgui Demo | ![]() | ตัวอย่างนี้แสดงให้เห็นถึงการรวมกันของเครื่องยนต์กับห้องสมุด Imgui UI ที่รัก |
การสาธิต Nuklear | ![]() | ตัวอย่างนี้แสดงให้เห็นถึงการรวมของเครื่องยนต์กับไลบรารี Nuklear UI |
สวัสดี AR | ![]() | ตัวอย่างนี้แสดงให้เห็นถึงวิธีการใช้เครื่องยนต์ที่ขยันในแอปพลิเคชัน Android AR พื้นฐาน |
ดาวเคราะห์น้อย | ![]() | Sampple นี้เป็นเกณฑ์มาตรฐานประสิทธิภาพที่แสดงผลดาวเคราะห์น้อยพื้นผิวที่ไม่ซ้ำกัน 50,000 และช่วยให้เปรียบเทียบประสิทธิภาพของโหมดการเรนเดอร์ที่แตกต่างกัน |
การสาธิตการรวมเอกภาพ | ![]() | โครงการนี้แสดงให้เห็นถึงการรวมเครื่องยนต์ที่ขยันเข้ากับความสามัคคี |
ฟังก์ชั่นการเรนเดอร์ระดับสูงถูกนำมาใช้โดยโมดูล DiligentFX ตอนนี้มีส่วนประกอบต่อไปนี้แล้ว:
![]() | ![]() |
![]() | ![]() |
การต่อต้านนามแฝงชั่วคราว
การทำแผนที่โทนสียูทิลิตี้
เราจะขอบคุณถ้าคุณสามารถส่งลิงค์ให้เราในกรณีที่ผลิตภัณฑ์ของคุณใช้เครื่องยนต์ที่ขยัน
ระบบการสร้างภาพภูมิประเทศขนาดใหญ่สำหรับเครื่องจำลองการฝึกอบรมนักบินโดยระบบ Elbit
Lumenrt: ซอฟต์แวร์การสร้างภาพและการสร้างแบบจำลองความเป็นจริงโดย Bentley Systems
Godus: เกมแซนด์บ็อกซ์ที่ได้รับรางวัลโดย 22cans
Vrmac Graphics: A cross-platform graphics library for .NET
Diligent Engine is an open project that may be freely used by everyone. We started it to empower the community and help people achieve their goals. Sadly enough, not everyone's goals are worthy. Please don't associate us with suspicious projects you may find on the Web that appear to be using Diligent Engine. We neither can possibly track all such uses nor can we really do anything about them because our permissive license does not give us a lot of leverage.
See Apache 2.0 license.
Each module has some third-party dependencies, each of which may have independent licensing:
To contribute your code, submit a Pull Request to this repository. Diligent Engine is licensed under the Apache 2.0 license that guarantees that content in the DiligentEngine repository is free of Intellectual Property encumbrances. In submitting any content to this repository, you license that content under the same terms, and you agree that the content is free of any Intellectual Property claims and you have the right to license it under those terms.
Diligent Engine uses clang-format to ensure consistent source code style throughout the code base. The format is validated by CI for each commit and pull request, and the build will fail if any code formatting issue is found. Please refer to this page for instructions on how to set up clang-format and automatic code formatting.
Coding Guidelines
Performance Best Practices
Code Formatting
See Release History
diligentgraphics.com