Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

nombre réponses : 3

#0 -1 »  OpenGL et erreurs de segmentation » Le 10/10/2012, à 17:21

madmaxpt
Réponses : 6

Bonjour,

Je rencontre actuellement des problèmes avec OpenGL. A l'exécution du code suivant :

#include <GL/glew.h>
#include <GL/glut.h>
#include <iostream>

class Vec3{
public:
	float m_x;
	float m_y;
	float m_z;

	Vec3(){}
	Vec3(float x, float y, float z){
		m_x=x;
		m_y=y;
		m_z=z;
	}
};

GLuint VBO;

static void CreateVertexBuffer()
{
	Vec3 vertices[1];
	vertices[0] = Vec3(0.0f, 0.0f, 0.0f);

	glGenBuffersARB(1, &VBO);
	glBindBufferARB(GL_ARRAY_BUFFER, VBO);
	glBufferDataARB(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
}

static void renderScene(){
	glClear(GL_COLOR_BUFFER_BIT);
	glEnableVertexAttribArrayARB(0);
	glVertexAttribPointerARB(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
	glDrawArrays(GL_POINTS, 0, 1);
	glDisableVertexAttribArrayARB(0);
	glutSwapBuffers();

}
int main(int argc, char **argv) {
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
	glutInitWindowSize(400, 400);
	glutInitWindowPosition(50, 50);
	glutCreateWindow("Tutorial 2");
	glutDisplayFunc(renderScene);
	GLenum err = glewInit();
	if (err != GLEW_OK){
		std::cerr << "Error : " << glewGetErrorString(err) << std::endl;
		return -1;
	}

	glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
	CreateVertexBuffer();
	glutMainLoop();
	return 0;
}

J'obtiens une erreur de segmentation à la ligne     glDrawArrays(GL_POINTS, 0, 1);.

En tapant la commande glxinfo | grep version j'obtiens le résultat suivant :

server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
OpenGL version string: 1.4 Mesa 8.0.2

Les fonctions comme glGenBuffers ne sont arrivées qu'avec GL 1.5, c'est pourquoi j'utilise glGenBuffersARB (qui est une extension implémentant les mêmes fonctionnalités pour les versions antérieures).
Mais la fonction glDrawArrays est apparue avec GL 1.1 donc il ne devrait pas y avoir de problèmes.

J'ai essayé le même code sur un ordinateur de mon université (sur lequel glxinfo renvoie OpenGL 2.2), il s'exécute sans problème et affiche bien ce que je veux (un écran rouge avec un point blanc au milieu).

Est ce que quelqu'un saurait expliquer pourquoi cela ne fonctionne pas ?

#1 Re : -1 »  OpenGL et erreurs de segmentation » Le 12/10/2012, à 11:51

madmaxpt
Réponses : 6

Je suis sur un Dell Inspiron Mini 10.

Sur le site de Mesa 3D, il est dit que Mesa 8.0.2 implémente l'API d'OpenGL 3.0 mais que la version utilisée dépend du driver.
Ma puce graphique est intégrée au CPU (Intel Corporation N10 Family Integrated Graphics Controller).
La commande lspci -v indique dans la section VGA compatible controller:

00:02.0 VGA compatible controller: Intel Corporation N10 Family Integrated Graphics Controller (prog-if 00 [VGA controller])
	Subsystem: Dell Device 048e
	Flags: bus master, fast devsel, latency 0, IRQ 44
	Memory at f0200000 (32-bit, non-prefetchable) [size=512K]
	I/O ports at 18d0 [size=8]
	Memory at d0000000 (32-bit, prefetchable) [size=256M]
	Memory at f0000000 (32-bit, non-prefetchable) [size=1M]
	Expansion ROM at <unassigned> [disabled]
	Capabilities: <access denied>
	Kernel driver in use: i915
	Kernel modules: i915

J'ai cherché sur internet s'il était possible de mettre les drivers à jour mais pour l'instant je n'ai rien trouvé.

glxinfo | grep GL_ARB_VERTEX renvoie ceci :

 GL_ARB_vertex_program, GL_ARB_vertex_shader, GL_ATI_draw_buffers, 
    GL_ARB_texture_non_power_of_two, GL_ARB_vertex_buffer_object, 
    GL_APPLE_object_purgeable, GL_ARB_vertex_array_object, 

Donc il semblerait que je dispose de l'extension permettant d'utiliser les VBO et VAO.

#2 Re : -1 »  OpenGL et erreurs de segmentation » Le 12/10/2012, à 17:37

madmaxpt
Réponses : 6

glIsBuffer(VBO) renvoie GL_TRUE et glGetError() renvoie GL_NO_ERROR.

Le code que tu m'as passé fonctionne (youpi lol), mais j'aimerais bien que glVertexAttribPointerARB() fonctionne car j'aimerais bien pouvoir renseigner les normales, couleurs, ... de mes vertex avec un VAO et plusieurs VBO.

Déjà merci pour ton aide, au moins pour le moment je peux trafiquer mes programmes en utilisant un unique VBO et glVertexPointer() smile