-1

以下のメソッドdraw_dataはすべて、2 つの三角形で正方形を描くだけです。したがって、ハードコードされた値。正方形は問題なくレンダリングされますが、スパムが発生します

vertex_renderer::draw_vertex_data()GL エラー: 列挙型が無効です。

私のコードから。私は何か間違ったことをしていますか?

私のレンダリング方法は次のとおりです。

bool draw_data(const GLsizei start_index = 0, GLsizei index_count = 0) {
  if (!vbo_id_ || start_index + index_count > index_count_) {
    return false;
  }

  if (index_count == 0) {
    index_count = index_count_;
  }

  glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);

  return !gl_errors::what_errors("vertex_renderer::draw_vertex_data()");
}

gl_errors::what_errors は次のように定義されています。

class gl_errors
{
public:
  static bool what_errors(const char * const prefix) {
    GLenum errorCode;
    bool is_error = false;

    while ((errorCode = glGetError()) != GL_NO_ERROR) {
      switch (errorCode) {
      case(GL_INVALID_ENUM): {
        std::cout << prefix << "GL ERROR: Invalid enum." << std::endl;
        is_error = true;
      }
        break;
      case(GL_INVALID_VALUE): {
        std::cout << prefix << "GL ERROR: Invalid value." << std::endl;
        is_error = true;
      }
        break;
      case(GL_INVALID_OPERATION): {
        std::cout << prefix << "GL ERROR: Invalid operation." << std::endl;
        is_error = true;
      }
        break;
      case(GL_STACK_OVERFLOW): {
        std::cout << prefix << "GL ERROR: Stack overflow." << std::endl;
        is_error = true;
      }
        break;
      case(GL_STACK_UNDERFLOW): {
        std::cout << prefix << "GL ERROR: Stack underflow." << std::endl;
        is_error = true;
      }
        break;
      case(GL_OUT_OF_MEMORY): {
        std::cout << prefix << "GL ERROR: Out of memory." << std::endl;
        is_error = true;
      }
        break;
      }
    }
    return is_error;
  }
};

アップデート

GLsizei stride = sizeof(verticies_t);
pos_id_ = basic_shader_.get_attribute("position");
glEnableVertexAttribArray(pos_id_);
glVertexAttribPointer(pos_id_, 2, GL_FLOAT, GL_FALSE, stride, 0);
gl_extensions::gl_errors::what_errors("1");

これが原因ですが、なぜこれが問題を引き起こしているのかわかりません。GL_FLOAT は有効な列挙型です。

4

1 に答える 1

1

glDrawElements()を返す条件は 1 つだけGL_INVALID_ENUMです。

mode が受け入れられない値の場合、GL_INVALID_ENUM が生成されます。

glDrawElements()呼び出しには有効なモードがあるため、これにより、API への他の呼び出しが疑われるようになります。以前に行った通話にさらにチェックを追加して、問題を追跡できるかどうかを確認します。

于 2013-05-22T05:23:05.023 に答える