OpenGL:glDrawArrays有效,但glDrawElements没有

时间:2017-07-15 18:42:44

标签: c++ opengl

我有一个类来创建一个正方形,但是我正在使用glDrawArrays并且它工作得很好,但是当我尝试使用glDrawElements时它不起作用。

Sprite.h

from flask.ext.admin.actions import action

class MyModelAdmin(ModelAdmin):
    def is_action_allowed(self, name):
        if name == 'merge' and not user.superadmin:
            return False

        if name == 'delete' and not user.admin:
            return False

        return super(MyModelAdmin, self).is_action_allowed(name)

Sprite.cpp

#pragma once
#include <GL/glew.h>
#include <windows.h>
#include <iostream>
#include "shaderloader.h";

//#define USING_INDEX_BUFFER 1
#ifdef USING_INDEX_BUFFER
    #define NUM_VERTICES 4
    #define NUM_INDICES 6
#else
    #define NUM_VERTICES 6
#endif

class Sprite
{
public:
    Sprite(float x, float y, float width, float height);
    ~Sprite();
    void init();
    void draw();

private:
    float _x, _y;
    float _width, _height;

    GLuint _vao, _vbo, _eao;

#ifdef USING_INDEX_BUFFER
    GLfloat _vertices[4][2] = {
        { 0.0f, 0.0f },
        { 0.0f, 0.0f },
        { 0.0f, 0.0f },
        { 0.0f, 0.0f }
    }; // A Quad
    GLfloat _color[4][4] = {
        { 0.0f, 0.0f, 0.0f, 0.0f },
        { 0.0f, 0.0f, 0.0f, 0.0f },
        { 0.0f, 0.0f, 0.0f, 0.0f },
        { 0.0f, 0.0f, 0.0f, 0.0f }
    }; 
    GLuint _indices[6] = { 0, 0, 0, 0, 0, 0 };
#else 
    GLfloat _vertices[6][2] = {
        { 0.0f, 0.0f },
        { 0.0f, 0.0f },
        { 0.0f, 0.0f },
        { 0.0f, 0.0f },
        { 0.0f, 0.0f },
        { 0.0f, 0.0f }
    }; // A Quad
    GLfloat _color[6][4] = {
        { 0.0f, 0.0f, 0.0f, 0.0f },
        { 0.0f, 0.0f, 0.0f, 0.0f },
        { 0.0f, 0.0f, 0.0f, 0.0f },
        { 0.0f, 0.0f, 0.0f, 0.0f },
        { 0.0f, 0.0f, 0.0f, 0.0f },
        { 0.0f, 0.0f, 0.0f, 0.0f }
    }; 
#endif
};

有人可以向我解释错误是什么吗?

1 个答案:

答案 0 :(得分:1)

看起来你没有绑定索引缓冲区。它应该作为glDrawElements的最后一个参数传递,或者像glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _eao);方法中那样与调用init绑定。

此外,您的代码没有错误处理您应该在每次调用后调用glGetError