Graphisme 2D Plein écran avec Window

Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
- - Dernière réponse : epineurien
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
- 7 nov. 2007 à 11:15
Bonjour !


Voilà , j'ai un problême tout simple : je veux faire une application
(qui utilise les api-window au passage) qui puisse passer en plein
écran (dans la résolution de mon choix) et afficher un pixel là où j'en
ait envie . (A priori rien d'insurmontable) .


Problêmes :

**Avec user32/gdi32 (truc de base quoi) : 

-j'arrive juste à faire une fenêtre de la taille voulue (via CreateWindowEx) mais pas en plein écran .

-j'arrive pas a faire fonctionner SetPixel dessus , même en ayant récupérer le DeviceContext via GetDC,Handle-de-la-fenetre .


**Avec openGL / directdraw :

-Ca part tout de suite dans des trucs de folie avec des vertexs , des backbuffer et d'autre trucs dont j'ai absolument pas besoin .


Donc je voudrais :

-Une API (ou n'importe quoi) : qui me permettent de passer en plein écran (comme avec ces bonnes vieilles fonctions VESA ).

-Un moyen d'accéder à la mémoire vidéo , ou n'importequoi d'autre du moment que je peut placer un satané pixel aux coordonnées

X,Y (comme avec le es:di avec VESA ou alors un truc du genre SetPixel , mais qui fonctionne) .


Tout le reste : fonctions 3d , matrice de rotation , calcul
d'illumination , remplissage de feuille d'impot ,.... je peut (et
surtout je veux) m'en charger tout seul , mais pour ca il faut pouvoir
afficher quelquechose à l'écran (juste un pixel , rien qu'un , par
pitié) .


Donc voilà , ca fait des jours que je cherche et je que suis au bord de la crise de nerf  .

Alors si quelqu'un à la solution , ou une adresse de site ...
Afficher la suite 

6 réponses

Messages postés
141
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
20 avril 2011
0
Merci
Salut,

tu peux regarder du coté de l'API SDL (Simple Direct media Layer) qui permet entre autre de gérer des surfaces qui peuvent être fullscreen ou non et qui permet d'accéder aux pixels de manière simple. De plus, ce toolkit est multi-plateforme, ce qui te permettra de rendre ton code ouvert à tout le monde et non réservé à windows (sauf si ensuite tu fais des appels systèmes windows, mais même dans ce cas, SDL te permettra de gérer facilement la partie graphique).

http://www.libsdl.org/

et un tutos de code sources ;) :
http://www.cppfrance.com/codes/TUTORIAL-INITIATION-SDL_37172.aspx

Gentoo... que du bonheur ...
Commenter la réponse de _dune2_
Messages postés
202
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
29 septembre 2008
0
Merci
Bonjour epineurien,

Je ne sais pas si celà répond à ton problème mais regarde une de mes sources, elle a été faite pour ceux qui débutent avec le graphisme sous windows.
Il faut à priori créer un contexte GDI avec BeginPaint lors de l'emission du message WM_PAINT et redessiner le contenu du dessin.

http://www.asmfr.com/codes/CREATION-GRAPHIQUES-AVEC-API-WINDOWS_34529.aspx

Le programme est prévu pour une résolution d'écran de 1024 x 768 mais je pense que tu sauras l'adapter à la taille souhaitée.

A+
Commenter la réponse de cs_Nasman
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
0
Merci
Bonjour Nasman ,

J'avait déjà vu ta source ,mais j'ai pas retenu ta méthode car (si j'ai bien compris) , chaque fois que tu souhaite changer la couleur du pixel , tu doit faire un nouveau CreateSolidBrush+2 x SelectObject+DeleteObject ...
Même avec un test vérifiant si le nouveau pixel est de la même couleur que le précédent (pour économiser les changements) , ca reste absolument impossible à faire tourner dans un temps décent (le but ultime étant de faire de la 3D , donc il y a peu de chance que deux pixels soit de la même couleur) .
Idem pour les autres fonctions que tu utiliser : "createPen , selectobject , movetoex, lineto ..." , a chaque fois il y a 2/3 fonctions pour 1 tracé .
Déjà quand j'était en 16bits j'avait tendance à faire trés gaffe avec le temps d'affichage d'un pixel , mais là ; plusieurs API-Windows pour un seul point sur l'écran , "ca le fait pas" .
Donc ta technique fonctionne trés bien pour faire de grandes surfaces uniformes (rectangle ,ligne , ...) , mais pour le reste ...
 
Ah moins que je n'ai pas bien compris ton code ?

;------------------------------------------
Bonjour _dune2_ (vive Frank Herbert) ,

J'aimerais faire ma propre librairie , ca me gêne déjà de devoir faire avec les API de window , alors rajouter une librairie extérieure , j'aimerais éviter .
Cela dit je vais jeter un coup d'oeil quand même .

A+
Commenter la réponse de epineurien
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
0
Merci
Toutes mes excuses à Nasman ...

Je viens de tester ton code , et ... Setpixel fonctionne avec ton BeginPaint/EndPaint .
On a une procédure par pixel , donc pour la vitesse ca ira .
Et un probleme de résolu grâce à toi (merciiiiiiii) !

Maintenant , il ne reste plus que le second prôbleme : comment on passe une fenêtre window en plein écran ? (si possible avec juste les .lib de window , il doit bien y avoir qqc dans gdi32 , non ?)
Commenter la réponse de epineurien
Messages postés
202
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
29 septembre 2008
0
Merci
Bonjour epineurien,

Qu'entends tu exactement par plein écran ? Est ce que tu veux dire que la fenêtre prenne tout l'écran (dans ce cas il faut récupérer le mode d'affichage avec GetSystemMetrics) et déterminer les coordonnées de tes pixels en conséquence), si tu veux supprimer la barre système de ta fenêtre et la bordure, il faut passer les paramètres adéquats à CreateWindow.


A+
Commenter la réponse de cs_Nasman
Messages postés
83
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
22 mars 2011
0
Merci
Eh bien en fait ... les deux .

Je voudrais que la fenêtre de dessin prenne tout la place (donc pas de bordure/barre systeme) et si possible que je puisse être dans une autre résolution que celle du bureau . Comme ce qu'on obtient avec une interruption VESA en somme , ou quelque chose d'approchant .
Commenter la réponse de epineurien