OpenGL,访问违规

OpenGL, Access violation

本文关键字:访问 OpenGL      更新时间:2023-10-16

我正在Visual Studio 2010中制作OpenGL项目。我正在学习youtube上的教程。我不知道错误在哪里,我有这个错误:

Unhandled exception at 0x00000000 in OpenGL First Game.exe: 0xC0000005: Access violation.

主要.cpp

#include <GL/glew.h>
#include <iostream>
#include <GL/glut.h>
#include "Sprite.h"
Sprite _sprite;
void Init() {
    glClearColor(0.0f, 1.0f, 1.0f, 1.0f);
    _sprite.Init(-1.0f, -1.0f, 1.0f, 1.0f);
}
void Render() {
    glClearDepth(1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    _sprite.Render();
    glutSwapBuffers();
}
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(520, 200);
    glutInitWindowSize(800, 600);
    glutInitDisplayMode(GLUT_DOUBLE);
    glutCreateWindow("OpenGL [ 1 ]");
    glutDisplayFunc(Render);
    Init();
    glutMainLoop();
}

Sprite.cpp

#include <GL/glew.h>
#include "Sprite.h"
Sprite::Sprite(void){
    _vboID = 0;
}

Sprite::~Sprite(void){
    if(_vboID != 0)
        glDeleteBuffers(1, &_vboID);
}
void Sprite::Init(float x, float y, float width, float height){
    _x = x;
    _y = y;
    _width = width;
    _height = height;
    if(_vboID == 0){
        glGenBuffers(1, &_vboID);
    }
    float VertexData[12];
    // Prvi trougao
    VertexData[0] = x + width;
    VertexData[1] = y + height;
    VertexData[2] = x;
    VertexData[3] = y + height;
    VertexData[4] = x;
    VertexData[5] = y;
    // Drugi trougao
    VertexData[6] = x;
    VertexData[7] = y;
    VertexData[8] = x + width;
    VertexData[9] = y;
    VertexData[10] = x + width;
    VertexData[11] = y + height;
    glBindBuffer(GL_ARRAY_BUFFER, _vboID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(VertexData), VertexData, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
}
void Sprite::Render(){
    glBindBuffer(GL_ARRAY_BUFFER, _vboID);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
    glDrawArrays(GL_TRIANGLES, 0, 6);
    glDisableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
}

Sprite.h

#pragma once
#include <GL/glut.h>
class Sprite{
    public:
        Sprite(void);
        ~Sprite(void);
        void Init(float x, float y, float width, float height);
        void Render();
    private:
        float _x;
        float _y;
        float _width;
        float _height;
        GLuint _vboID; // Gluint na garantira da ce int biti 32 bita
};

您没有初始化GLEW。如果不这样做,GLEW提供的所有入口点(它是OpenGL-1.1之外的一切)都没有初始化,调用它们会使程序崩溃。

添加

if( GLEW_OK != glewInit() ) { return 1; }
while( GL_NO_ERROR != glGetError() ); /* glewInit may cause some OpenGL errors -- flush the error state */

在CCD_ 1之后。