Вызвано исключение по адресу 0x000007FEC61F3590 (ig4icd64.dll)
При компиляции проблем нет, а при запуске прога ломается. Где-то в функции glEnableVertexAttribArray и glDisableVertexAttribArray происходит исключение: Вызвано исключение по адресу 0x000007FEC61F3590 (ig4icd64.dll) в Project1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x0000000000000000. Вот код:
//Главный файл
#include <iostream>
#include "VAO.h"
using namespace gl;
int main() {
if(!glfwInit()) std::cout << "Failed to init glfw!\n";
//////////////////////////////////////////////////
GLFWwindow* window = glfwCreateWindow(850, 650, "Test", nullptr, nullptr);
glfwMakeContextCurrent(window);
glewExperimental = true;
if (glewInit() != GLEW_OK) std::cout << "Failed to init glew\n";
////////////////////////////////////////////////////
glVertexArrayObject vao;
vao.createVBO({ 0.0f, 1.0f, 0.0f, -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f });
///////////////////////////////////////////////////
while (!glfwWindowShouldClose(window)) {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
vao.draw(3);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
system("pause");
glfwTerminate();
return 0;
}
//файл VAO.h
#pragma once
#include <glew.h>
//#include <glut.h>
#include <glfw3.h>
#include <vector>
namespace gl {
class glVertexArrayObject {
public:
glVertexArrayObject();
glVertexArrayObject(const glVertexArrayObject&) = delete;
~glVertexArrayObject();
void bind();
void createVBO(const std::vector<float>& data);
void draw(GLsizei size);
private:
GLuint myVertexArrayObject;
std::vector<GLuint> allBuffers;
};
}
//файл VAO.cpp
#include "VAO.h"
gl::glVertexArrayObject::glVertexArrayObject() {
glGenVertexArrays(1, &myVertexArrayObject);
}
void gl::glVertexArrayObject::bind() {
glBindVertexArray(myVertexArrayObject);
}
void gl::glVertexArrayObject::createVBO(const std::vector<float>& data) {
bind();
GLuint VertexBufferObject;
glGenBuffers(1, &VertexBufferObject);
glBindBuffer(GL_ARRAY_BUFFER, VertexBufferObject);
glBufferData(GL_ARRAY_BUFFER, data.size() * sizeof(float), data.data(), GL_STATIC_DRAW);
glVertexAttribPointer(allBuffers.size(), 3, GL_FLOAT, GL_FALSE, 0, nullptr);
allBuffers.push_back(VertexBufferObject);
}
void gl::glVertexArrayObject::draw(GLsizei size) {
bind();
for (size_t i = 0; i < allBuffers.size(); ++i) {
glEnableVertexAttribArray(i);
}
glDrawArrays(GL_TRIANGLES, 0, size);
for (size_t i = 0; i < allBuffers.size(); ++i) {
glDisableVertexAttribArray(i);
}
}
gl::glVertexArrayObject::~glVertexArrayObject() {
glDeleteBuffers(allBuffers.size(), allBuffers.data());
glDeleteVertexArrays(1, &myVertexArrayObject);
}
Ответы (1 шт):
Автор решения: mr Vitas
→ Ссылка
Проблема решена: Я собрал проект с конфигурацией *64, а нужно было с *32. Не знаю почему так)