Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-03-2006, 16:40   #1
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Diamonds for SDL: first release

La prima versione del porting di Diamonds per le SDL è finitoe ed è disponibile nel repository in branches/SDL.

PER USARLO

1) vi consiglio di effettuare un checkout completo del progetto;
2) le librerie SDL (non SDLJava) che stanno in libs/win32 devono essere raggiungibili dal path di sistema;
3) la libreria jpeg.dll dev'essere la prima a esser raggiunta dal path di sistema; purtroppo è diversa da quella che si trova nek JDK o nella JRE (io ho dovuto cambiare il nome a quelle presenti in jdk/bin e jre/bin).

TODO

1) La pulsazione: non sono riuscito a trovare la libreria sdlgfx.dll, che implementa delle API per la rotazione, lo zoom, ecc., per cui tutte le texture (in SDL si chiamano "Surface" ) vengono disegnate sempre allo stesso modo; si potrebbe al limite realizzare un'artiginale routine di zoom.
2) Per Linux e MacOS X c'è da aggiungere le rispettive librerie (.so e .dynlibs, mi pare) e testare se tutto funziona.
3) C'è da implementare gli alertbox che in LWJGL sono implementate in org.lwjgl.Sys (mi pare).

NOTE SUL CODICE

Ho cercato di togliere di mezzo tutti i riferimenti al carattere "/" come separatore per i nomi di file, sostituendolo con l'apposita API che Java mette a disposizione.
Ho eliminato qualche test di Sound, in quanto divenuto inutile.
Ho modificato DisplayInterface ed EngineInterface, spostando drawQuad in esse, e cambiandole nome in drawTexture (che è più comprensibile).
A Texture ho dovuto aggiungere il metodo pubblico getSurface(), che restituisce una SDLSurface, necessaria per effettuare il blitting di quest'immagine sullo schermo (SDL funziona in modo diverso da LWJGL/OpenGL, per cui era necessario).
GameLoop adesso estende KeyboardListener e mantiene un suo mapping per la tastiera (è stato aggiunto anche a KeyMapping un create appositamente per GameLoop). Questo si è reso necessario per poter intercettare la pressione del tasto Escape e del "tasto" Quit (la chiusura della finestra) in quanto non era possibile uscire da Diamonds (dipendeva soltanto dalla chiusura della finestra, che in SDL è un evento come un altro ed è gestito quindi come tastiera, mouse, joystick, eventi di sistema, ecc.).
Ho dovuto modificare molti test per aggiungere la creazione di un oggetto Audio, in quanto senza engine audio attivato non era possibile caricare i suoni (questo, comunque, era dovuto al fatto che non veniva usato Sound.createForTesting(), come ho scritto nell'altro test).
Ho dovuto modificare la creazione e la finalizzazione degli oggetti (in BootStrap). Adesso l'ordine è engine, audio, tastiera per la creazione e l'opposto per la finalizzazione. Questo perché engine crea e inizializza il subsystem "principale".

Purtroppo mi rendo conto che alcune parti del codice andrebbero risistemate, e soprattutto aggiunti dei test, ma il mio obiettivo era quello di cercare di far funzionare Diamonds con le SDL, cercando di modificare quanto meno possibile il codice esistente, specialmente a livello di "interfaccia".

Scusatemi per questo, e se mi sono sfuggite altre cose che dovevo dire, ma ho effettuato troppe modifiche per ricordarmi di tutti i cambiamenti.

Se qualcuno può effettuare qualche test e riportarmi le sue impressioni, mi farebbe cosa assai gradita.
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 17:11   #2
Jocchan
Senior Member
 
L'Avatar di Jocchan
 
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
Grandissimo
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam.
Jocchan è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 17:57   #3
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Interessante. A prestazioni video come sono cambiate le cose?

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 07:38   #4
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Sinceramente non ti so dire: il gioco mi sembra fluido e senza scatti, e la JVM sulla mia macchina gira intorno all'80-90% della CPU.

Comunque ci sono diversi margini di miglioramento, perché è possibile:
- utilizzare l'accelerazione hardware (in full screen, se non ricordo male);
- utilizzare il double buffering;
- utilizzare la memoria video anziché quella di sistema per lo schermo e per le immagini (superfici);
- convertire le immagini caricate nel formato dello schermo (attualmente le carico e basta: poi è la routine di blitting che si occupa delle conversioni nel pixel format usato dallo schermo).

Per i primi 3 punti dipende chiaramente dalla capacità della piattaforma di supportare queste caratteristiche.

Altri benefici che si hanno sono i seguenti:
- immagini di dimensioni arbitrarie, e quindi non più con coordinate che devono essere potenze di 2 (e questo permetterà un consistente risparmo di spazio);
- numerosi formati supportati per le immagini;
- accesso diretto alle superfici (memoria di sistema o memoria video), e quindi la possibilità di implementare velocemente e in maniera efficiente manipolazioni sui pixel;
- utilizzo di font true type (serve la dll freetype);
- utilizzo di numerosissime API per primitive grafiche (tra cui lo zoom, che c'interessa per la pulsazione), anche con antialiasing, con la libreria gfx (serve la sdlgfx.dll);
- possibilità di caricare e suonare musiche in formato MOD (.mod .xm .s3m .669 .it .med e altri) e MIDI;
- possibilità di caricare e suonare, oltre ai .wav, anche .aiff, .voc e formati compressi come .ogg e .mp3 (con le apposite .dll);
- numero di canali per i sample molto elevato (di default, come dagli esempi che ho visto, obbligo il mixer a crearne 32, ma c'è scritto che si può andare anche ben oltre );
- gestione del fade dei sample e delle musiche;
- gestione di panning, distance ed eventuali effetti custom per i canali audio;
- gestione "centralizzata" e "omogenea" (discendono tutti dalla stessa classe) di tutti gli eventi di input (tastiera, mouse, joystick ed eventi di sistema);
- accesso al CD-ROM (non ce ne frega niente, ma non si sa mai );
- possibilità di usare le OpenGL (in maniera similare a LWJGL) e una libreria per le font per OpenGL.

Una cosa molto importante, per risparmiare molta memoria, sarebbe quella di implementare un sistema di "caching" per le immagini e i sample .wav: basta averne una copia in memoria, condivisa da tutti gli oggetti che ne fanno uso. Non so se questo avviene già adesso, non ho controllato.

Comunque devo dire che mi ha impressionato Diamonds: dopo aver finito il porting, alla prima esecuzione già funzionava!!!
Questo è indice di un buon design e di un ottimo lavoro: complimenti a tutti!

Ultima modifica di cdimauro : 31-03-2006 alle 07:41.
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 11:31   #5
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
SDL UPDATE: atto secondo

Ho aggiunto il codice per liberare la memoria utilizzata a Texture.cleanup().

ho aggiunto la libreria SDL_gfx.dll per poter usare le API di SDLGfx (ci sono un sacco di funzioni utili, come dicevo prima, tra cui quelle di zoom), e ho scritto il codice per effettuare lo zoom (e quindi la pulsazione delle gemme), ma purtroppo non funziona perché non riesce inizializzare correttamente questa libreria; anche eseguendo il test in dotazione a SDLJava, testgfx.bat che si trova nella cartella bin, ottengo lo stesso errore:
Codice:
C:\T\sdljava-0.9.1>java -cp .\lib\sdljava.jar -Djava.library.path=.\lib sdljavax.gfx.SDLGfxTest
Native code library failed to load.
java.lang.UnsatisfiedLinkError: C:\T\sdljava-0.9.1\lib\SDLJava_gfx.dll: Routine di inizializzazione della libreria di collegamento dinamico (DLL) non riuscita
E' possibile, quindi, che la libreria SDL_gfx.dll che ho trovato non sia compatibile con SDLJava.dll o SDL.dll, ma non ne ho trovate altre.
Per cui ho dovuto commentare il codice (si trova in DisplayImplementation)) che effettuare lo zoom.

Ho aggiunto anche due righe di codice per convertire l'immagine caricata nel formato dello schermo. Già solo questo ha aumentato notevolmente la velocità di esecuzione, e la CPU si assesta sul 50-60%; il gioco, tra l'altro, sembra molto più fluido.
Sfortunatamente ho dovuto commentare anche questo codice (si trova in Texture.loadFromFile), perché eseguendo la build con ant alcuni test fallivano. Questo succede perché, non essendo stato inizializzato / aperto nessuno schermo (ma soltanto l'engine video), non la conversione non è ovviamente possibile.

Da tutto ciò penso che per Diamonds sia necessario separare ulteriormente il confine fra il codice di produzione e quello di test. In fase di test non esistono schermi e canali audio, e alcune API di SDL non funzionano di conseguenza.
Il lavoro non è facile, visto che ci sono troppi test che non fanno uso delle versioni createForTesting() delle istanze create (e bisognerebbe creare questo metodo anche per Texture, a questo punto).

Cosa ne pensate?
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 11:47   #6
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Intanto sarebbe utile vedere se cisc risolve con le SDL e cominciare a valutare l'importanza del passaggio.

Più che altro ora come ora ci sono molte attività ad alta priorità da svolgere

Cisc ci sai dire qualcosa?
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 11:49   #7
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Perfettamente d'accordo. Infatti finché non si prende una decisione io non posso continuare, ma per prenderla bisogna che il porting SDL venga testato, possibilmente da tutti (mancano gli ambienti Linux e MacOS X, ad esempio).
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 13:44   #8
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
SDL UPDATE: e tre!

Ho finalmente trovato una libreria SDL_gfx.dll funzionante. L'ho aggiunta alle altre, e ho messo pure smpeg.dll, che serve per caricare file audio .mp3.

Ho modificato il codice per lo zoom, e adesso funziona, anche se c'è qualche problemino da risolvere con la maschera per l'alpha channel.

Senza convertire le immagini nello stesso formato dello schermo l'esecuzione diventa più pesante.
Con la conversione, invece, la CPU si mantiene sul 50-60%, come prima.

Per questo fine settimana è tutto. Non ho altro tempo da dedicarci.

Invito, nuovamente, a tutti (ognuno in base alle proprie possibilità) di testare questa versione di Diamonds per le SDL, e di riportare eventuali problemi, osservazioni o idee.
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 14:19   #9
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Ottimo, ottimo lavoro. Soprattutto perche' ha portato alla luce diverse magagne nel codice del trunk che hanno bisogno di refactoring.

Non so se sia il caso di passare a SDL oppure no, ma penso che la stada giusta da seguire sia di migliorare ancora la separazione fra engine e game code, di migliorare la separazione fra test code e game code come suggerito da Cesare e di far convergere tutto il codice esterno all'engine verso una versione comune ai due branch. Quindi io implementerei pian piano in versione testata i refactoring che Cesare ha fatto sulla versione SDL. Quando le due versioni saranno abbastanza simili, potremmo valutare uno switch indolore fra gli engine con piu' precisione.

Cesare ti occupi tu di portare i refactoring anche nel main trunk? Soprattutto la classe game come InputListener mi pare un'ottima idea.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 15:01   #10
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
OK Fran, me ne occupo io, ma adesso e questo fine settimana non posso. Se ne parla lunedì.

Fortunatamente sotto Windows ho Total Commander che mi dà un grande aiuto Santo Windows.

Ho già qualche idea per sistemare engine e display, in modo da avere un'interfaccia quanto più generale possibile. Penso di introdurre anche un'interfaccia per Audio, Sound e Texture, e far convergere tutto il codice legato alla libreria nelle rispettive "Implementation".
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 15:58   #11
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Perfetto. Prosegui pure.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 20:05   #12
cisc
Senior Member
 
L'Avatar di cisc
 
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
scusatemi, mi sto preparando un esame tosto per lunedì, quindi fino ad allora non riesco a seguirvi costantemente, adesso faccio il checkout del porting di cdimauro, e vi faccio sapere se sdl risolve i miei problemi....
__________________
GNU MyServer Wants YOU!!
We live thinking we will never die. We die thinking we had never lived. Jason Becker
cisc è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Cos'è RSL, il nuovo standard che ...
Nissan Micra EV: da 29.500 a oltre 36.00...
Processo Microsoft-ValueLicensing: cosa ...
L'edizione limitata più ambita da...
Lo sviluppatore di MSI Afterburner svela...
Quando l'AI diventa maestro: così...
Sony WH-1000XM6 già scontate su A...
NVIDIA chiede più velocità...
Windows 11 in soli 2,8 GB: con questo sc...
Panico in casa HYTE: ritirato dal mercat...
OPPO Reno14, debutto tra rooftoop esclus...
3DAIQ, il progetto di Concept Reply e TE...
Il parlamento francese contro TikTok: '&...
Apple Watch SE 2ª gen. Cellular a soli 2...
MotoE sospesa dopo il 2025: fine tempora...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:14.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v