Access Violation OpenGl, VisualStudio 2008
Ich arbeite mich gerade mit der OpenGL SuperBible in die Grfikprogrammierung ein. Leider habe ich schon in Kapitel 2 ein Problem. Ich habe alles exakt genauso gemacht wie im Buch beschrieben und den Code habe ich auch direkt von der Homepage genommen und nicht etwa selbst getippt. Wenn ich das Projekt ausführen will, wirft VS eine nette Fehlermeldung:
Unhandled Exception at 0x00000000 in Triangle.exe: 0xC0000005: Access violation
Hat irgendjemand eine Ahnung, woher das kommt? Ich bin am Verzweifeln, denn ich muss einen Großteil dieses Buhs bis Semesterbeginn durchgearbeitet haben...
Ausführen tue ich Visual Studio 2008 auf meinem Mac in einer VM mit VirtualBox und Windows 7.
Hier mal der Code, wie gesagt ohne jede Änderung meinerseits. Es treten keine Fehler auf, der Code wird ja ausgeführt. Dann erscheint eine Konsole und dann ein zweiter Fensterrahmen, der aber leer bleibt.
Triangle.cpp
Our first OpenGL program that will just draw a triangle on the screen.
#include <GLTools.h> OpenGL toolkit
#include <GLShaderManager.h> Shader Manager Class
#ifdef __APPLE__
#include <glut/glut.h> OS X version of GLUT
#else
#define FREEGLUT_STATIC
#include <GL/glut.h> Windows FreeGlut equivalent
#endif
GLBatch triangleBatch;
GLShaderManager shaderManager;
/
Window has changed size, or has just been created. In either case, we need
to use the window dimensions to set the viewport and the projection matrix.
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}
/
This function does any needed initialization on the rendering context.
This is the first opportunity to do any OpenGL related tasks.
void SetupRC()
{
Blue background
glClearColor(0.0f, 0.0f, 1.0f, 1.0f );
shaderManager.InitializeStockShaders();
Load up a triangle
GLfloat vVerts = { -0.5f, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f };
triangleBatch.Begin(GL_TRIANGLES, 3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
/
Called to draw scene
void RenderScene(void)
{
Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
GLfloat vRed = { 1.0f, 0.0f, 0.0f, 1.0f };
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
triangleBatch.Draw();
Perform the buffer swap to display back buffer
glutSwapBuffers();
}
/
Main entry point for GLUT based programs
int main(int argc, char* argv)
{
gltSetWorkingDirectory(argv);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(800, 600);
glutCreateWindow("Triangle");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
SetupRC();
glutMainLoop();
return 0;
}
Unhandled Exception at 0x00000000 in Triangle.exe: 0xC0000005: Access violation
Hat irgendjemand eine Ahnung, woher das kommt? Ich bin am Verzweifeln, denn ich muss einen Großteil dieses Buhs bis Semesterbeginn durchgearbeitet haben...
Ausführen tue ich Visual Studio 2008 auf meinem Mac in einer VM mit VirtualBox und Windows 7.
Hier mal der Code, wie gesagt ohne jede Änderung meinerseits. Es treten keine Fehler auf, der Code wird ja ausgeführt. Dann erscheint eine Konsole und dann ein zweiter Fensterrahmen, der aber leer bleibt.
Triangle.cpp
Our first OpenGL program that will just draw a triangle on the screen.
#include <GLTools.h> OpenGL toolkit
#include <GLShaderManager.h> Shader Manager Class
#ifdef __APPLE__
#include <glut/glut.h> OS X version of GLUT
#else
#define FREEGLUT_STATIC
#include <GL/glut.h> Windows FreeGlut equivalent
#endif
GLBatch triangleBatch;
GLShaderManager shaderManager;
/
Window has changed size, or has just been created. In either case, we need
to use the window dimensions to set the viewport and the projection matrix.
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}
/
This function does any needed initialization on the rendering context.
This is the first opportunity to do any OpenGL related tasks.
void SetupRC()
{
Blue background
glClearColor(0.0f, 0.0f, 1.0f, 1.0f );
shaderManager.InitializeStockShaders();
Load up a triangle
GLfloat vVerts = { -0.5f, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f };
triangleBatch.Begin(GL_TRIANGLES, 3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
/
Called to draw scene
void RenderScene(void)
{
Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
GLfloat vRed = { 1.0f, 0.0f, 0.0f, 1.0f };
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
triangleBatch.Draw();
Perform the buffer swap to display back buffer
glutSwapBuffers();
}
/
Main entry point for GLUT based programs
int main(int argc, char* argv)
{
gltSetWorkingDirectory(argv);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(800, 600);
glutCreateWindow("Triangle");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
SetupRC();
glutMainLoop();
return 0;
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 174405
Url: https://administrator.de/contentid/174405
Ausgedruckt am: 23.11.2024 um 12:11 Uhr
3 Kommentare
Neuester Kommentar
Hi !
Dir ist aber schon klar, dass die 3D Beschleunigung der Treiber (in den Guest Additions) von Virtualbox noch den Status "unstable" oder "beta" tragen...Warum eigentlich per Torrent gesaugt? Reicht zu Lernzwecken nicht auch die Express Edition? Soweit ich mich da grad noch erinnern kann, bekommt man die doch vom Hersteller kostenlos....
mrtux
Dir ist aber schon klar, dass die 3D Beschleunigung der Treiber (in den Guest Additions) von Virtualbox noch den Status "unstable" oder "beta" tragen...Warum eigentlich per Torrent gesaugt? Reicht zu Lernzwecken nicht auch die Express Edition? Soweit ich mich da grad noch erinnern kann, bekommt man die doch vom Hersteller kostenlos....
mrtux