µLua DS - Forum officiel | Official forum Index du Forum

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer   ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Microlua, 30 ou 60 FPS?
Aller à la page: 1, 2, 3  >
 
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Demande d'aide
Sujet précédent :: Sujet suivant  
Auteur Message
ShiiFu


Hors ligne

Inscrit le: 05 Juil 2012
Messages: 51

MessagePosté le: Jeu 5 Juil 2012 - 10:10    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

Salut à tous,

Comme beaucoup je pense, je me suis poser la question suivante : pourquoi microlua est limité à 30 FPS? Question



Bonne lecture.
Tout d'abord, je tiens à vous dire que mon hypothèse n'est pas vérifié à 100%, car cela m'étonnerai que toute une communauté face une telle erreur. En effet, pour moi, microlua tourne à 60 FPS comme la NDS.

Posons certaine définitions ou rapport :

D'après le site du zéro :
La fonction render équivaut à commander l'affichage du résultat des fonctions de dessin, et synchroniser les tours de boucle avec les cycles d'affichage de notre console.

On va dire qu'un FPS c'est un train. Avec microlua, on prend 30 trains en une seconde maximum. La fonction render nous permet donc d'attendre le train suivant. Mais, pourquoi il y aurai moins de train avec microlua? C'est une micro gare?
Je veux bien qu'ils aient réduit le nombre de trains, mais dans quel but?
Alléger l'affichage? La fonction render a besoin de 2 trains?!
Personnellement, je n'en vois pas l’intérêt.
Et puis, pourquoi l'avoir divisé par deux exactement?

Pour ma part, je suis parti du principe qu'à chaque fois que l'on appelait la fonction render on prenais une fois le trains. J'ai donc fait 2 script pour savoir combien de train je prenais.

Sachant que l'on appelle la fonction render à tous les tours de boucle, je me suis d'abord poser la question de combien de tour de boucle on faisait sans la fonction render grâce à ce script :
 
Code:
 chrono = Timer.new()
chrono:start()

tourboucle = 0
resultat = 0

quitter = false
while not quitter do
   Controls.read()
   tourboucle = tourboucle + 1          
   if chrono:time() > 999 then
      chrono:stop()
      resultat = tourboucle
      quitter = true
   end
end


while not Keys.held.Start do
        Controls.read()


   screen.print(SCREEN_UP, 0, 32, "Temps :"..chrono:time())
   
   screen.print(SCREEN_UP, 0, 150, "tourboucle: "..tourboucle.." (moi)")
   screen.print(SCREEN_UP, 0, 162, "FPS: "..resultat.." (moi)")
   
   render()
end



J'obtiens un résultat qui tourne autour de 800 pour 1000 ms précisement
Ce qui veut dire que j'ai la possibilité de prendre 800 trains. Cependant il faut enlever le temps de monté dans le train. Mais de toutes façon il n'y aura pas 800 trains.

J'ai maintenant fait le même calcul avec la fonction render dans la boucle. Le résultat est donc le nombre de train prix en une seconde, donc le nombre de FPS. Voici le script :



 
Code:
 chrono = Timer.new()
chrono:start()

tourboucle = 0
resultat = 0
while not Keys.newPress.Start do
   Controls.read()
          
   if chrono:time() > 999 then
      chrono:reset()
      chrono:start()
      resultat = tourboucle
      tourboucle = 0
   end
   tourboucle = tourboucle + 1
   
   screen.print(SCREEN_UP, 0, 32, "Temps :"..chrono:time())
   
   screen.print(SCREEN_UP, 0, 150, "tourboucle: "..tourboucle.." (moi)")
   screen.print(SCREEN_UP, 0, 162, "FPS: "..resultat.." (moi)")
   screen.print(SCREEN_UP, 0, 184, "FPS: "..NB_FPS.." (system)")
 
    render()
end


Bizarrement, j'obtiens 59. 59, c'est comme même proche de 60! Mais la variable NB_FPS m'indique un coup 29 et un coup 30. Vous remarquerez que si l'on fait le même calcul sur deux secondes on obtiens cette équivalence :
29 + 30 = (59 + 59)/2
59 = 128 / 2
Pour l'instant, on remarque bien que l'on appelle deux fois la fonction render pour une images.
La fonction render n'afficherai qu'une fois sur deux pour microlua?
Au lieu d'aller voir la doc à propos de la fonction render, allons plutôt directement dans un fichier important de microlua.

Dans le dossier de lua nous allons s’intéresser à libs.lua.(Je tourne sous la version 4.0.1 de microlua)
Nous allons commencer sa "lecture" dans l'ordre pour voir si d'éventuelle choses nous intéresseront.
à la ligne 38, je remarque ceci :
 
Code:
 mustCountFPS = true
D'après son nom, elle permet de savoir si l'on veut compter les FPS où non. Cepandant, vous pouvez la mettre à false ou true, cela ne changera rien concrètement.(n'oubliez pas d'éteindre le DS pour rechargez le fichier si vous le modifiez pour tester).

Une petite dizaine de lignes plus tard, je vois ce code ci :
 
Code:
 stopDrawing = function()
-- Count FPS
   if mustCountFPS then
      NB_FPS_COUNTER = NB_FPS_COUNTER + 1
      mustCountFPS = false
   else
      mustCountFPS = true
   end
   if tmrFpsCounter:time() >= 1000 then
      NB_FPS = NB_FPS_COUNTER
      NB_FPS_COUNTER = 0
      tmrFpsCounter:reset()
      tmrFpsCounter:start()
   end
C'est intérressant, c'est là que nos FPS sont comptés! Notre variable NB_FPS vient de là! On a enfin trouvé la source. Mais, regardé de plus prêt. Notre variable qui ne servais à rien juste avant, elle y est aussi. Elle nous permet bien de savoir si l'on compte ou pas l'image. Cependant, si elle valait true, elle vaudra ensuite false puis true, mais il y aura donc un tour sur deux qui sautera. (J'espère m'être fait compris) à l'appelle de cette fonction stopDrawing, on saute une fois sur deux l'incrémentation d'images. C'est là que l'on retrouve notre divisions par deux bien rondes.
En effet, si vous remplacez ce code :

 
Code:
 if mustCountFPS then
       NB_FPS_COUNTER = NB_FPS_COUNTER + 1
       mustCountFPS = false
    else
       mustCountFPS = true
    end
par celui-ci :

 
Code:
 if mustCountFPS then
       NB_FPS_COUNTER = NB_FPS_COUNTER + 1
    end
Vous obtiendrez bien les 60 FPS



Alors, on peut encore ce demander quand est appeler la fonction stopDrawing, elle n'est peut être appeler qu'une fois par render?
Et bien non, regardez bien, juste après la fonction stopDrawing se trouve justement la fonction render, et elle appelle deux fonction dont stopDrawing.
On remarquera aussi que la fonction startDrawing ne sert à rien car il suffit d’appeler directement screen.startDrawing2D() pour l'éxécuter.


Je n'ai pas été chercher plus loin et je me suis arrêté là. En effet, pour moi c'est une simple erreur de comptage.

PS : Excusé-moi pour les fautes. Confused

PS2 : Pour ma part, j'ai trouvé ceci dans l'autre sens, je fouillais dans libs.lua quand j'ai vu ça puis j'ai fait mes tests. Mais pour vous expliquer je trouvais plus simple de le faire dans l'autre sens.

PS3 : Désolé du post assez long, mais je veux vraiment comprendre pourquoi microlua serait limité à 30 FPS.



Revenir en haut
Publicité






MessagePosté le: Jeu 5 Juil 2012 - 10:10    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Ghuntar


Hors ligne

Inscrit le: 03 Aoû 2009
Messages: 323
Localisation: near Paris

MessagePosté le: Jeu 5 Juil 2012 - 10:28    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

Euh, je n'ai pas tout lu, mais voici les éléments d'explication : 


 - µlua utilise µlib pour l'affichage.
 - µlib utilise le moteur 3D de la DS pour tout afficher (pour afficher un sprite, il affiche 2 triangles (un carré, donc) avec une texture collée dessus).
 - Le moteur 3D de la DS est capable d'afficher du 60 fps, mais que sur un seul écran à la fois.


Alors l'astuce pour afficher "de la 3D" sur les 2 écrans, c'est d'afficher alternativement sur un écran puis sur l'autre. Evidement si ça restait comme ça, ça serait crade, donc après avoir affiché une image (render) il la stocke en mémoire pour l'afficher au tour de boucle suivant (pendant qu'il affiche le nouveau render sur l'autre écran).


C'est un peu confus, non ?


Donc oui, il y a bien 60 fps d'affichées, mais que 30 fps de calculées. 
Une dernière fois, histoir d'être sur : Toutes les 0.01666 seconde (comme ça y'en a 60 dans une seconde), une image est calculée et affichée sur un écran, et l'image calculé pour l'autre écran 0.016666 s avant est réaffichée.


Ghuntar.
_________________
http://code.google.com/p/ghuntlet/


Revenir en haut
ShiiFu


Hors ligne

Inscrit le: 05 Juil 2012
Messages: 51

MessagePosté le: Jeu 5 Juil 2012 - 10:38    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

Donc il y a bien 60 FPS mais alternés une fois sur deux sur chaque écran ce qui revient à 30 FPS par écran?

Revenir en haut
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Jeu 5 Juil 2012 - 12:25    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

Oui c'est bien cela
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
ShiiFu


Hors ligne

Inscrit le: 05 Juil 2012
Messages: 51

MessagePosté le: Jeu 5 Juil 2012 - 16:55    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

oki merci, mais comment savoir quel est l'écran qui va avoir le "rafraichissement" avec notre fonction render?

Revenir en haut
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Jeu 5 Juil 2012 - 18:10    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

Avec les fonctions qui sont disponibles avec µLua, tu peux pas. Ce système est géré directement par la µLibrary, caché sous la fonction render(), qui cache stopDrawing(), qui cache une autre fonction µLua qui cache les fonctions codées en C de la µLib (je dis ça de mémoire).

Pourquoi en as-tu besoin ?
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
ShiiFu


Hors ligne

Inscrit le: 05 Juil 2012
Messages: 51

MessagePosté le: Jeu 5 Juil 2012 - 18:21    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

Simple curiosité. Je ne comprend pas pourquoi on parle souvent de C. La lua est un language interprété du C?

Revenir en haut
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Jeu 5 Juil 2012 - 19:38    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

Non, ce qu'il faut entendre par interprété, c'est que chaque fonction de lua et de µlua ne sont pas exécutables directement, il faut un programme qui lit chaque ligne est interprète le code pour qu'il soit compris directement par la machine. Et l'interpréteur est codé dans un langage de bas niveau, pour nous donc l'interpréteur µlua est codé en C.
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
ShiiFu


Hors ligne

Inscrit le: 05 Juil 2012
Messages: 51

MessagePosté le: Jeu 5 Juil 2012 - 20:16    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

Et nous nous avons accès à tous jusqu'à l’interpréteur?

Revenir en haut
Papymouge
Modérateur

Hors ligne

Inscrit le: 10 Mai 2009
Messages: 693
Localisation: Vittel (88)

MessagePosté le: Jeu 5 Juil 2012 - 23:33    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

oui on à accès à tous, les sources de l'interpréteur sont dans le google code :
http://code.google.com/p/microlua
et plus précisément :
http://code.google.com/p/microlua/source/browse/#svn/trunk/luads/lua-5.1.3/…
_________________
La page de mes projets
L'ancienne page de mes projets


Revenir en haut
Ghuntar


Hors ligne

Inscrit le: 03 Aoû 2009
Messages: 323
Localisation: near Paris

MessagePosté le: Ven 6 Juil 2012 - 10:30    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

Mais quitte à accéder à l’interpréteur, autant coder directement en C...
D’ailleurs si tu t'y connais (en C), tu pourrais contribuer à l'amélioration de celui ci (de l'interpréteur, pas du C Razz).


Ghuntar.


 
_________________
http://code.google.com/p/ghuntlet/


Revenir en haut
ShiiFu


Hors ligne

Inscrit le: 05 Juil 2012
Messages: 51

MessagePosté le: Ven 6 Juil 2012 - 18:47    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

D'accord, merci pour toutes ces infos, je vais regarder ça.

Une petite questions comme même. Microlua n'a aucun mal a fonctionné sur la nouvelle 3DS?

EDIT : ainsi que connaître les élément d'une table que l'on ne connais pas?


Revenir en haut
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Ven 6 Juil 2012 - 19:14    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

Je crois que quelqu'un ici a fait tourner MicroLua sur la 3DS.

Pour "visiter" une table en Lua, je suppose qu'une boucle for devrait le faire :
Code:
for index, element in pairs(table) do
    -- ce que tu veux, afficher l'index et l'élément je suppose
end

_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
ShiiFu


Hors ligne

Inscrit le: 05 Juil 2012
Messages: 51

MessagePosté le: Ven 6 Juil 2012 - 20:17    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

Ayant été à la japan expo aujourd'hui et ayant vu ces dernière console je me suis posé la question, merci de ta réponse rapide Wink .

Je n'ai pas bien compris ta méthode. Exemple pour une table timer. Si je connais sa fonction start et sa fonction stop mais que je ne connais pas la fonction reset de cette table. Quel est le moyen de le deviner?
Je ne pense pas que cela sois possible mais on ne sais jamais.

EDIT :
Papymouge a écrit:

oui on à accès à tous, les sources de l'interpréteur sont dans le google code :
http://code.google.com/p/microlua
et plus précisément :
http://code.google.com/p/microlua/source/browse/#svn/trunk/luads/lua-5.1.3/…

Je ne trouve pas de pack complet si je souhaite tous télécharger.
Où se trouve ce fameux interpréteur sur notre DS?


Revenir en haut
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Sam 7 Juil 2012 - 19:07    Sujet du message: Microlua, 30 ou 60 FPS? Répondre en citant

La documentation :p
Par exemple, avec :
Code:
for index, elem in pairs(Timer) do
    print(index, " : ", elem)
end

Tu auras la liste des éléments de la table Timer, sous la forme "clé : valeur" (enfin, la fonction print n'est pas utilisable sur la DS, faut bidouiller avec screen.print() et j'avais la flemme de réfléchir).

Ceci est le pack des sources de la 4.5. Mais la dernière version est la 4.5.2. Tu peux cloner le dépôt du Google Code en suivant ce tutoriel (avec SVN) ou celui-là (avec Git).

L'interpréteur, c'est le fichier microlua.nds que tu copies sur ton linker.
Lua est un langage interprété, il est donc transformé en langage machine à la volée par l'interpréteur, qui lui doit donc déjà être compréhensible par la console.
C'est comme un interprète dans la vie courante. Imagine que quelqu'un (l'interprète) te traduise de l'allemand par exemple, parlé par quelqu'un d'autre. L'interprète "transforme" l'allemand en français. Et bien pour µLua c'est la même chose : l'allemand, c'est le langage Lua ; la personne qui parle allemand, c'est le fichier .lua qui contient le script ; l'interprète, c'est le fichier microlua.nds, et toi, c'est la console.
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 10:26    Sujet du message: Microlua, 30 ou 60 FPS?

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Demande d'aide Toutes les heures sont au format GMT + 1 Heure
Aller à la page: 1, 2, 3  >
Page 1 sur 3

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com