0
전화, 여기에 초기화 할 수있는 기능입니다 :간단한 OpenGL을 응용 프로그램 후 나는이 OpenGL을 버퍼에 그리는 방법을 테스트하기 위해 쓴 glBindBuffer
#include "GL/glew.h"
#include "GL/glfw.h"
int main (int argc, char* argv[])
{
//init glfw
glfwInit();
glfwOpenWindow (1024, 768, 8, 8, 8, 8, 24, 0, GLFW_WINDOW);
//init extension
glewInit();
//i
glGenBuffers (1, &buffID);
//init test buffer
for (int i = 0 ; i < 15; i ++) {
testBuffer[i][0] += 1 + i * i;
testBuffer[i][1] += 1 + i + i * i;
testBuffer[i][2] = 0;
}
do {
render_loop();
} while (glfwGetWindowParam (GLFW_OPENED));
glfwTerminate();
}
를이는 render_loop 기능입니다 :
GLuint buffID;
static GLfloat testBuffer[15][3];
void render_loop()
{
glClearColor (.7, .1, .1, 1.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport (0, 0, 1024, 768);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho (0, 1024, 768, 0, 0, -1);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity();
//draw a test point
glPointSize (10);
glBegin (GL_POINTS);
glColor4f (1, 1, 1, 1);
glVertex3f (512, 384, 0);
glEnd();
glBindBuffer(GL_ARRAY_BUFFER,buffID);
glBufferData(GL_ARRAY_BUFFER,3 * sizeof(GLfloat) * 15, testBuffer,GL_DYNAMIC_DRAW);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_FLOAT,0,testBuffer);
glDrawArrays(GL_POINTS,0,15);
glBindBuffer(GL_ARRAY_BUFFER,0);
glDisableClientState(GL_VERTEX_ARRAY);
glfwSwapBuffers();
}
glBindBuffer(GL_ARRAY_BUFFER,buffID);
glBufferData(GL_ARRAY_BUFFER,sizeof(GLfloat) * 15, testBuffer,GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER,0);
:
15 개 정점은 윈도우의 왼쪽 상단 모서리가, 내가 루프에서이 3 줄을 제거 한 후, 거기에 흰색 점을 볼 수있다 0,0 위치에 있습니다
모든 것이 예상대로 작동하지만 몇 가지 질문이 있습니다.
버텍스 버퍼 위치가 변경되었습니다.
2. 이러한 호출을 사용하여 성능에 얼마나 많은 영향을 줍니까?