[Scena Switch] La libreria libnx introduce il supporto OpenGL

Disponibile un nuovo aggiornamento per la libreria LibNX utilizzata per la compilazione di applicazioni homebrew da poter eseguire attraverso l’homebrew loader su console Switch.

Il nuovo aggiornamento della libreria LibNX permetterà agli sviluppatori di sfruttare appieno le potenzialità della GPU, l’accelerazione hardware permetterà inoltre di realizzare emulatori per sistemi più complessi, come GameCube o Nintendo 64.

Le applicazioni esistenti dovranno comunque essere aggiornate per supportare le nuove funzionalità. LibNX prende base dalla libreria Libctru, largamente utilizzata per lo sviluppo di applicazioni homebrew sulla console portatile 3DS.

Changelog

  • libnx 1.4.0 ora è disponibile tramite pacman. Utilizza sudo (dkp-)pacman -Syu per aggiornare o sudo (dkp-)pacman -S libnx per l’installazione.
  • La versione iniziale della porta mesa/nouveau per Switch ora è disponibile! Con questo, ora forniamo il supporto per OpenGL 4.3 (Profilo principale), il che significa che gli homebrew per Switch può sfruttare la GPU per il rendering grafico. Sono inoltre disponibili anche OpenGL ES 2.xe 3.x. Puoi usare sudo (dkp-)pacman -S switch-mesa per installare questo pacchetto. Si noti che questa è la prima (beta) versione e potrebbero esserci problemi. Non esitare a venire a trovarci su #switchdev @EFnet se trovi qualcosa che non funziona come dovrebbe.
  • switch-examples sono stati aggiornati con gli esempi OpenGL nuovissimi. Aggiunto anche un esempio audren e un esempio sharedfont. Utilizzare (dkp-)pacman -Syu per aggiornare o sudo (dkp-)pacman -S switch-examples per installare.
  • Infine, sono stati aggiunti diversi portlib che rendono più semplice l’uso del nuovo supporto OpenGL: switch-glm, switch-glad. Questi sono necessari per costruire gli esempi OpenGL sopra menzionati.

Sistema LibNX 1.4.0

  • Aggiunto il supporto per i thread C11, che sono stati pre-multitasked e caricano il bilanciamento tra i core.
  • Aggiunto oggetto Event, che avvolge il kernel revent/wevent con facoltativo autoclear.
  • Interfaccia CondVar modificata per far passare il mutex a condvarWait* anziché a condvarInit, che è coerente con il concetto di una variabile di condizione e con altre API di threading comuni.
  • Aggiunto armGetSystemTick (che sostituisce svcGetSystemTick) e armGetSystemTickFreq.
  • Aggiunto rwlockInit.
  • Aggiunto kernelAbove600.
  • Aggiunte chiamate di sistema: svcGetThreadCoreMask, svcSetThreadCoreMask.
  • Aggiunta l’intestazione MOD0 ai binari compilati con libnx.
  • Corretto semaphoreTryWait.
  • Corretto un problema di memoria in tmemCreate.

Servizi

  • Aggiunto il servizio bpc (usato per riavviare e spegnere la console).
  • Aggiunto il servizio di psm (necessario per ottenere lo stato della batteria).
  • Aggiunti i comandi ns: nsListApplicationRecord, nsListApplicationContentMetaStatus.
  • Miglioramenti minori al servizio dell’applet:
    • Aggiunta dell’inizializzazione dell’appletType_SystemApplet mancante nel codice dell’applet.
    • Aggiunti appletBeginBlockingHomeButton e appletEndBlockingHomeButton.
  • L’oggetto Event ora viene utilizzato per restituire gli eventi di sistema dai wrapper di servizio quando possibile, fornendo anche la corretta modalità autoclear.
  • Corretto fsOpenFileSystem e fsOpenFileSystemWithId.
  • Corretto un bug in hidInitializeVibrationDevices.
  • Corretto un errore nella conversione dell’errore del socket.
  • Corretto un bug in nifm non inizializzava correttamente per <3.0.0.
  • La sessione di Service Manager (sm) ora si chiude correttamente.
  • I servizi hid, irs, vi e nv ora acquisiscono un riferimento ai servizi di applet.

Audio

  • Aggiunto audren:u service wrapper (che attualmente richiede 3.0.0+, sarà indirizzato in un futuro aggiornamento).
  • Aggiunto il wrapper AudioDriver attorno ad audren, fornendo un’interfaccia di livello superiore che può essere utilizzata per mixare e riprodurre suoni.

grafica

  • Principali operazioni di riscrittura e refactoring nel wrapper gfx che porta a miglioramenti dell’affidabilità e dell’usabilità:
    • Rimossa la modalità GfxMode_TiledSingle a causa di problemi e potenziali danni (temporanei) all’hardware.
    • Il comportamento di trasformazione predefinito non inverte più verticalmente il framebuffer .
    • Rimosso gfxSetDrawFlip poiché non più necessario grazie alla modifica del comportamento di trasformazione predefinito.
    • Nella maggior parte dei casi non è necessario chiamare gfxWaitForVsync perché gfxSwapBuffers si sincronizza implicitamente con il display (questo è richiesto dal sistema di composizione di superficie e dal produttore di buffer Android).
    • Dequeue errori fatali dovrebbero essere risolti .
    • Logica semplificata e semplificata.
    • nvgfx ridotto al minimo necessario per allocare i framebuffer.
    • La logica di Binder ora corrisponde più strettamente sia al codice Android che al software ufficiale.
    • Il recinto corretto e il codice di attesa dell’evento vengono ora utilizzati.
  • Il codice della console non esegue più un’attesa forzata flush/swap/vblank durante la stampa di una nuova riga a causa di motivi di prestazioni. Gli utenti del dispositivo della console devono assicurarsi che gfxFlushBuffers e
  • gfxSwapBuffers viene chiamato periodicamente, preferibilmente nel ciclo principale dell’applicazione.
  • Aggiunti oggetti wrapper sperimentali per il driver Nvidia , necessari per utilizzare la GPU. Questi wrapper sono ancora nella fase RE e saranno soggetti a modifiche in una versione futura.
  • Importante riprogettazione del service wrapper VI che consente agli utenti futuri di utilizzare direttamente VI per creare un layer di visualizzazione.
  • I servizi di binder e gli involucri di buffer buffer sono stati migliorati e riprogettati.
    • Binder ora contiene meno stati e utilizza sempre la sessione del servizio di rilegatura del binder VI.
    • Aggiunti i codici di errore Module_LibnxBinder.
    • IGraphicBufferI wrapper del servizio di associazione dei produttori ora hanno il prefisso bq e accettano esplicitamente un oggetto Binder.
    • Aggiunto bqCancelBuffer.
    • bqGraphicBufferInit è stato rinominato in bqSetPreallocatedBuffer.
  • Miglioramenti e aggiunte ai wrapper ioctl di nvidia.
  • Aggiunte definizioni per altre enumerazioni Android.

miscellaneo

  • La macro ALIGN è stata rimossa a favore dell’attributo alignas C11/C++ 11.
  • Ulteriori miglioramenti alla stabilità generale del sistema e altre piccole modifiche per migliorare l’esperienza dell’utente.

Riconoscimenti

Questa versione non sarebbe stata possibile senza lo straordinario lavoro svolto in passato da Armada per costruire e portare mesa e libdrm_nouveau su Switch, e per dare preziose informazioni sul funzionamento di mesa, nouveau e OpenGL. 

Ultimo ma non meno importante, una menzione speciale a Plutoo per l’avvio del lavoro di refactoring della GPU libnx e per il suo lavoro sul reverse engineering della GPU Maxwell utilizzata dallo Switch; così come a Subv per aver lavorato anche sul reverse engineering di Maxwell, riuscendo ad eseguire il debug e dando consigli.

(Visited 1 times, 1 visits today)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *