LINUX.ORG.RU

GLBatch валится с сегфолтом


0

1

Попробовал сделать пентаграмму(правда, потом понял, что треугольниками нужно иначе, но не суть важно), переделывая пример из SB5. Валится с SIGSEGV. Посмотрел, где именно: в файле GLBatch.cpp(есть в архиве http://www.starstonesoftware.com/files/SB5.zip) на 108 строке:

glGenVertexArrays(1, &vertexArrayObject);
После этого попробовал скопировать из самого примера 3 вершины, но то же самое. Может, где-то еще ошибка?
#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;
}

★★★★

такбыло десять троек а стало только одна а у тебя 3 вместо 1 в коде

anonymous ()
Ответ на: комментарий от anonymous

Не так выразился. В оригинальном коде было 3. Попробовал поставить 10 в своем переписанном - стало валится. После того, как вернул 3(ошибка не там) - ничего не изменилось

wingear ★★★★ ()
Ответ на: комментарий от wingear

Какие примитивы рисовались в оригинале ? Точки ? Просто у вас описываются 3 вершины в пространстве, из которых вы каким-то образом хотите получить 3 треугольника.

Kirakishou ()
Ответ на: комментарий от Kirakishou
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);

Это полностью скопировано из примера. Я думал, аргумент последней функции обозначает количество вершин, а не греугольников

wingear ★★★★ ()
Ответ на: комментарий от wingear

> Я думал, аргумент последней функции обозначает количество вершин

Да, вы оказались правы, судя по исходникам так оно и есть. Тогда и не знаю что посоветовать. Разве что вернуть на место shaderManager.InitializeStockShaders().

Kirakishou ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.