11

そのため、私のプロジェクトでは、別のクラスを使用して Buffer.cpp というバッファーを作成しています。ここにコンストラクタがあります

#define GLEW_STATIC
#define GLEW_NO_GLU
#define GLFW_NO_GLU

#include "GL/glew.h"
#include "GL/glfw.h"

Buffer::Buffer(GLenum _type, const void *data, GLsizei _size, GLenum usage) :  type(_type), size(_size)
{
  ...

  //Generate Buffer
  glGenBuffers(1, &buffer);

  ...
}

そしてメンバーの定義:

GLuint buffer;
const GLsizei size; 
const GLenum type;
Buffer(GLenum, const void*, GLsizei, GLenum);

問題は、たとえば次のコマンドを使用してバッファーを生成しようとしたときです。

Buffer vBuffer(GL_ARRAY_BUFFER, vertexPositions, sizeof(vertexPositions), GL_STATIC_DRAW);

glGenBuffers() でプログラムがクラッシュし、終了ステータスが「-1073741819」になります。私はプログラムをデバッグしようとしましたが、これは私が得たものです:

Program received signal SIGSEGV, Segmentation fault.

私のカードは OpenGL 1.5 をサポートしているので、そうではありません。

また、静的 glew ライブラリを自分でコンパイルしたことにも注意してください。

編集:私は最終的に問題を修正しました。問題は、OpenGL レンダリング コンテキストを作成する前に glewInit() を呼び出していたことです。

4

1 に答える 1

21

したがって、glewInit() を呼び出した後に OpenGL コンテキストを作成していたため、glewInit() には GL エントリ ポイントを適切に設定する方法がありませんでした。

この場合、glewInit() はおそらくエラー コードを返しました。関数のエラー コードを確認していますか? GLEW_OK を返す必要があります。

于 2012-09-03T18:07:50.630 に答える