Π’ GTK Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ отрисовки для OpenGL ΠΈ Vulkan

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ GTK объявили ΠΎ готовности Π΄Π²ΡƒΡ… Π½ΠΎΠ²Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ² отрисовки — «ngl» ΠΈ «vulkan», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… графичСскиС API OpenGL (GL 3.3+ ΠΈ GLES 3.0+) ΠΈ Vulkan. НовыС Π΄Π²ΠΈΠΆΠΊΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² состав ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ выпуска GTK 4.13.6. Π’ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ GTK Π΄Π²ΠΈΠΆΠΎΠΊ ngl Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ Π² случаС выявлСния Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ 4.14 Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Ρ‘Π½ старый Π΄Π²ΠΈΠΆΠΎΠΊ отрисовки «gl».

НовыС Π΄Π²ΠΈΠΆΠΊΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ собираСмыС ΠΈΠ· Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹. Π‘ΡƒΡ‚ΡŒ ΡƒΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² качСствС основы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ API Vulkan, ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ для OpenGL создан ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ абстракции, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ отличия ΠΌΠ΅ΠΆΠ΄Ρƒ OpenGL ΠΈ Vulkan. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ±ΠΎΠΈΡ… Π΄Π²ΠΈΠΆΠΊΠ°Ρ… ΠΎΠ±Ρ‰ΡƒΡŽ инфраструктуру для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π³Ρ€Π°Ρ„Π° сцСны (scene graph), трансформаций, ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ тСкстур ΠΈ Π³Π»ΠΈΡ„ΠΎΠ². Унификация Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ упростила сопровоТдСниС ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ ΠΎΠ±ΠΎΠΈΡ… Π΄Π²ΠΈΠΆΠΊΠΎΠ² ΠΈ ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΈ синхронизированном состоянии.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ старого Π΄Π²ΠΈΠΆΠΊΠ° «gl», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΡƒΠ·Π»ΠΎΠ² Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° (rendernode) использовался ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ простой ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ пСриодичСская пСрСсортировка Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Π·Π°ΠΊΠ°Π΄Ρ€ΠΎΠ²ΠΎΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π΅ (offscreen), Π² Π½ΠΎΠ²Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠ°Ρ… вмСсто Π·Π°ΠΊΠ°Π΄Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° примСняСтся слоТный ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ (ubershader), ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π°. Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ новая рСализация ΠΏΠΎΠΊΠ° отстаёт ΠΎΡ‚ старой ΠΏΠΎ ΡƒΡ€ΠΎΠ²Π½ΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ основноС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ стадии удаляСтся коррСктности Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ простотС сопровоТдСния.

НовыС возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² старом Π΄Π²ΠΈΠΆΠΊΠ΅ «gl»:

  • Π‘Π³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² — позволяСт ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Π»ΠΊΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ отрисовки Π±ΠΎΠ»Π΅Π΅ Ρ€ΠΎΠ²Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ².
    Π’ GTK Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ отрисовки для OpenGL ΠΈ Vulkan
  • Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ любоС число Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΈ сглаТиваниС (Π² Π΄Π²ΠΈΠΆΠΊΠ΅ «gl» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»ΠΈΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅, Ρ€Π°Π΄ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ коничСскиС Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ c 6 Ρ†Π²Π΅Ρ‚Π°ΠΌΠΈ остановки).
    Π’ GTK Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ отрисовки для OpenGL ΠΈ Vulkan
  • Π”Ρ€ΠΎΠ±Π½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (fractional scale), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Π²Ρ‹ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅Ρ†Π΅Π»Ρ‹Π΅ значСния ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ использовании ΠΌΠ°ΡΡˆΡ‚Π°Π±Π° 125% для ΠΎΠΊΠ½Π° 1200×800 Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ Π±ΡƒΡ„Π΅Ρ€ 1500×1000, Π° Π½Π΅ 2400×1600 ΠΊΠ°ΠΊ Π² старом Π΄Π²ΠΈΠΆΠΊΠ΅.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ DMA-BUF для использования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… GPU ΠΈ выноса ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ GPU.
  • ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² старой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

К ограничСниям Π½ΠΎΠ²Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ² отнСсСно отсутствиС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ позиционирования ΠΏΠΎ Π½Π΅Ρ†Π΅Π»Ρ‹ΠΌ значСниям (fractional position) ΠΈ ΡƒΠ·Π»ΠΎΠ² glshader, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ сильно завязаны Π½Π° особСнностях старого Π΄Π²ΠΈΠΆΠΊΠ°, ΠΈ Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠΏΠ°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ послС добавлСния ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΡƒΠ·Π»ΠΎΠ² с масками (mask) ΠΈ тСкстур с ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ. Π’Π°ΠΊΠΆΠ΅ упоминаСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ вСроятности всплытия Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с графичСскими Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ, обусловлСнных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ.

Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½Π° Π±Π°Π·Π΅ Π½ΠΎΠ²ΠΎΠΉ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ созданиС Π΄Π²ΠΈΠΆΠΊΠΎΠ² отрисовки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Metal Π² macOS ΠΈ DirectX Π² Windows, Π½ΠΎ созданиС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠΎΠ² Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½ΠΎ использованиСм ΠΈΠ½Ρ‹Ρ… языков для ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² (Π² Π΄Π²ΠΈΠΆΠΊΠ°Ρ… «ngl» ΠΈ «vulkan» задСйствован язык GLSL, поэтому для Metal ΠΈ Direct придётся Π»ΠΈΠ±ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прослойку Π½Π° Π±Π°Π·Π΅ инструмСнтария SPIRV-Cross).

Из ΠΏΠ»Π°Π½ΠΎΠ² Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ упоминаСтся обСспСчСниС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ HDR ΠΈ срСдств для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ управлСния Ρ†Π²Π΅Ρ‚ΠΎΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡƒΡ‚ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° (Path rendering) Π½Π° сторонС GPU, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° Π³Π»ΠΈΡ„ΠΎΠ², Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Π²Π½Π΅ основного ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ оптимизация ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для старых ΠΈ ΠΌΠ°Π»ΠΎΠΌΠΎΡ‰Π½Ρ‹Ρ… устройств. Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π²ΠΈΠΆΠΊΠ° «vulkan» Π±Π»ΠΈΠ·ΠΊΠ° ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ старого Π΄Π²ΠΈΠΆΠΊΠ° «gl». Π”Π²ΠΈΠΆΠΎΠΊ «ngl» отстаёт ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚ старого Π΄Π²ΠΈΠΆΠΊΠ° «gl», Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ достаточно для отрисовки с частотой 60 ΠΈΠ»ΠΈ 144 FPS. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ситуация измСнится послС провСдСния ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru