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

OpenGL Discussion :

Au secours PBOs


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Par défaut Au secours PBOs
    Bonjour tout le monde
    J'essaie de faire marcher un code que j'ai trouver sur le net mais j'obtient l'erreur suivante
    Erreur d'écriture à l'adresse 0 dans le readPixels
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    int width = 640;
    int height = 480;
     
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    glutInitWindowSize(width, height);
    glutCreateWindow("OpenGL");
     
    cvNamedWindow("Test", 1);
    IplImage* image = cvCreateImage(cvSize(width, height), 8, 1);
     
    glGenBuffers = (PFNGLGENBUFFERSPROC)wglGetProcAddress("glGenBuffersARB");
    glBindBuffer = (PFNGLBINDBUFFERARBPROC)wglGetProcAddress("glBindBufferARB");
    glBufferData = (PFNGLBUFFERDATAPROC)wglGetProcAddress("glBufferDataARB");
    glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)wglGetProcAddress("glBindFramebufferEXT");
    glMapBuffer = (PFNGLMAPBUFFERPROC)wglGetProcAddress("glMapBufferARB");
    glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)wglGetProcAddress("glUnmapBufferARB");
     
    glClearColor(0, 0, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT);
     
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
     
    GLuint pbo;
    glGenBuffers(1, &pbo);
     
    glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, pbo);
    glBufferData(GL_PIXEL_PACK_BUFFER_ARB, width * height * sizeof(GLfloat), NULL, GL_STREAM_READ_ARB);
     
    glDrawBuffer(GL_BACK);
    glBegin(GL_POLYGON);
    	glVertex3f (0.25, 0.25, 0.0);
    	glVertex3f (0.75, 0.25, 0.0);
    	glVertex3f (0.75, 0.75, 0.0);
    	glVertex3f (0.25, 0.75, 0.0);
    glEnd();
    glFlush();
     
    glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, pbo);
    glReadPixels(0, 0, width, height, GL_BGR, GL_UNSIGNED_BYTE, 0);
     
    GLuint * buf = NULL;
    glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, pbo);
    image->imageData = (char*) glMapBuffer(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY);
    cvShowImage("Test", image);
    while(cvWaitKey(10)==-1);
    glUnmapBuffer(GL_PIXEL_PACK_BUFFER_ARB);
    J'imagine qu'il essaie d'écrire les pixels à l'adresse 0 mais je ne comprend pas pourquoi (même dans l'exemple de code de la doc des pbos il font comme ca)

    Merci beaucoup

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    heu... le dernier paramètre de glReadPixels, ce ne serait pas l'adresse d'un tableau dans lequel stocker le buffer par hazard ?
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Utilise déjà glew

    Tiens un thread qui devrait t'aider

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Par défaut
    Merci de vos réponse. J'utilise désormais glew (c'est beaucoup plus simple pour les extensions ), mais j'ai toujours le même problème. Le dernier argument de readPixels correspond bien a un pointeur vers le buffer, mais si j'ai bien compris, quand les pbos sont activés, il devrait automatiquement comprendre qu'il doit stoquer dans le pbo. Voici mon code complet que j'essaie de faire marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #include <windows.h>
    #include <GL/glew.h>
    #include <GL/glut.h>
     
    #define BUFFER_OFFSET(i) ((char *)NULL + (i))
     
    int main(int argc, char** argv){
    	int width = 640;
    	int height = 480;
    	int imageSize = width * height * 3;
     
    	glutInit(&argc, argv);
    	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    	glutInitWindowSize(width, height);
    	glutCreateWindow("OpenGL");
     
    	GLenum err = glewInit();
    	if (GLEW_OK != err){
    		return 1;
    	}
    	GLuint pbo;
    	glGenBuffersARB(1, &pbo);
    	glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pbo);
    	glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, imageSize, NULL,	GL_STREAM_READ);
    	glReadPixels(0, 0, width, height, GL_BGR, GL_UNSIGNED_BYTE,BUFFER_OFFSET(0));
    }

Discussions similaires

  1. Au secours, sur les licences MS SQL Server
    Par papouAlain dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 31/10/2004, 12h27
  2. [FLASH MX 2004]lissage au secour
    Par livingdead dans le forum Flash
    Réponses: 8
    Dernier message: 28/06/2004, 17h41
  3. postgresql sous cygwin Au secours!!!!,
    Par careme dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 28/11/2003, 18h21
  4. Disquette de secours sans Lilo ni Grub sur la partition ?
    Par Blue_Angelica dans le forum Administration système
    Réponses: 3
    Dernier message: 13/11/2003, 16h59
  5. au secour probleme avec une requete...
    Par soufiane59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/09/2003, 11h28

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