VBO: glBindBuffer выбрасывает Access violation execution location
У меня есть код:
Tessellator Tessellator::draw() {
if (!drawing)
throw std::exception("Not drawing");
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * vertices.size(), &vertices[0], GL_STATIC_DRAW);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, 0);
std::vector<GLuint> indices(vertices.size() / 2);
for (GLuint i = 0; i < indices.size(); i++)
indices[i] = i;
GLuint indexBuffer;
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint) * indices.size(), &indices[0], GL_STATIC_DRAW);
glColor3fv(activeColor);
glDrawElements(primitiveMode, indices.size(), GL_UNSIGNED_INT, 0);
glDeleteBuffers(1, &vertexBuffer);
glDeleteBuffers(1, &indexBuffer);
glDisableClientState(GL_VERTEX_ARRAY);
this->vertices.clear();
this->drawing = false;
return *this;
}
на строке glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); выбрасывается Access violation execution location. Версия opengl 2. Также я не использую glfw, glew и т.д, а glGenBuffers и другие определяю так:
gldefs.h:
#define GLsizeiptr ptrdiff_t
typedef void (*PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
typedef void (*PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
typedef void (*PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void* data, GLenum usage);
typedef void (*PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint* buffers);
extern PFNGLGENBUFFERSPROC glGenBuffers;
extern PFNGLBINDBUFFERPROC glBindBuffer;
extern PFNGLBUFFERDATAPROC glBufferData;
extern PFNGLDELETEBUFFERSPROC glDeleteBuffers;
gldefs.cpp:
#include "gldefs.h"
PFNGLGENBUFFERSPROC glGenBuffers = (PFNGLGENBUFFERSPROC) wglGetProcAddress("glGenBuffers");
PFNGLBINDBUFFERPROC glBindBuffer = (PFNGLBINDBUFFERPROC) wglGetProcAddress("glBindBuffer");
PFNGLBUFFERDATAPROC glBufferData = (PFNGLBUFFERDATAPROC) wglGetProcAddress("glBufferData");
PFNGLDELETEBUFFERSPROC glDeleteBuffers = (PFNGLDELETEBUFFERSPROC) wglGetProcAddress("glDeleteBuffers");
Источник: Stack Overflow на русском