非常に単純なGLFWとVBOの例を実行しようとしていますが、行き詰まっています。私は他のプロジェクトで使用glBegin
しましglEnd
たが、OpenGL ES 2で動作するようにコードを更新しようとしていますが、今のところ、可能な限り上位互換性を保ちたいと思っています。
オンラインのいくつかの例から、私は次のコードを思いついた:
#include <stdlib.h>
#include <GL/glfw3.h>
#include <stdio.h>
#define bool int
#define true 1
#define false 0
const int width = 800;
const int height = 600;
bool opened = true;
GLuint glTriangle;
GLfloat triangle[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
void init() {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glGenBuffers(1, &glTriangle);
glBindBuffer(GL_ARRAY_BUFFER, glTriangle);
glBufferData(GL_ARRAY_BUFFER, sizeof(triangle), triangle, GL_STATIC_DRAW);
}
void display() {
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, glTriangle);
glVertexAttribPointer(0L, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
}
int windowClose(GLFWwindow window) {
opened = false;
return GL_TRUE;
}
void main() {
if (!glfwInit()) {
printf("glfwInit didn't work\n");
return;
}
GLFWwindow window = glfwCreateWindow(width, height, GLFW_WINDOWED, "Test", 0);
glfwMakeContextCurrent(window);
init();
glfwSetWindowCloseCallback(window, windowClose);
glfwSwapInterval(1);
while(opened) {
display();
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
}
このコードは実行されますが、白い三角形が表示されると予想したときに表示されるのは黒い画面だけです。少なくとも画面に何かがペイントされるまで、シェーダー/テクスチャのような派手なものは避けようとしました。
それが重要な場合、私は次のようにコンパイルしています:gcc -o test -lGL -lglfw -lm test.c
LinuxでOpenGLバージョン2.1を使用してMesaドライバーを使用します。
私は何が間違っているのですか?色情報を指定する必要がある場合、それを行う簡単な方法は何ですか?