Проблемы с Vertex array
Привет всем!
Не могу никак разобраться с vertex array, либо не рисуется либо, если обращаться по элементо приводит вылету приложения. Причем приложение в debug сессии выдают ошибку обращение к не валидному участку памяти.
Подскажите, что я делаю не так.
Вот код
#include <iostream>
#include "include/GL/freeglut.h"
using namespace std;
void SetupRC();
void ChangeSize(int w, int h);
void RenderScene();
void Time(int t);
void MoveCallback(int x, int y);
void MouseCallback(int button, int state, int x, int y);
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitContextVersion(2, 0);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(640, 480);
glutCreateWindow("test array");
glutDisplayFunc(RenderScene);
glutMouseFunc(MouseCallback);
glutReshapeFunc(ChangeSize);
glutTimerFunc(100,Time,1);
SetupRC();
std::cout<<glGetString(GL_VERSION);
RenderScene();
glutMainLoop();
}
void MouseCallback(int button, int state, int x, int y)
{
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
}
if(button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN)
{
}
}
void MoveCallback(int x, int y)
{
}
void SetupRC()
{
glColor3f(0.0f, 1.0f, 0.0f);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.3f, 1.0f);
}
void Time(int t)
{
RenderScene();
glutSwapBuffers();
glutTimerFunc(100, Time, 1);
}
void ChangeSize(int w, int h)
{
float aspectRatio;
if (h == 0) h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
aspectRatio = (float)w / (float)h;
gluPerspective(45, aspectRatio, 1.0, 425);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glPushMatrix();
glTranslatef(0.0f, 0.0f, -30.f);
static GLfloat vert [] = {0.0f, 0.0f, -4.0f,
-1.0f, -2.0f, -4.0f,
3.0f, -2.0f, -4.0f,
3.0f, 0.0f, -4.0f};
static GLfloat color [] = {0.0f, 0.0f, 0.0f,
1.0f, 1.0f, 0.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 0.0f};
static GLint index [] = {0, 1, 2,
3, 4, 5,
6, 7, 8,
9, 10, 11};
/*glBegin( GL_QUADS );
glColor3f(0.1f, 0.0f, 0.0f );
glVertex3f(0.0f, 0.0f, -4.0f);
glColor3f(0.0f, 1.0f, 0.0f );
glVertex3f(-1.0f, -2.0f, -4.0f);
glColor3f(0.0f, 0.0f, 1.0f );
glVertex3f(3.0f, -2.0f, -4.0f);
glColor3f(0.0f, 0.0f, 1.0f );
glVertex3f(3.0f, 0.0f, -4.0f);
glEnd();*/
//glColor3f(0.1f, 1.0f, 1.0f );
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(3, GL_FLOAT, 0, &color[0]);
glVertexPointer(3, GL_FLOAT, 0, &vert[0]);
glBegin(GL_LINE);// что здесь не пиши все равно crash
glArrayElement(2);
glArrayElement(3);
//glArrayElement(3);
//glArrayElement(3);
glEnd();
//glDrawElements(GL_QUADS, 12, GL_INT, index);
//если рисуешь через DrawElements то ошибка доступа к памяти не возникает, но не рисуется!
glPopMatrix();
glutSwapBuffers();
}
Извиняюсь за корявый код)))