Попробовал сделать пентаграмму(правда, потом понял, что треугольниками нужно иначе, но не суть важно), переделывая пример из SB5. Валится с SIGSEGV. Посмотрел, где именно: в файле GLBatch.cpp(есть в архиве http://www.starstonesoftware.com/files/SB5.zip) на 108 строке:
glGenVertexArrays(1, &vertexArrayObject);
#include "qltprimer.h"
#include "include/GLTools.h"
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include "include/GLFrustum.h"
#include "include/GLMatrixStack.h"
#include "include/GLFrame.h"
#include "include/GLGeometryTransform.h"
GLFrame viewFrame;
GLBatch starBatch;
GLFrustum viewFrustum;
GLMatrixStack ProjectionMatrix;
GLMatrixStack ModelViewMatrix;
GLGeometryTransform transformPipeline;
GLShaderManager shaderManager;
void init(void)
{/*
GLfloat vVerts[] = { -2.0f, -2.0f, 10.0f,
-1.0f, 0.0f, 10.0f,
-3.0f, 1.0f, 10.0f,
-1.0f, 1.0f, 10.0f,
0.0f, 3.0f, 10.0f,
1.0f, 1.0f, 10.0f,
3.0f, 1.0f, 10.0f,
1.0f, 0.0f, 10.0f,
2.0f, -2.0f, 10.0f,
0.0f, -1.0f, 10.0f
};
*/
GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f };
starBatch.Begin(GL_TRIANGLES,3);//было 10
starBatch.CopyVertexData3f(vVerts);
starBatch.End();
glClearColor(0.3f, 0.3f, 0.3f, 1.0f );
}
void ChangeSize(int w,int h)
{
if(h==0)
h=1;
glViewport(0,0,w,h);
viewFrustum.SetPerspective(45.0f,float(w)/float(h),1,100);
ProjectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix());
transformPipeline.SetMatrixStacks(ModelViewMatrix, ProjectionMatrix);
}
void RenderScene(void)
{
shaderManager.InitializeStockShaders();
//viewFrame.MoveForward(7.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
ModelViewMatrix.PushMatrix(viewFrame);
GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
shaderManager.UseStockShader(GLT_SHADER_DEFAULT_LIGHT, transformPipeline.GetModelViewMatrix(), transformPipeline.GetProjectionMatrix(), vRed);
starBatch.Draw();
ModelViewMatrix.PopMatrix();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(800,600);
glutCreateWindow("wnd");
glutReshapeFunc(ChangeSize);
init();
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
glutMainLoop();
return 0;
}