2010-10-20 5 views
1

Je travaille sur un logiciel de CAO 2D basé sur Opengl qui nécessite une utilisation intensive de l'accélérateur matériel OpenGL (en poussant parfois 250 millions de vertex par seconde). Voici mon problème ... à chaque fois que la fenêtre stagne pendant plus de 10 secondes, l'accélérateur OpenGL (Geforce 9800 GT dans ce cas) passe en mode inactif. Quand la fenêtre est restituée après la période inactive, j'obtiens le 1/4 de la fréquence normale et cela dure 3-4 secondes avant que l'accélérateur 3D ne se réveille et ne passe à la vitesse maximale.Accélérateur de matériel Opengl dormant après la période d'inactivité

Question:

  1. Comment puis-je éviter cela?
  2. Existe-t-il une méthode OpenGL pour empêcher GPus de passer en mode inactif?

Merci pour vos réponses.

Gary

+2

Comment savez-vous que l'accélérateur devient inactif? Pour moi, cela ressemble moins à un problème d'openGL, et plus à un problème de carte. Y a-t-il une sorte d'économie d'énergie sur vos cartes/pilotes? – jasper

Répondre

0

Il y a plusieurs façons dont vous pouvez garder un GPU occupé, mais la façon de feu le plus sûr de garantir qu'il fait quelque chose et pas seulement Différer commandes est d'en tirer quelque chose. glClear() et chaque commande glDraw * constituent des commandes de dessin réelles. Jetez un glfinin() à la fin du tirage pour garantir l'exécution du flux de commandes gl.

On peut supposer que vous ne voulez pas voir ce dessin afin de créer un nouvel objet framebuffer, créer une petite texture RGBA (soit 256 sur un côté), puis fixez la texture au point d'attache de couleur 0.

Lorsque vous vouloir garder le GPU occupé à dessiner dans ce tampon hors écran. Tout est supposé que vous ne pouvez pas, par exemple, simplement modifier vos paramètres d'amorçage ou de panneau de contrôle pour moduler le comportement de gestion de l'alimentation sur la carte. Chaque système d'exploitation a une sémantique différente ici.

Questions connexes