매우 간단한 GLFW 및 VBO 예제를 실행하려고하는데 막혔습니다. 나는 glBegin
과 glEnd
을 다른 프로젝트에 사용했지만 OpenGL ES 2에서 작동하도록 코드를 업데이트하려고하지만 가능한 한 앞으로 호환되도록하려고합니다.간단한 VBO 예제의 문제
#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();
}
이 코드를 실행,하지만 난 흰색 삼각형을 볼 것으로 예상 할 때 내가 할 모든 검은 화면입니다 : 온라인 몇 가지 예에서
, 나는 다음과 같은 코드로 왔어요. 적어도 스크린에 페인트 칠할 때까지는 쉐이더/텍스처와 같은 멋진 것을 피하려고했습니다.중요한 경우, Linux에서 OpenGL 버전 2.1을 사용하여 Mesa 드라이버를 사용하여 gcc -o test -lGL -lglfw -lm test.c
을 컴파일 중입니다.
내가 뭘 잘못하고 있니? 색상 정보를 지정해야하는 경우,이를 수행하는 간단한 방법은 무엇입니까?
'glEnableClientState' 및'glVertexPointer'가 사용되지 않습니다. 그래서 다른 두 사람을 사용했습니다. – tjameson
@tjameson : 아니요. 그들은 * 제거 *, 더 이상 사용되지 않습니다. 나머지 고정 기능 파이프 라인도 마찬가지입니다. 비 핵심 3.1+ OpenGL 기능에 의존하려면 렌더링 할 쉐이더가 필요합니다. –
다음은이 질문에 대한 최상의 답변입니다. 나는 셰이더를 계산하기로 결정했다. (사실 너무 어렵지는 않았다.) 이제는 작동 중이다. 감사합니다 @ NicolBolas, 정확히 내가 찾고 있었던 것이 었습니다. – tjameson