Pour permettre à plus de lire ce message, ainsi que pour promouvoir cette belle langue qu’est le français, ce message est bilingue. / To allow more people to be able to read this message, as well as to promote french, this message is bilingual.
Hi everybody, It’s my first post on this forum!
I have been using SDL for a while, but, as of its intimidating super long GNU GPL license, I decided to give SDL2 a go. So I downloaded it. However, I quickly realised that the rendering system was completely different. It used all this SDL_Renderer stuff instead of the old SDL_Surface.
But the SDL_Surface system still existed. It had changed a little(Ex: SDL_Flip() got replaced by SDL_UpdateWindowSurface()), but that did not cause me any trouble.
To test SDL2, I wanted to create a little emulator. I was glad I had chosen SDL_Surfaces, as it turned out the SDL_Renderer system hadn’t any good way of doing pixel manipulation. I could have created a surface and then converted it to an SDL_Texture and then render that SDL_Texture, but I didn’t see the purpose of doing these extra steps. Plus, as far as I knew, the system I was making an emulator for(Chip8) had not anything like double buffering, and copying the surface would create some kind of double buffering. So I obviously didn’t want that.
I ran my little emulator once done. It seemed to work perfectly fine. But then came a twist. It was double buffered, exactly what I did not want.
I quickly realised that SDL_Surfaces were double-buffered by default or something like that. Now, that was a nightmare! I searched everywhere, but I could not find how to do single buffering on SDL2, whether using SDL_Surface or SDL_Renderer.
So, is it possible to do it? How can I do single-buffering?
Bonjour tout le monde, c’est mon premier message sur ce forum!
Voilà assez longtemps que j’emploie SDL. Son seul désavantage était sa license, la GNU GPL, qui était intimidante du fait de sa taille. C’est pourquoi j’ai voulu tester SDL2, qui était sous la ZLIB. Je l’ai donc téléchargé. C’est rapidement que j’ai constaté que le système de rendu était complètement différent. Au lieu de ces bon vieux SDL_Surface, SDL2 employait un nouveau système, les SDL_Renderer.
Et cependant, le vieux système de surfaces existait encore, à ma grande joie. Il avait changé un peu(Ex: SDL_Flip() s’est fait remplacer par SDL_UpdateWindowSurface()), mais ce n’était pas ce qui allait m’arrêter.
Pour tester SDL2, j’ai voulu faire un émulateur. Il s’avéra que le système de SDL_Renderer n’avait aucune façon pratique de faire de la manipulation de pixels, et je me suis félicité d’avoir choisi les surfaces. J’aurais pu, bien sûr, convertir ma surface en SDL_Texture, puis copier cette texture à l’écran, mais pourquoi m’embarrasser de ces étapes supplémentaires? Et puis, pour ce qu’en j’en sais, le système que je veux émuler(Chip8), n’a pas de double tamponnage, et copier la surface aurait créé un genre de double tamponnage. Je ne voulais définitivement pas cela.
Une fois terminé, j’ai testé mon émulateur. On aurait dit qu’il fonctionnait correctement. Mais là, l’inattendu est arrivé. Et sans frapper, en plus. Eh oui, mon rendu était doublement tamponné.
Il ne me fallut pas longtemps pour découvrir que les SDL_Surfaces étaient doublement tamponnées par défaut ou quelque chose dans ce genre là. C’était un cauchemar! J’ai cherché partout sans rien trouver pour désactiver cela, que ce fut pour les SDL_Renderers ou les SDL_Surfaces.
Alors, est-ce possible? Puis-je désactiver ce double tamponnage? Utiliser un seul écran et pas deux?
Je vous remercie en avance pour vos réponses. / I thank you in advance for your answers.