0
私は少しのOpenGLをやり始めましたが、固定機能パイプラインの代替手段を発見したので、チュートリアルを検索しました。残念ながら、最も良いチュートリアルではC++を使用しています。可能であればCに固執したいと思います。だから私はものをコピーして貼り付けて試すことができませんでした。OpenGLドローバッファの問題
コードをコピーアンドペーストするとエラーが発生しましたが、どのように対処すべきかわかりません。問題のエラーは、「セグメンテーション違反」だった、とここのコードです:もちろん
#include <GL/glfw.h>
#include <GL/glu.h>
#include <stdlib.h>
#define SCREEN_WIDTH 1600
#define SCREEN_HEIGHT 1000
void main(int argc, char **argv)
{
float mouse_x, mouse_y;
GLuint positionBufferObject;
const float vertexPositions[] = {
0.75f, 0.75f, 0.0f, 1.0f,
0.75f, -0.75f, 0.0f, 1.0f,
-0.75f, -0.75f, 0.0f, 1.0f,
};
glGenBuffers(1, &positionBufferObject);
glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
int running = GL_TRUE;
// Initialize GLFW
if(!glfwInit())
{
exit(EXIT_FAILURE);
}
// Open an OpenGL window
if(!glfwOpenWindow(SCREEN_WIDTH,SCREEN_HEIGHT, 8,8,8,8,8,8, GLFW_WINDOW))
{
glfwTerminate();
exit(EXIT_FAILURE);
}
while (running)
{
glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
}
}
それは(明らかに)エラーに影響を与えていなかったので、コードの多くは、ここに欠けています。 "glDrawArrays"をコメントアウトするとエラーが修正され、OpenGLは正常に実行されます(論理的に描画することなく)。
助けが必要ですか?
glfwInitはOpenGLを初期化しませんか?私はそれを前に置いてみました。この短いコードでは、続いてコンピュータがクラッシュし、フルコードではまだセグメンテーション違反で終了しました。 – Orpheon
まあ、明らかにglfwInitは、他のものよりも先に行う必要があるので、ここで与えたコードサンプルでは少なくとも間違っています。 DrawArraysを削除すると、それ以前に呼び出された他のいくつかの関数があるとエラーが修正されるというのは不思議です。 – Robinson
@Orpheon:いいえ、 'glfwInit'はOpenGLを初期化しません。 GLFWを初期化します。 OpenGLを使用する前に、GLFW *を初期化してウィンドウを開く必要があります。 –