Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>PS: The program is up and running, but I can't see any improvement in the average performance when compared to the Vertex Array version. Is that alright? THE PROBLEM WAS SOLVED. I´ve done three alterations:</p> <pre><code>1 - I though that glGenBuffers first parameter was the number that would be associated to the buffer, instead, its the number of buffers that would be allocated. This doesn't matter anyway, because now I'm using a single buffer and adding all the data to it. Didn't solved the problem, but was going in the right way. 2 - There are two ways of being able to use OpenGL VBO functions. First, you can bind the ARB version functions by yourself OR you can add glew.h and use glewInit() after starting an OpenGL context. The second option is a LOT cleaner and I changed my code so I don't use the ARB versions anymore. Still didn't solved the problem. 3 - Christian Rau asked me for glErrors in the code, so, I wrote it after each OpenGL operation in displayCB. After glDrawArrays I got an 0x00500 error, that means there is an invalid enum, so I noticed I was using GL_POINT as parameter to glDrawArrays, instead of GL_POINTS, so silly that makes me want to kill myself. </code></pre> <p>The final code:</p> <pre><code>//EDIT: Added glew.h as a header and I´m not using the ARB version anymore #include &lt;glew.h&gt; int main() { //Declaring variables, initiating glut, setting camera and checking the compatibility as http://www.songho.ca/opengl/gl_vbo.html glutDisplayFunc(displayCB); glutIdleFunc(displayCB); ... //EDIT: IS VERY IMPORTANT TO ADD IT AS SOON AS YOU START AN OPENGL CONTEXT. initGlew(); //Inittiating the vertex buffers if(vboSupported) { //EDIT: I was using two buffers, one for color and another for the vertex. I changed the code so I use a single buffer now. //EDIT: Notice that I'm not using the ARB version of the functions anymore. glGenBuffers(1, &amp;buffer); glBindBuffer(GL_ARRAY_BUFFER_ARB, buffer); glBufferData(GL_ARRAY_BUFFER_ARB, (sizeof(GLfloat) * 640 * 480 * 3) + (sizeof(GLbyte) * 640 * 480 * 3), 0, GL_STREAM_DRAW_ARB); } //glutMainLoop(), cleaning memory, ending main .. } //Updating the screen void displayCB() { point_cloud.update(); // clear buffer glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // save the initial ModelView matrix before modifying ModelView matrix glPushMatrix(); glBindBuffer(GL_ARRAY_BUFFER_ARB, buffer); glBufferSubData(GL_ARRAY_BUFFER_ARB, 0, (sizeof(char) * 640 * 480 * 3), point_cloud.points_color); glBufferSubData(GL_ARRAY_BUFFER_ARB, (sizeof(char) * 640 * 480 * 3), (sizeof(float) * 640 * 480 * 3), point_cloud.points_position); // enable vertex arrays glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glColorPointer(3, GL_UNSIGNED_BYTE, 0, 0); //EDIT: Added the right offset at the vertex pointer position glVertexPointer(3, GL_FLOAT, 0, (void*)(sizeof(char) * 640 * 480 * 3)); //EDIT: Was using GL_POINT instead of GL_POINTS glDrawArrays(GL_POINTS, 0, 640*480); glDisableClientState(GL_VERTEX_ARRAY); // disable vertex arrays glDisableClientState(GL_COLOR_ARRAY); glBindBuffer(GL_ARRAY_BUFFER_ARB, 0); glPopMatrix(); glutSwapBuffers(); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload