• Welcome to Powerbasic Museum 2020-B.
 

News:

Forum in repository mode. No new members allowed.

Main Menu

HUD controls 64-bit demo

Started by Patrice Terrier, November 24, 2013, 12:51:51 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Patrice Terrier

This is a Visual Studio 2013 project.

To test the C++ 64-bit version of WinLIFT/GDImage, there is no better way than writting demos.

"HUD controls" expose a complete interface to create interactive graphic applications, {and even games.}
This is possible because all the controls are embedded directly inside of the graphic container,
and each graphic component have a set of properties letting them act like regular button child controls.

This is done through the use of events and a callback to monitor/process the messages of the graphic container.
All animations and sound effects are rendered into a dinstinct thread to "play and forget".

Theme:
The "Iron man" WinLIFT theme is used to skin the main window, it is provided with all the original .png files, to let you figure how to create your own.

Hardware requirements:
They are the same that for gaming computers, aka: Multicore I7 and a good graphic card nVidia or AMD/ATI.

Some of the widget/sprite properties applying to raster or vector objects:

  • Show/Hide.
  • Anchor mode.
  • Locked/unlocked (draggable).
  • Frame selection.
  • Color/transparency.
  • Full 360° angle rotation.
  • Z-order.
  • Clone (raster objects only).
  • Linked with (widget).
  • Tooltip support.
  • etc.

Screen shot:




While working on this project, i can see how picky C++ is, compared to PowerBASIC, especially when dealing with temporary variables passed on the stack to procedures.

About the user interface

Background:
You can change the transparent backgound, by clicking with the left or right mouse button on the top left Iron Man icon.


Main HUD control, drag either the red, green, or blue ball in the direction shown below with the red arrows.
(Click with the right mouse button on any of the blue, red or green ball, to restore the initial rotation angle).




Polyline, drag any of the planet to redraw the polyline.


(Click on the [Neutral] button to restore the polyline default.)


Furtive window, click on the small green < to hide the window, and on > to show it.




Weappon buttons, you can use either the laser, the rocket, or the torpedo.
(You can click or double click multiple times with the left mouse button, to produce battle sound.)




Skinned buttons, these are {regular} WinLIFT buttons used directly inside of the GDImage graphic control.




Sounds

While playing with HUD controls, you should turn on the loud speakers to ear the various sound effects synchronized with animations.


Because the size of the whole project .RAR file was too large for this forum (12,385 Kb),
it has been splitted into 2 files:
1 - HUDcontrols.rar (the VS2013 project)
2 - Background.rar (copy the extra png files into the x64\Release\background subfolder)

Note: The binary files are inside the x64\Release subfolder,
however the single binary file (no source code) could also be downloaded from this link.

...
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Patrice Terrier

#1
The first post of this thread has been updated, with instructions + the link to download the HUDcontrols.RAR file.

Because this is my first Visual Studio 2013 project, if ever you encounter a problem(s), be kind enough to report it here.

Note 1: I had to use a .RAR file to embed the new hidden VS2013 .suo files, because ZIP didn't catch them.

Note 2: This 64-bit project has been timed to run on I7 multi-core computer, to synchronize correctly sounds and animations, on that type of computer it should not used more than 4% of the CPU.

...
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Patrice Terrier

James--

The solution is to remove the ressource file, i used it only to embed the Iron Man icon, nothing else.
(And that would produce smaller resulting file of course.)


Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

James C. Fuller

Patrice,
  Removed the rc file and it built and ran fine.
Good stuff!!
I probably could compile the resource file with rc or gorc and link it to the exe with the LinkRes2Exe utility I've mentioned before.
I was really surprised it worked for 64 as well as 32 bit exe's

James

Patrice Terrier

#4
James--

Forget to say that the 64-bit WinLIFT/GDImage DLL(s) have been updated, because the purpose of the demo was to check them.
And indeed it helped me to fix a few bugs.  :)

One nasty problem i had, was a typo, one line was using a trailing "," instead of ";" and that problem was not detected by VS2010, while VS2013 reported it asap.  8)
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Patrice Terrier

#5
GDImage 7.00 is able to use Private Font collection, i shall make a small change to the demo to show this with the furtive window.

The nice thing with private font collection is that they do not need to be installed first, and they are always available to the software whatever the PC being used.

They are also very handy to create cheap and easy sprites, for those that are not graphic challenged. :)
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Patrice Terrier

The HUD controls source code and the WinLIFT/GDImage DLL(s) have been updated to work with private Font Collection.

There are two formats supported: .TTF and .OTF.

Here is how to use a Private Font Collection,

from GDImage:
Quote
ws = gs_ResourcePath; ws.append(L"lcd.ttf"); // Here we are using a private font (no need to register it first)
ZD_DrawTextToCtrlEx(gh_GDImageCtrl, (WCHAR*) TIME$().c_str(), x - gn_TimeX, y - gn_TimeY, 238, 42, ZD_ColorARGB(128,RGB(255,255,64)),
                   (WCHAR*) ws.c_str(), 40, ID_TIME, ZS_VISIBLE, 0, StringAlignmentCenter);

from WinLIFT:
Quote
sComponent = sResource; sComponent += L"Pristina.ttf"; // Use Private font collection.
skSetLabelFont(hCtrl, (WCHAR*) sComponent.c_str(), 28, skARGB(255, 255,255,0), FontStyleRegular);

Really easy, for something rather complex :)
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Patrice Terrier

#7
The first post of this thread has been updated with new .RAR files.

Four new animated controls, based on the circle.ttf private font resource, have been added to the project.
The main screen shot has been updated as well.

...
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Patrice Terrier

La "vision tête haute" consiste à superposer des informations nécessaires au pilotage, à la navigation ou à la réalisation d'une mission, en liaison permanente avec l'environnement extérieur. Le pilote pouvant consulter les informations fournies par ses instruments de bord sans quitter la route (ou le ciel) des yeux.

Le concept de "vision tête haute" a été popularisé par des films tels que : "Iron Man", "Oblivion", "Avatar", "Minority report", qui l'utilisent largement sur de grands écrans plats transparents, qui préfigurent ceux que nous utiliserons d'ici quelques années.

Cette technologie qui consiste à superposer des images d'opacité variable pour ne pas masquer l'arrière plan de l'écran, est d'ores et déjà disponible dans la bibliothèque graphique GDImage, qui est à la base de cette démo.

Le projet à l'origine a été développé en C++, j'ai décidé de le porter en WinDev pour voir si les possibilités graphiques avancées de GDImage pouvaient être utilisées dans cet environnement en conservant des performances acceptables.

C'est le résultat de ce travail que je vous propose de tester aujourd'hui, mais autant vous le dire tout de suite : le code utilisé n'est pas destiné aux débutants. Car tout repose sur l'utilisation de l'API bas niveau pour limiter au maximum la taille du Framework WinDev utilisé (uniquement "machine virtuelle" et "fonctions standard").

Dans ces conditions il est même possible de créer de véritables jeux interactifs, qui combinent sons et animations comme le montre le code.

COMPOSITION D'ECRAN
La technique qui permet de superposer différents plans transparents les uns au dessus des autres, se nomme "composition", elle repose sur l'utilisation du "Device Window Manager" (DWM) apparu avec le mode AERO de Windows VISTA.
Au lieu de dessiner l'écran de façon conventionnelle, tous les affichages sont rendus directement en mémoire vidéo (surface DirectDraw) dans leur ordre de superposition (du bas vers le haut) et sont rafraichis en une seule fois avec un FPS de 66 Hz (66 rafraichissements par seconde). GDImage et WinLIFT sont pour le moment les seules bibliothèques graphiques qui tirent réellement parti des possibilités d'affichage offertes par les GPU actuels, à condition de disposer d'une carte graphique qui soit AERO compatible. A noter que sous Windows 8, tous les affichages sont gérés par DWM et qu'il n'est plus possible de le désactiver ( note : le mode "blur" n'est plus disponible en version 8 ).

CONFIGURATION MATERIEL
Comme le savent tous les GAMERS, les applications graphiques sont les plus gourmandes en ressources matériel.
Les animations et les effets sonores utilisés ont été calibrés pour fonctionner sur un ordinateur multi-cœur de type I7 doté d'une bonne carte graphique ATI ou nVIDIA avec 2 GB. Le tout avec un indice de performance Windows proche de 6.

Les tests ont été réalisés sur un ASUS N76V avec un indice de performance Windows de 5.9, dans ces conditions la charge moyenne du CPU est d'environ 1 à 2%, ceci grâce à l'utilisation du GPU à la place de la mémoire conventionnelle.

A PROPOS DU CODE
Toutes les fonctions WinDev susceptibles d'augmenter la taille du Framework ont été systématiquement remplacées par leur équivalent en API bas niveau (cf. collection de procédures globales "ApiSDK").
Le code principal se trouve dans la collection de procédures "MainSection" et le point d'entrée du programme se trouve dans "MainWindow" qui remplace le code "fenêtre principale" de WinDev.
Ecrit en code 64-bit, ce projet ne fonctionnera pas sur un ordinateur 32-bit.

PROGRAMMATION SDK BAS NIVEAU
Le code utilise la syntaxe du SDK Windows qui est la seule identique quel que soit le langage de développement utilisé, ce qui permet un portage {facile} du code d'un environnement à l'autre. L'usage de fonctions procédurales est systématique pour éviter les niveaux d'encapsulation supplémentaires de la POO et surtout l'adjonction supplémentaire du Framework DotNET.

INTERFACE UTILISATEUR
Elle est basée sur la seule utilisation de GDImage et de WinLIFT. Il n'y a aucune fenêtre et aucun champ WinDev.
Tous les contrôles sont des objets de type "sprite" GDImage, qui se comportent comme les champs boutons dans une fenêtre WinDev.

Tous les sprites ont des propriétés similaires aux champs WD, en voici quelques unes :
- Visible/invisible.
- Ancrage.
- Actif/inactif.
- Frame actif.
- Couleur/transparence.
- Facteur de zoom.
- Angle rotation de 0 à 360°.
- Z-order.
- Clone (objets raster uniquement).
- Liés avec (widget).
- Bulle d'aide.
etc.

CAPTURE D'ECRAN




ARRIERE PLAN
Plusieurs fonds d'écran sont livrés avec le projet, vous pouvez les changer en cliquant avec le bouton gauche ou droit de la souris sur l'icône "Iron Man" qui se trouve en haut à gauche de la fenêtre.


MOTIF CIRCULAIRE CENTRAL
Il représente une pseudo commande qui pivote sur elle-même, lorsqu'on déplace les boules de couleur dans le sens indiqué par les flèches, ont peut restaurer la position initiale en cliquant avec le bouton droit de la souris sur n'importe laquelle de ces boules.




POLY-LIGNE
Celle-ci est composée d'une succession de planètes que l'on peut déplacer à la souris par tiré déplacé.


(Un click sur le bouton "Neutral" permet de revenir à l'état initial)


FENETRE FURTIVE
C'est un concept WinDev que j'ai repris pour afficher ou masquer l'heure (il y a un effet sonore différent selon l'ouverture ou la fermeture de la fenêtre furtive).




ARMEMENTS
3 types d'armement sont disponibles avec des effets sonores distincts : "Laser", "Roquette", "Torpille".
En cliquant rapidement sur les différents boutons, on peut provoquer le son d'une bataille sidérale.




BOUTONS RECTANGULAIRES
Ceux-ci sont de {véritables boutons} WinLIFT disposés directement sur le champ GDImage, ils sont gérés comme les boutons circulaires de l'armement, à partir du message WM_COMMAND, envoyé à la fonction callback principale "GDImageCallback".




EFFETS SONORES
Ceux-ci sont synchronisés avec les différentes animations et sont basés sur des fichiers WAV standards.


UTILISATION D'UN MANIFEST
L'utilisation du fichier "manifest.txt", permet de voir les bulles d'aide lorsque le code est compilé, sans ce manifeste elles ne sont visibles qu'en mode GO.


LIEN DE TELECHARGEMENT DU PROJET WD17
http://www.zapsolution.com/preview/HUDwindow.zip

Si vous avez des questions sur l'utilisation de ce code, n'hésitez pas, je ferai de mon mieux pour y répondre.

...
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com