IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

[Direct 3D] Help ! Je dessine tout noir après un reset device


Sujet :

DirectX

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut [Direct 3D] Help ! Je dessine tout noir après un reset device
    Salut,

    Encore un problème avec le reset device. Tout allait très bien jusqu'à ce que j'utilise une nouvelle méthode de dessin : je créé une texture de rendu sur laquelle je dessine des choses et du texte puis j'utilise un sprite pour recopier un rectangle de cette texture vers le backbuffer.

    Lorsque je fais ça la première fois ça marche sans problème. Puis si je fais un reset en nettoyant et en recréant tout comme il faut (je crois), ça marche toujours mais tous les tracés faits avec "DrawPrimitive" sont effectués mais en noir à la place de la couleur que j'ai écrit dans les vertices. Par contre les couleurs du fond et du texte sont bonnes. Ca a l'air d'être lié au principe de recopie de texture car tous mes autres "DrawPrimitive" sont bons.

    Voici ce que je fais :
    Pour OnLostDevice (appelé avec le reset device)
    Un "Release" de la texture et de sa surface
    Un "Release" du vertex buffer
    un "OnLostDevice" sur la font et le sprite

    Pour OnResetDevice (appelé après le reset device)
    Un "CreateTexture" de la texture et un "GetSurfaceLevel" pour initialiser la surface
    Un "CreateVertexBuffer" pour récréer le vertex buffer puis un "Lock" / "Unlock" pour le remplir correctement (exactement comme la première fois)
    un "OnResetDevice" sur la font et le sprite

    Un idée pour expliquer ce phénomène bizarre ?
    Merci

  2. #2
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    est-ce que tu renvoies bien tous tes renderstates après le reset ?

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par LeGreg
    est-ce que tu renvoies bien tous tes renderstates après le reset ?
    Oui, j'ai une fonction qui positionne tous les renderstates à l'init et c'est la même qui est appelée lors d'un reset. S'il y avait un problème à ce niveau je pense que ça se verrait aussi sur les primitives qui sont dessinnées directement sur la backbuffer. Ici ça ne concerne que les primitives qui sont dessinées sur une texture puis copiées depuis cette texture vers le backbuffer via un sprite.

    Par contre il est vrai que je ne les positionne pas tous exhaustivement, je compte sur les valeurs par défaut. Y en a t-il un en particullier qui pourrait être responsable de mon problème ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 82
    Points
    82
    Par défaut
    Logiquement, si tu as le state lightenable à true, valeur par défaut, les couleurs de sommet sont noir et la couleur est déterminée par le matériel et non les vertices. Par défaut vertexcolor est toujours a true, donc je ne pense pas que ça vienne de ce renderstate là. Au pire vérifie avec le nvperf ou celui de ATI pour connaitre les render state activées lors du draw des primitives en question.

  5. #5
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Je suis en train de chercher du côté du "SetRenderTarget" qui je positionne momentanément sur ma texture de rendu. Je me demandais quelle était la signification de l'index qui est passé en premier argument (y'a rien dans MSDN). D'habitude je le mets toujours à 0 alors j'ai essayé de mettre 1 pour la texture. J'ai l'impression que dans ce cas je ne dessine pas dessus, du coup je me retrouve à copier un texture non mise à jour.

  6. #6
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Bon j'ai fini par trouver, évidemment c'est une bétise. Je redessine la texture juste après son OnResetDevice. Le problème était que j'appelais le OnResetDevice de toutes les ressources avant d'appeler la fonction qui initialisait les RenderStates. De ce fait la texture était générée sans renderstate et le reste avec...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 04/04/2013, 16h37
  2. Réponses: 4
    Dernier message: 19/04/2007, 22h37
  3. écran noir après install Ovislink
    Par lucho27 dans le forum Réseau
    Réponses: 1
    Dernier message: 18/02/2007, 18h06
  4. [ImageMagick] Captcha crytographp image toute noire
    Par vodasan dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/02/2007, 07h35
  5. [GD] Obtention aléatoire d'un message d'erreur et l'image enregistrée est toute noire
    Par maty2006 dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 30/05/2006, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo