2012-11-15 2 views
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. 이러한 호출을 사용하여 성능에 얼마나 많은 영향을 줍니까?

답변

1

이 전화를해야 :

glBindBuffer(GL_ARRAY_BUFFER,0);

기능 glBufferData 후.

//added this line before glVertexPointer: 
glBindBuffer(GL_ARRAY_BUFFER,buffID); 
//glVertexPointer(3,GL_FLOAT,0,testBuffer); change last param to 0: 
glVertexPointer(3,GL_FLOAT,0,0); 

을, 모든 것이 잘 작동 보인다 덧붙였다 후 :

또한 나는이을 변경해야합니다 발견했다.