Author Topic: GDImage 64 bit sur une plateforme windev 26  (Read 364 times)

Michel Lauzon

  • Newbie
  • *
  • Posts: 5
GDImage 64 bit sur une plateforme windev 26
« on: December 16, 2024, 10:28:42 pm »
J'ai récupéré la DLL de GDImage et j'ai modifié l'exemple "The Cube" de Patrice Terrier... Pour la faire rouler sur une plateforme Windev 26 de PCSoft sur Windows 10...

Le but est de renforcer mon jeux de dés (Dix Milles) avec du graphisme qu'offre GDImage. Je dois donc faire rouler 5 dés sur un aire de jeu...

Partant de la routine THE CUBE, je réussis à faire le lancer de un dé... Dans mes procédures je réussis à lancer les 5 dés et recouvrir la face terminal pour pouvoir continuer le jeux mais toujours un seul dé roule sur la surface de jeu.

Ainsi je peux relancer les dés mais après un certain nombre de lancer, erreur fatal met un terme à l'application. Je n'arrive pas à ouvrir le DUMP de la mémoire pour voir ce qu'il se passe mais je me doute qu'il y a une surcharge de la mémoire n'étant pas capable de bien éliminer toutes les instances des SPRITES créer...

Je me heurte à ceci car je n'ai pas les connaissance pour bien manipuler les librairies de graphismes !!! J'aimerais bien trouver des documents pouvant me guider dans cette nouvelle aventure???

Essentiellement, de la routine originale j'ai modifié les procédures:
 1- La fin de l'initialisation de WIN_GDImage
 2- GDIamgeCreateSprite()
 3- RenderAnimation()
 En plus de rajouter l'interface des variables (GP) pour un tableau de 5 unités

J'imagine que ma requête est assez importante mais quelques piste de solutions et de bonnes documentations m'aiderait beaucoup...

Merci à l'avance

Michel Lauzon


Patrice Terrier

  • Administrator
  • *****
  • Posts: 2003
    • zapsolution
Re: GDImage 64 bit sur une plateforme windev 26
« Reply #1 on: December 17, 2024, 07:21:06 pm »
Je ne possède pas WD26 (j'ai uniquement WD17).
Sans voir le code que vous avez modifié, il est très difficile de vous répondre.

Concernant les sprites, vous devez les créer une fois pour toute (dans votre cas 5 sprites, toujours les mêmes).
Patrice
(Always working with the latest Windows version available...)

Andre DRABS

  • Newbie
  • *
  • Posts: 1
Re: GDImage 64 bit sur une plateforme windev 26
« Reply #2 on: December 20, 2024, 11:45:37 pm »
Bonsoir Patrice,

Je viens de découvrir hier qu'il y a moyen d'enregistrer la version "28-express" de WinDev gratuitement (comme privé). C'est limité à 32 bits, mais avec l'expérience que tu as avec WinDev, je pense que cela vaut la peine de regarder ce qui a changé.

Je voudrais te parler sérieusement d'un projet que j'envisage, mais pas ici. Je t'enverrai un mail privé ou un message privé.

À bientôt,

Michel Lauzon

  • Newbie
  • *
  • Posts: 5
Re: GDImage 64 bit sur une plateforme windev 26
« Reply #3 on: December 21, 2024, 11:46:23 am »
Je ne possède pas WD26 (j'ai uniquement WD17).
Sans voir le code que vous avez modifié, il est très difficile de vous répondre.

Concernant les sprites, vous devez les créer une fois pour toute (dans votre cas 5 sprites, toujours les mêmes).

Je ne pense pas que la version de Windev soit un enjeu...

Je crois bien créer les sprites mais je peux ou ne sais pas comment les afficher...

De Plus, lorsque je quitte je n'élimine pas les instances de la mémoire. Ce qui crée une surcharge de la mémoire et une erreur fatale après quelques répétition du cycle de lancer des dés.

J'inclus trois procédures :
   1- L'initialisation de la fenêtre et la destruction des instances: Win_GDImage.pdf
   2- Le lancer des dés avec la création des sprites: LancerLesDés.pdf
   3- La fonction de la création des dés: GDImageCreateSprite.pdf

Merci à l'avance

Patrice Terrier

  • Administrator
  • *****
  • Posts: 2003
    • zapsolution
Re: GDImage 64 bit sur une plateforme windev 26
« Reply #4 on: December 21, 2024, 03:39:10 pm »
Monsieur Lauzon.

Merci pour les pdf. Mais j'ai décidé de laisser tomber WinDev jutement à cause du manque de compatibilité d'une version à l'autre.
Je vous conseille de basculer en C/C++ si vous voulez écrire un jeu et faire du temps réel.
Le projet CUBE traduit en C/C++ se trouve ici
https://www.developpez.net/forums/d2168345/c-cpp/c/contribuez/the-cube-champ-cube-windev-opengl-demo/

Note: Le projet ne gère qu'un seul véritbale cube, les autres sont des clones virtuels.

Voici un exemple rapide montrant le principe de ce que vous voulez faire directement en code OpenGL C/C++

Code: [Select]
#include <GL/glut.h>
#include <stdlib.h>
#include <time.h>

// Identifiants de texture
GLuint textureIDs[6];

// Positions des dés
GLfloat dicePositions[5][3] = {
    {-2.0f, 0.0f, 0.0f},
    {-1.0f, 0.0f, 0.0f},
    {0.0f, 0.0f, 0.0f},
    {1.0f, 0.0f, 0.0f},
    {2.0f, 0.0f, 0.0f}
};

// Fonction pour charger les textures
void loadTextures() {
    // Chargez vos textures ici
    // Pour simplifier, nous utilisons des données fictives
    glGenTextures(6, textureIDs);
    for (int i = 0; i < 6; i++) {
        glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        // Remplacez par le chargement réel de la texture
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
    }
}

// Fonction pour dessiner un dé
void drawDie() {
    static GLfloat vertices[][3] = {
        {-0.5, -0.5, -0.5}, {0.5, -0.5, -0.5}, {0.5, 0.5, -0.5}, {-0.5, 0.5, -0.5},
        {-0.5, -0.5, 0.5},  {0.5, -0.5, 0.5},  {0.5, 0.5, 0.5},  {-0.5, 0.5, 0.5}
    };
    static GLint faces[][4] = {
        {0, 1, 2, 3}, {3, 2, 6, 7}, {7, 6, 5, 4}, {4, 5, 1, 0}, {5, 6, 2, 1}, {7, 4, 0, 3}
    };
    for (int i = 0; i < 6; i++) {
        glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
        glBegin(GL_QUADS);
        for (int j = 0; j < 4; j++) {
            glTexCoord2f(j == 0 || j == 3 ? 0.0f : 1.0f, j == 0 || j == 1 ? 0.0f : 1.0f);
            glVertex3fv(vertices[faces[i][j]]);
        }
        glEnd();
    }
}

// Callback d'affichage
void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0f, 0.0f, -5.0f);

    for (int i = 0; i < 5; i++) {
        glPushMatrix();
        glTranslatef(dicePositions[i][0], dicePositions[i][1], dicePositions[i][2]);
        drawDie();
        glPopMatrix();
    }

    glutSwapBuffers();
}

// Callback clavier
void keyboard(unsigned char key, int x, int y) {
    if (key == ' ') {
        // Lancer les dés
        srand(time(NULL));
        for (int i = 0; i < 6; i++) {
            glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
            // Remplacez par le chargement réel de la texture
            // Ici, nous utilisons simplement une couleur aléatoire comme donnée fictive
            GLubyte textureData[256 * 256 * 3];
            for (int j = 0; j < 256 * 256 * 3; j++) {
                textureData[j] = rand() % 256;
            }
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, textureData);
        }
        glutPostRedisplay();
    }
}

// Initialiser OpenGL
void init() {
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);
    loadTextures();
}

// Fonction principale
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(800, 600);
    glutCreateWindow("Lancer de dés");

    init();

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);

    glutMainLoop();
    return 0;
}

Explication
Chargement des textures : La fonction loadTextures génère six identifiants de texture et lie des textures fictives. Remplacez le chargement des textures fictives par le chargement réel des données d'image (par exemple, en utilisant les fonctions de GDImage pour créer une texture).

Dessin d'un dé : La fonction drawDie dessine un dé en utilisant les six textures.

Rendu de la scène : La fonction display efface l'écran, configure la vue et dessine les cinq dés.

Lancer les dés : La fonction keyboard gère la pression de la barre d'espace pour simuler le lancer des dés en attribuant des textures aléatoires aux faces.

Initialisation et boucle principale : La fonction main initialise GLUT, configure les callbacks d'affichage et de clavier, et démarre la boucle principale.

Cet exemple utilise GLUT pour simplifier. Dans une application réelle, vous remplaceriez le chargement des textures fictives par des données d'image réelles et amélioreriez la logique de lancer des dés pour un comportement plus réaliste.
« Last Edit: December 21, 2024, 04:02:40 pm by Patrice Terrier »
Patrice
(Always working with the latest Windows version available...)

Patrice Terrier

  • Administrator
  • *****
  • Posts: 2003
    • zapsolution
Re: GDImage 64 bit sur une plateforme windev 26
« Reply #5 on: December 21, 2024, 04:38:17 pm »
Monsieur DRABS

Les versions express de WinDev ne sont pas adaptées, on ne peut pratiquement rien faire avec.
En outre WinDev ne permet pas de créer du code compilé natif (uniquement du p-code).
Seules les DLLs du framework WinDEV sont écrites en C/C++, mais la taille du fremework est monstrueux et ne cesse de croitre de version en version.
J'ai créé de très belles applications avec WinDev il y a 15 à 20 ans, mais elles étaient toutes interfacées avec du code bas niveau pour contourner la lenteur du p-code.

Pour un programmeur expérimenté WinDev est pratique, surtout pour créer des maquettes, mais des que les choses sérieuses commencent alors c'est une autre histoire. Pour moi, rien ne remplace la connaissance de la programmation bas niveau de type SDK, mais c'est une expertise qui se perd...

« Last Edit: December 21, 2024, 06:37:37 pm by Patrice Terrier »
Patrice
(Always working with the latest Windows version available...)

Michel Lauzon

  • Newbie
  • *
  • Posts: 5
Re: GDImage 64 bit sur une plateforme windev 26
« Reply #6 on: December 22, 2024, 12:41:40 am »
Merci Patrice, oups!!! M. Terrier,

Je ne m'attendais pas à autant, je vous en remercie...

Je crois aussi que je devrais me remettre à C/C++. Bonne résolution pour la nouvelle année...

J'ai vue que vous aviez plusieurs Tutos sur le sujet... Je vais m'y remettre...

En attendant, merci encore et je vous souhaite de joyeux temps de réjouissance pour la période de Noël...

 

Michel Lauzon

  • Newbie
  • *
  • Posts: 5
Re: GDImage 64 bit sur une plateforme windev 26
« Reply #7 on: December 23, 2024, 05:00:08 pm »
M. Terrier,

J'ai bien installé MS visual studio (C++) et fait rouler votre application "TheCube"...

Lorsque je recopie le code que tu m'as transmis dans un nouveau projet (Les Dés), le code se copie bien et sans erreur.

Si je demande de "Générer la solution", j'obtiens le message suivant:
========== Build : 0 réussite(s), 0 échec(s), 1 à jour, 0 ignorée(s) ==========

Quand je lance le "Débuggeur Windows local": Une fenêtre s'ouvre et me dit qu'il est impossible de démarrer le programme ' Les Dés.exe'
Le fichier spécifié est introuvable!!!

Je ne comprends pas pourquoi???



Patrice Terrier

  • Administrator
  • *****
  • Posts: 2003
    • zapsolution
Re: GDImage 64 bit sur une plateforme windev 26
« Reply #8 on: December 24, 2024, 10:09:23 am »
Pour créer un projet Visual Studio 2022 afin de tester le code OpenGL donné, suivez ces étapes.

Vous devez créer une nouvelle application en mode console et la configurer pour utiliser OpenGL et GLUT.
Au préalable , si vous ne l'avez déjà fait, vous devez télécharger GLUT.

Guide Étape par Étape

1 - Ouvrir Visual Studio 2022.

2 - Créer un Nouveau Projet :

Allez dans Fichier > Nouveau > Projet.
Dans la boîte de dialogue "Créer un nouveau projet", sélectionnez Application Console et cliquez sur Suivant.
Nommez votre projet (par exemple, DiceRoller) et choisissez un emplacement pour l'enregistrer. Cliquez sur Créer.

3 - Configurer le Projet pour OpenGL et GLUT :

Faites un clic droit sur le projet dans l'Explorateur de solutions et sélectionnez Propriétés.
Dans les propriétés du projet, allez dans Propriétés de configuration > Répertoires VC++.

4 - Ajouter les Répertoires d'Inclusion :

Sous Répertoires d'inclusion, ajoutez les chemins vers vos fichiers d'en-tête OpenGL et GLUT. Par exemple, si vous avez installé GLUT dans C:\GLUT, vous ajouterez :
C:\GLUT\include

5 - Ajouter les Répertoires de Bibliothèques :

Sous Répertoires de bibliothèques, ajoutez les chemins vers vos bibliothèques OpenGL et GLUT. Par exemple :
C:\GLUT\lib

6 - Ajouter des Dépendances Supplémentaires :

Allez dans Propriétés de configuration > Linker > Entrée.
Sous Dépendances supplémentaires, ajoutez les bibliothèques suivantes :
opengl32.lib; glu32.lib; glut32.lib;

7 - Copier le DLL de GLUT :

Copiez le fichier glut32.dll dans votre répertoire de projet ou dans le répertoire contenant votre exécutable.
Alternativement, vous pouvez le placer dans C:\Windows\System32 (pour 32 bits) ou C:\Windows\SysWOW64 (pour 64 bits) si vous voulez qu'il soit disponible globalement.

8 - Ajouter le Code Fourni :

Remplacez le contenu du fichier main.cpp (ou le fichier source principal) par le code fourni ci-dessous

Code: [Select]
#include <GL/glut.h>
#include <stdlib.h>
#include <time.h>

// Identifiants de texture
GLuint textureIDs[6];

// Positions des dés
GLfloat dicePositions[5][3] = {
    {-2.0f, 0.0f, 0.0f},
    {-1.0f, 0.0f, 0.0f},
    {0.0f, 0.0f, 0.0f},
    {1.0f, 0.0f, 0.0f},
    {2.0f, 0.0f, 0.0f}
};

// Fonction pour charger les textures
void loadTextures() {
    // Chargez vos textures ici
    // Pour simplifier, nous utilisons des données fictives
    glGenTextures(6, textureIDs);
    for (int i = 0; i < 6; i++) {
        glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        // Remplacez par le chargement réel de la texture
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
    }
}

// Fonction pour dessiner un dé
void drawDie() {
    static GLfloat vertices[][3] = {
        {-0.5, -0.5, -0.5}, {0.5, -0.5, -0.5}, {0.5, 0.5, -0.5}, {-0.5, 0.5, -0.5},
        {-0.5, -0.5, 0.5},  {0.5, -0.5, 0.5},  {0.5, 0.5, 0.5},  {-0.5, 0.5, 0.5}
    };
    static GLint faces[][4] = {
        {0, 1, 2, 3}, {3, 2, 6, 7}, {7, 6, 5, 4}, {4, 5, 1, 0}, {5, 6, 2, 1}, {7, 4, 0, 3}
    };
    for (int i = 0; i < 6; i++) {
        glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
        glBegin(GL_QUADS);
        for (int j = 0; j < 4; j++) {
            glTexCoord2f(j == 0 || j == 3 ? 0.0f : 1.0f, j == 0 || j == 1 ? 0.0f : 1.0f);
            glVertex3fv(vertices[faces[i][j]]);
        }
        glEnd();
    }
}

// Callback d'affichage
void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0f, 0.0f, -5.0f);

    for (int i = 0; i < 5; i++) {
        glPushMatrix();
        glTranslatef(dicePositions[i][0], dicePositions[i][1], dicePositions[i][2]);
        drawDie();
        glPopMatrix();
    }

    glutSwapBuffers();
}

// Callback clavier
void keyboard(unsigned char key, int x, int y) {
    if (key == ' ') {
        // Lancer les dés
        srand(time(NULL));
        for (int i = 0; i < 6; i++) {
            glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
            // Remplacez par le chargement réel de la texture
            // Ici nous utilisons simplement une couleur aléatoire comme donnée fictive
            GLubyte textureData[256 * 256 * 3];
            for (int j = 0; j < 256 * 256 * 3; j++) {
                textureData[j] = rand() % 256;
            }
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, textureData);
        }
        glutPostRedisplay();
    }
}

// Initialiser OpenGL
void init() {
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);
    loadTextures();
}

// Fonction principale
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(800, 600);
    glutCreateWindow("Lancer de dés");

    init();

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);

    glutMainLoop();
    return 0;
}

9 - Construire et Exécuter le Projet :

Appuyez sur Ctrl+Shift+B pour construire le projet.
Appuyez sur F5 pour exécuter le projet.

Cela devrait configurer une application OpenGL basique qui affiche cinq dés et permet de les "lancer" en appuyant sur la barre d'espace.
Assurez-vous d'avoir les bibliothèques OpenGL et GLUT nécessaires installées et correctement référencées dans les paramètres de votre projet.


Si GLUT ne vous convient pas et que vous voulez programmer en pur code OpenGL (ce qui est mon cas).
Vous devez utiliser uniquement les fonctionnalités de base de Windows (Win32 API) pour créer une fenêtre et gérer les événements.
Voici comment vous pouvez adapter le code pour utiliser uniquement OpenGL sans GLUT.

Étapes pour Remplacer GLUT par du Code Win32
1 - Initialisation de la Fenêtre Win32 et du Contexte OpenGL
2 - Gestion des Messages de la Fenêtre
3 - Remplacement des Fonctionnalités GLUT par des Équivalents Win32

Voici le code complet pour créer une fenêtre Win32 et dessiner les dés avec OpenGL :

Code: [Select]
#include <windows.h>
#include <GL/gl.h>
#include <stdlib.h>
#include <time.h>

// Identifiants de texture
GLuint textureIDs[6];

// Positions des dés
GLfloat dicePositions[5][3] = {
    {-2.0f, 0.0f, 0.0f},
    {-1.0f, 0.0f, 0.0f},
    {0.0f, 0.0f, 0.0f},
    {1.0f, 0.0f, 0.0f},
    {2.0f, 0.0f, 0.0f}
};

// Fonction pour charger les textures
void loadTextures() {
    // Chargez vos textures ici
    // Pour simplifier, nous utilisons des données fictives
    glGenTextures(6, textureIDs);
    for (int i = 0; i < 6; i++) {
        glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        // Remplacez par le chargement réel de la texture
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
    }
}

// Fonction pour dessiner un dé
void drawDie() {
    static GLfloat vertices[][3] = {
        {-0.5, -0.5, -0.5}, {0.5, -0.5, -0.5}, {0.5, 0.5, -0.5}, {-0.5, 0.5, -0.5},
        {-0.5, -0.5, 0.5},  {0.5, -0.5, 0.5},  {0.5, 0.5, 0.5},  {-0.5, 0.5, 0.5}
    };
    static GLint faces[][4] = {
        {0, 1, 2, 3}, {3, 2, 6, 7}, {7, 6, 5, 4}, {4, 5, 1, 0}, {5, 6, 2, 1}, {7, 4, 0, 3}
    };
    for (int i = 0; i < 6; i++) {
        glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
        glBegin(GL_QUADS);
        for (int j = 0; j < 4; j++) {
            glTexCoord2f(j == 0 || j == 3 ? 0.0f : 1.0f, j == 0 || j == 1 ? 0.0f : 1.0f);
            glVertex3fv(vertices[faces[i][j]]);
        }
        glEnd();
    }
}

// Initialisation OpenGL
void initOpenGL(HWND hWnd) {
    HDC hDC = GetDC(hWnd);
    PIXELFORMATDESCRIPTOR pfd = {0};
    pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
    pfd.nVersion = 1;
    pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    pfd.iPixelType = PFD_TYPE_RGBA;
    pfd.cColorBits = 32;
    pfd.cDepthBits = 24;
    pfd.iLayerType = PFD_MAIN_PLANE;

    int iFormat = ChoosePixelFormat(hDC, &pfd);
    SetPixelFormat(hDC, iFormat, &pfd);

    HGLRC hRC = wglCreateContext(hDC);
    wglMakeCurrent(hDC, hRC);

    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);
    loadTextures();
}

// Fonction de rendu
void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0f, 0.0f, -5.0f);

    for (int i = 0; i < 5; i++) {
        glPushMatrix();
        glTranslatef(dicePositions[i][0], dicePositions[i][1], dicePositions[i][2]);
        drawDie();
        glPopMatrix();
    }

    // Swap the buffers
    HDC hDC = wglGetCurrentDC();
    SwapBuffers(hDC);
}

// Fonction de gestion des messages
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
    switch (message) {
    case WM_PAINT:
        display();
        ValidateRect(hWnd, NULL);
        break;
    case WM_KEYDOWN:
        if (wParam == VK_SPACE) {
            // Lancer les dés
            srand(time(NULL));
            for (int i = 0; i < 6; i++) {
                glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
                // Remplacez par le chargement réel de la texture
                // Ici nous utilisons simplement une couleur aléatoire comme donnée fictive
                GLubyte textureData[256 * 256 * 3];
                for (int j = 0; j < 256 * 256 * 3; j++) {
                    textureData[j] = rand() % 256;
                }
                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, textureData);
            }
            InvalidateRect(hWnd, NULL, FALSE);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// Fonction principale
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASS wc = {0};
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
    wc.lpszClassName = L"DiceRoller";
    wc.style = CS_OWNDC;
    RegisterClass(&wc);

    HWND hWnd = CreateWindow(wc.lpszClassName, L"Lancer de dés", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, 800, 600, NULL, NULL, hInstance, NULL);

    initOpenGL(hWnd);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

Explication du Code

1 - Initialisation de la Fenêtre et du Contexte OpenGL :
WinMain initialise une fenêtre Win32.
initOpenGL configure le contexte OpenGL.

2 - Gestion des Messages de la Fenêtre :
WndProc gère les messages de la fenêtre, y compris le rendu (WM_PAINT) et les entrées clavier (WM_KEYDOWN).

3 - Fonction de Rendu :
display dessine les dés et échange les buffers pour afficher l'image.

4 - Lancer les Dés :
Lorsque la barre d'espace est pressée (VK_SPACE), les textures des dés sont mises à jour avec des couleurs aléatoires.

Instructions pour la Création du Projet
1 - Suivez les mêmes étapes que celui décrit précédemment pour créer un projet de type Application Console.
2 - Ajoutez le code ci-dessus dans le fichier main.cpp.
3 - Configurez les répertoires d'inclusion et les bibliothèques comme décrit précédemment.
4 - Compilez et exécutez votre projet.

Cela devrait configurer une application OpenGL basique utilisant uniquement l'API Win32 pour l'affichage et le lancement des dés.
« Last Edit: December 25, 2024, 05:47:35 pm by Patrice Terrier »
Patrice
(Always working with the latest Windows version available...)

Michel Lauzon

  • Newbie
  • *
  • Posts: 5
Re: GDImage 64 bit sur une plateforme windev 26
« Reply #9 on: January 06, 2025, 12:16:38 am »
Premièrement je veux vous souhaitez une bonne Année 2025...

J'ai suivi la procédure 64 bits à mainte reprise et je me retrouve toujours avec ces 3 avertissement (AV:) et ces 10 erreurs (ER:). J'ai beau suivre à la lettre et essayer différent type de GLUT toujours le même résultats?


AV: La fonction utilise '196628' octets de pile. Envisagez de déplacer certaines données vers le tas.
ER: symbole externe non résolu glutInit référencé dans la fonction main
ER: symbole externe non résolu glutInitDisplayMode référencé dans la fonction main
ER: symbole externe non résolu glutInitWindowSize référencé dans la fonction main
ER: symbole externe non résolu glutMainLoop référencé dans la fonction main
ER: symbole externe non résolu glutCreateWindow référencé dans la fonction main
ER: symbole externe non résolu glutPostRedisplay référencé dans la fonction "void __cdecl keyboard(unsigned char,int,int)" (?keyboard@@YAXEHH@Z)
ER: symbole externe non résolu glutSwapBuffers référencé dans la fonction "void __cdecl display(void)" (?display@@YAXXZ)
ER: symbole externe non résolu glutDisplayFunc référencé dans la fonction main
ER: symbole externe non résolu glutKeyboardFunc référencé dans la fonction main
AV: type d'ordinateur bibliothèque 'x86' en conflit avec le type d'ordinateur cible 'x64'
AV: type d'ordinateur bibliothèque 'x86' en conflit avec le type d'ordinateur cible 'x64'
ER: 9 externes non résolus

Merci à l'avance