OPENGL: квадратный класс с использованием VBO

Итак, я пытаюсь создать базовый класс «Drawable», который обрабатывает большую часть рисования для меня в фоновом режиме, и я хочу использовать современный OpenGL (без операторов начала и конца). Я просто получаю пустой экран, когда я запускаю draw ().

Я запустил отладчик и проверил, мой массив правильно инициализирован с 3xFLOAT для позиции и 4xFLOAT для цвета. Есть идеи, что не так? Я очень новичок в этой библиотеке. Мой пример пытается нарисовать красный куб в точке (+ -0,5, + -0,5, 0,0), поэтому массив indexData равен просто {0, 1, 2, 3}.

#define DRAWABLE_VERTEX_DEPTH 3
#define SIZE_OF_VERTEX_ELEMENT sizeof(GLfloat)
#define VERTEX_SIZE (DRAWABLE_VERTEX_DEPTH * SIZE_OF_VERTEX_ELEMENT)
#define DRAWABLE_COLOR_DEPTH 4
#define SIZE_OF_COLOR_ELEMENT sizeof(GLfloat)
#define COLOR_SIZE (DRAWABLE_COLOR_DEPTH * SIZE_OF_COLOR_ELEMENT)
#define INDEX_SIZE sizeof(GLushort)
#define DRAWABLE_STRIDE (VERTEX_SIZE + COLOR_SIZE)

inline Drawable(/*Arguments omitted for brevity...*/)
{
//Standard initialization omitted....

glGenBuffers(1, &vboID);
glGenBuffers(1, &vioID);
glGenVertexArrays(1, &vaoID);

glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vioID);

glBufferData(GL_ARRAY_BUFFER, (VERTEX_SIZE + COLOR_SIZE) * vertexCount, vertexData, drawType);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, INDEX_SIZE * indexCount, indexData, drawType);

glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

//Generate Vertex Array

glBindVertexArray(vaoID);
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(0, DRAWABLE_VERTEX_DEPTH, GL_FLOAT, GL_FALSE, DRAWABLE_STRIDE, 0);
glVertexAttribPointer(1, DRAWABLE_COLOR_DEPTH, GL_FLOAT, GL_FALSE, DRAWABLE_STRIDE, (GLbyte*)VERTEX_SIZE);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vioID);
glBindVertexArray(0);
}

inline void draw()
{
glBindVertexArray(vaoID);
glDrawElements(drawMode, indexCount, GL_UNSIGNED_SHORT, NULL);
glBindVertexArray(0);
}

Вершинный шейдер GLSL:

#version 430\r\n

in layout(location=0) vec3 inPosition;
in layout(location=1) vec4 inColor;
out vec4 outVertexColor;

void main()
{
gl_Position = vec4(inPosition, 1.0);
outVertexColor = inColor;
}

Фрагмент шейдера GLSL:

#version 430\r\n

in vec4 outVertexColor;
out vec4 outFragmentcolor;

void main()
{
outFragmentcolor = outVertexColor;
}

0

Решение

Помимо проблем, упомянутых в комментариях, вашим индексным массивом является GLushort (16-разрядный без знака), в то время как ваш вызов отрисовки указывает GL_UNSIGNED_INT (32-разрядный без знака). Заменить на GL_UNSIGNED_SHORT.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]