OpenGL nvoglv32.dll erreur
Mon programme compile bien, mais quand je le lance, il se bloque à glDrawArrays(GL_TRIANGLE_STRIP, 0, 4), disant:
Unhandled exception at 0x50D6C94E (nvoglv32.dll) in Chapter 2.exe: 0xC0000005: Access violation reading location 0x00000000.
Une page apparaît également que dit nvoglv32.apb n'est pas chargé. J'ai vérifié pour voir si les pointeurs et les valeurs qui me sont passé étaient correctes, et affirment ne pas ramasser quoi que ce soit.
Voici le code
Exemple.h
#include <windows.h>
#include "Example.h"
#include <iostream>
#include <gl\GLU.h>
#include <gl\glext.h>
#include "BufferUtilities.h"
bool Example::init()
{
if (!start())
{
return false;
}
glEnable(GL_DEPTH_TEST);
glClearColor(0.5f, 0.5f, 0.5f, 0.5f);
GLfloat verticies[] = {
-2.0f, -2.0f, -2.0f,
2.0f, -2.0f, -2.0f,
-2.0f, -2.0f, 2.0f,
2.0f, -2.0f, 2.0f,
};
GLfloat colors[] = {
1.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f,
1.0f, 1.0f, 0.0f,
};
createArrayBuffer(verticies, &vertexBuffer, GL_STATIC_DRAW);
createArrayBuffer(colors, &colorBuffer, GL_STATIC_DRAW);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
return true;
}
void Example::render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
bindAndPoint(&colorBuffer, 3);
bindAndPoint(&vertexBuffer, 3);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
BufferUtilities.h
#pragma once
#include <Windows.h>
#include <gl\GL.h>
#include <gl\GLU.h>
#include <gl\GLEXT.h>
#include <gl\wglext.h>
#include <iostream>
#include <assert.h>
#define BUFFER_OFFSET(i) ((char *)NULL+(i))
static PFNGLGENBUFFERSARBPROC glGenBuffers = NULL;
static PFNGLBINDBUFFERPROC glBindBuffer = NULL;
static PFNGLBUFFERDATAPROC glBufferData = NULL;
inline bool start()
{
glGenBuffers = (PFNGLGENBUFFERSARBPROC)wglGetProcAddress("glGenBuffers");
glBindBuffer = (PFNGLBINDBUFFERPROC)wglGetProcAddress("glBindBuffer");
glBufferData = (PFNGLBUFFERDATAPROC)wglGetProcAddress("glBufferData");
if (!glGenBuffers|| !glBindBuffer || !glBufferData)
{
std::cerr << "Vertex buffer objects are not supported by your graphics card." << std::endl;
return false;
}
return true;
}
inline void createArrayBuffer(GLfloat *array, GLuint *buffer, GLenum usage)
{
assert(array != NULL);
assert(buffer != NULL);
assert(usage != NULL);
glGenBuffers(1, buffer);
glBindBuffer(GL_ARRAY_BUFFER, *buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * (sizeof(array) / sizeof(array[0])), &array[0], usage);
}
inline void bindAndPoint(GLuint *buffer, int size)
{
assert(buffer != NULL);
assert(size != NULL);
glBindBuffer(GL_ARRAY_BUFFER, *buffer);
glColorPointer(size, GL_FLOAT, 0, BUFFER_OFFSET(0));
}
- Quel système d'exploitation utilisez-vous ceci? Comment avez-vous mis en place OpenGL en premier lieu? Edit: nevermind, vous êtes sur Windows à l'aide de GLU
Vous devez vous connecter pour publier un commentaire.
À partir d'un modérateur sur le Nvidia open GL forum:
https://devtalk.nvidia.com/default/topic/720651/access-violation-in-nvoglv32-dll-how-do-i-track-down-the-problem-/
"Violation d'accès lors de glDrawArrays ou glDrawElements sont le plus souvent à tort activé sommet de l'attribut tableaux.
Veuillez vérifier votre état actuel du permis sommet d'attributs très soigneusement. Celle qui est activée par inadvertance, sans fournir, ou de suffisamment de données de ces types d'erreurs lors de l'approvisionnement des données en dehors des limites lors de l'appel.
Si ce n'est pas ça, peut-être il y a un problème avec la consommation de mémoire. Vous exécutez une application 32 bits selon le nom de la DLL. La même chose se produire dans une version 64 bits?"
La raison principale de ce genre de chose arrive, c'est que vous n'avez pas configuré votre appel correctement.
Une deuxième possibilité est le scénario dans cette S/O post: Crash à l'appel en nvoglv32.dll sur la nouvelle carte vidéo
Dans cet exemple, l'utilisateur n'a pas initialisé Open GL correctement, et il est à l'origine du problème.
Ceux sont les deux problèmes majeurs qui pourraient être semés sur vous. À partir de ce que je suis à la lecture de votre code source, il ne semble pas que si vous avez donné Dessiner des Tableaux de tous les mauvais arguments, mais je tiens à enquêter pour s'assurer que vos Organisations sont tenus correctement.
Maintenant, j'ai peut-être la lecture de votre code de mal, mais en:
Ne devrait pas y avoir certains appellent à glVertexAttribPointer? Je vois contraignant, mais pas de pointage.
Si vous n'êtes pas de donner le Sommet des Attributs sur le shader, le rendu est crash.