PDA

View Full Version : GL_STREAM_DRAW leads possible memory leak and high CPU occupation



dalishi
01-15-2015, 08:08 AM
Dear all

It is my first time posting questions here as I am now starting using OpenGL to do simple rendering programs. I have located the problem to the GL_STREAM_DRAW.

When I ran the program, system monitor will show nearly 100% CPU usage (fan keeps running) and memory usage keeps growing around 50k per sec. When I comment out the glMapBuffer(), everything becomes normal.

The two functions are as below. The initScence will be run once and the renderScene will be run in a loop in a separate thread.

Any thoughts about this would be appreciated. Thanks guys.

I am using:
Status: Using GLFW 3.0.4 X11 GLX glXGetProcAddress clock_gettime /dev/js
Status: Using GLEW 1.11.0
OpenGL version supported by this platform: 3.0 Mesa 8.0.4
OpenGL verdor supported by this platform: nouveau
OpenGL renderer supported by this platform: Gallium 0.4 on NVD9
GLSL version supported by this platform: 1.30





void InitScene() {
glGenVertexArrays(1, &vao_);
glBindVertexArray(vao_);

/// data
.....

glGenBuffers(1, &vbo_);
glBindBuffer(GL_ARRAY_BUFFER, vbo_);
glBufferData(GL_ARRAY_BUFFER, sizeof(data...), NULL, GL_STREAM_DRAW);

/// Specify the layout of the vertex data
GLint pos_attrib = GetAttribLocation("vPosition");
glEnableVertexAttribArray(pos_attrib);
glVertexAttribPointer(pos_attrib, 2, GL_FLOAT, GL_FALSE, 0, 0);

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}



void RenderScene() {
glBindBuffer(GL_ARRAY_BUFFER, vbo_);
GLfloat* buffer_ptr = (GLfloat*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);

/// Change buffer data through buffer_ptr
......
glUnmapBuffer(GL_ARRAY_BUFFER);

/// Draw
glBindVertexArray(vao_);
glDrawArrays(....);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}