Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Limite de RenderTextures?  (Lu 2815 fois)

0 Membres et 1 Invité sur ce sujet

Zylann

  • Newbie
  • *
  • Messages: 15
    • Voir le profil
Limite de RenderTextures?
« le: Mai 01, 2014, 03:03:23 am »
Bonjour,
je développe un projet avec SFML.NET, et jusque là aucun problème, le binding fonctionne très bien...
Sauf lorsque j'ai commencé à instancier beaucoup de RenderTextures.

Dans mon projet, dès que j'arrive à plus de 90 RenderTexture de 128x128 pixels, tout se freeze et crash sur cette erreur :
"Failed to create an OpenGL context for this window"

Autre chose étrange: avant de crasher, mon application consommait 500Mo de RAM (Au lancement je n'ai que 50Mo environ)
. J'ai compté mes allocations, et compte tenu de la taille de mes RenderTexture (128x128), une centaine ne devraient pourtant pas dépasser les 10Mo au total :O

Je ne comprend pas ce qui se passe, y-a-til une limite au nombre de RenderTextures? Pourquoi semblent-elles peser aussi lourd?
J'utilise Visual Studio en C# sous Windows avec une carte graphique AMD, drivers fraîchement mis à jour.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Limite de RenderTextures?
« Réponse #1 le: Mai 01, 2014, 10:05:02 am »
Chaque RenderTexture crée aussi son propre contexte OpenGL. Donc c'est lourd, et ça peut aussi expliquer qu'au-delà d'un certain nombre le driver panique.

Pourquoi en crées-tu autant ? Je ne vois aucune situation où il en faudrait autant.
Laurent Gomila - SFML developer

Rodd

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
    • E-mail
Re : Limite de RenderTextures?
« Réponse #2 le: Mai 01, 2014, 12:29:00 pm »
Chaque RenderTexture crée aussi son propre contexte OpenGL. Donc c'est lourd, et ça peut aussi expliquer qu'au-delà d'un certain nombre le driver panique.
J'imagine qu'en créer un puis le détruire après avoir généré l'image voulu résoudrait la situation ?


Pourquoi en crées-tu autant ? Je ne vois aucune situation où il en faudrait autant.
Personnellement je l'utilise pour mes boites d'entrée pour le débordement lorsque le texte entrée est trop grand par rapport à la zone.. Du coup si il y a un projet qui me demande pas mal de boite de saisie, ca va vite..

Zylann

  • Newbie
  • *
  • Messages: 15
    • Voir le profil
Re : Limite de RenderTextures?
« Réponse #3 le: Mai 01, 2014, 01:24:55 pm »
Dans mon projet, je génère beaucoup de contenu procéduralement en temps réel, et pour chaque lumière 2D j'ai besoin d'une RenderTexture (deux plus précisément).
J'ai entendu qu'on n'était pas obligé de faire un nouveau contexte pour chaque RenderTexture en OpenGL, pourquoi toujours en créer un nouveau?
« Modifié: Mai 01, 2014, 02:22:26 pm par Zylann »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Limite de RenderTextures?
« Réponse #4 le: Mai 01, 2014, 07:42:16 pm »
Au pire on peut toujours s'en sortir en réutilisant toujours la même RenderTexture. Au pire il t'en faut deux, si tu veux dessiner le contenu d'une sur l'autre. Aucune raison d'en avoir 90 en même temps.

Citer
J'ai entendu qu'on n'était pas obligé de faire un nouveau contexte pour chaque RenderTexture en OpenGL, pourquoi toujours en créer un nouveau?
C'est beaucoup plus simple et efficace à gérer, par rapport aux états OpenGL. Ce sera sûrement moins vrai lorsqu'on passera à une architecture OpenGL 2.
Laurent Gomila - SFML developer

Zylann

  • Newbie
  • *
  • Messages: 15
    • Voir le profil
Re : Limite de RenderTextures?
« Réponse #5 le: Mai 01, 2014, 08:44:16 pm »
J'ai besoin de les garder car ce sont des lumières en grande partie statiques, je ne les recalcule qu'en cas de besoin (voire pas), donc je ne peux pas réutiliser mes RenderTextures aussi facilement.

Normalement, il me semble qu'une RenderTexture est juste une Texture, au final.
Je ne savais pas que SFML n'utilisait pas encore OpenGL 2, depuis le temps j'aurais cru, surtout depuis la version 2.1  :o
Une "upgrade" est prévue pour SFML 2.2 ou +?

En attendant, j'ai changé mon architecture pour utiliser une sorte d'atlas de lumières sur une seule RenderTexture. Au final c'est sans doute plus efficace...


Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Limite de RenderTextures?
« Réponse #6 le: Mai 01, 2014, 10:38:35 pm »
Citer
Normalement, il me semble qu'une RenderTexture est juste une Texture, au final.
Si ça t'intéresse tu peux regarder le code source.

Citer
Je ne savais pas que SFML n'utilisait pas encore OpenGL 2, depuis le temps j'aurais cru, surtout depuis la version 2.1
Ce n'est pas si simple. Est-ce que tu sais ce que cela implique ?

Citer
Une "upgrade" est prévue pour SFML 2.2 ou +?
Il faut repartir de zéro au niveau du module graphique. Donc c'est prévu, mais certainement pas pour SFML 2.2.

Citer
Au final c'est sans doute plus efficace...
Y a des chances, oui.
Laurent Gomila - SFML developer