I'm trying to write my own fractal generator. What I do is I generate coordinates with a color associated with it which is loaded into vector<Point> _points. _points is then used to load the vector<float> _vertexBuffer and vector<float> _colorBuffer which are to be used to draw with the vbo. There might be a problem with the libraries that I'm linking. So suggestions on what opengl extension library I should use for vbos is welcomed. I have a feeling that I'm also not loading data in correctly from the buffers... any help is appreciated.
Here is my code, I'm sure someone could notice the problem pretty easily:
#define NO_SDL_GLEXT
#include <GL/glew.h>
#include <SDL.h>
#include <SDL_opengl.h>
...
unsigned int FractalGenerator::_vertexHandle;
unsigned int FractalGenerator::_colorHandle;
vector<float> FractalGenerator::_vertexBuffer;
vector<float> FractalGenerator::_colorBuffer;
...
struct Color
{
float r, g, b;
};
struct Point
{
float x, y;
Color c;
};
....
for (int i = 0; i < _points.size(); i++)
{
_vertexBuffer.push_back(_points.x);
_vertexBuffer.push_back(_points.y);
_colorBuffer.push_back(_points.c.r);
_colorBuffer.push_back(_points.c.g);
_colorBuffer.push_back(_points.c.b);
}
...
I'm getting a fault here, when I generate the the vbo for _vertexHandle
glGenBuffers(1, &_vertexHandle);
glBindBuffer(GL_ARRAY_BUFFER, _vertexHandle);
glBufferData(GL_ARRAY_BUFFER, _vertexBuffer.size() * sizeof(float), &_vertexBuffer.front(), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glGenBuffers(1, &_colorHandle);
glBindBuffer(GL_ARRAY_BUFFER, _colorHandle);
glBufferData(GL_ARRAY_BUFFER, _colorBuffer.size() * sizeof(float), &_colorBuffer.front(), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
...
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glScaled(_zoomFactor, _zoomFactor, 1);
glTranslated(_xOffSet, _yOffSet, 0);
glBindBuffer(GL_ARRAY_BUFFER, _vertexHandle);
glVertexPointer(2, GL_FLOAT, 0, 0L);
glBindBuffer(GL_ARRAY_BUFFER, _colorHandle);
glColorPointer(3, GL_FLOAT, 0, 0L);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_POINTS, 0, _vertexBuffer.size());
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glPopMatrix();
SDL_GL_SwapBuffers();