2017-02-17 4 views
0

Я пытаюсь нарисовать простой куб с помощью вентиляторов треугольника в Open GL ES 3.0. Включение GL_PRIMITIVE_RESTART_FIXED_INDEX Позвольте мне определить 2 вентилятора, необходимые для рисования куба.Использование GL_PRIMITIVE_RESTART_FIXED_INDEX с Open GL ES 3.0

В результате я получаю ошибку (Fatal сигнал 11 (SIGSEGV), код 2, адр вина 0x74d7e390 в TID 3055 (GLThread 139)) и аварии приложение ...

Чтобы помочь вам найти, где ошибка может быть, я добавляю код, который я использую ниже.

определение куба:

//    4--------7 
    //   -|  -| 
    //   - |  - | 
    //   0--------3 | 
    //   | |  | | 
    //   | 5-----|--6 
    //   | -  | - 
    //   |-  |- 
    //   1--------2 
    // point 0 
    coord[0]=-0.5f; 
    coord[1]=0.5f; 
    coord[2]=0.5f; 
    coord[3]=1f; 

    // point 1 
    coord[4]=-0.5f; 
    coord[5]=-0.5f; 
    coord[6]=0.5f; 
    coord[7]=1f; 

    // point 2 
    coord[8]=0.5f; 
    coord[9]=-0.5f; 
    coord[10]=0.5f; 
    coord[11]=1f; 

    // point 3 
    coord[12]=0.5f; 
    coord[13]=0.5f; 
    coord[14]=0.5f; 
    coord[15]=1f; 

    // point 4 
    coord[16]=-0.5f; 
    coord[17]=0.5f; 
    coord[18]=-0.5f; 
    coord[19]=1f; 

    // point 5 
    coord[20]=-0.5f; 
    coord[21]=-0.5f; 
    coord[22]=-0.5f; 
    coord[23]=1f; 

    // point 6 
    coord[24]=0.5f; 
    coord[25]=-0.5f; 
    coord[26]=-0.5f; 
    coord[27]=1f; 

    // point 7 
    coord[28]=0.5f; 
    coord[29]=0.5f; 
    coord[30]=-0.5f; 
    coord[31]=1f; 

    drawingOrder=new short[17]; 

    // first triangle fan : front, top and left faces 
    drawingOrder[0]=0; 
    drawingOrder[1]=1; 
    drawingOrder[2]=2; 
    drawingOrder[3]=3; 
    drawingOrder[4]=7; 
    drawingOrder[5]=4; 
    drawingOrder[6]=5; 
    drawingOrder[7]=1; 
    drawingOrder[8]=-1; 

    // second triangle fan : bottom, back and right faces 
    drawingOrder[9]=6; 
    drawingOrder[10]=2; 
    drawingOrder[11]=1; 
    drawingOrder[12]=5; 
    drawingOrder[13]=4; 
    drawingOrder[14]=7; 
    drawingOrder[15]=3; 
    drawingOrder[16]=2; 

Розыгрыш функция:

public void draw(float [] transformMatrix) { 
     GLES30.glUseProgram(programmeOpenGL); 

     verticePositionIndex = GLES30.glGetAttribLocation(programmeOpenGL, "positionsSommets"); 

     GLES30.glEnableVertexAttribArray(verticePositionIndex); 

     GLES30.glVertexAttribPointer(verticePositionIndex , NB_COORDINATES_PER_VERTICE, GLES30.GL_FLOAT, false, verticeMemorySize, verticesList); 

     verticeColorIndex= GLES30.glGetAttribLocation(programmeOpenGL,"couleursSommets"); 

     GLES30.glEnableVertexAttribArray(verticeColorIndex); 

     GLES30.glVertexAttribPointer(verticeColorIndex, 4, GLES30.GL_FLOAT, false, 16, colorList); 

     transformMatrixIndex = GLES30.glGetUniformLocation(programmeOpenGL, "matriceTransformation"); 

     GLES30.glUniformMatrix4fv(transformMatrixIndex , 1, false, transformMatrix, 0); 

     GLES30.glEnable(GLES30.GL_PRIMITIVE_RESTART_FIXED_INDEX); 

     GLES30.glDrawElements(GLES30.GL_TRIANGLE_FAN,17,GLES30.GL_UNSIGNED_SHORT,verticesOrderList); 

     GLES30.glDisable(GLES30.GL_PRIMITIVE_RESTART_FIXED_INDEX); 

     GLES30.glDisableVertexAttribArray(verticePositionIndex); 

     GLES30.glDisableVertexAttribArray(verticeColorIndex); 
} 

Я могу добавить, что если бы я только сделать один вентилятор (первое или второе), она отображается правильно. ..

Есть идеи?

ответ

0

Просто закодируйте эквивалентное двоичное значение 0xFFFF (без знака 65535) как Java short. Для подписанного короткого 0xFFFF = -1. Когда вы копируете буфер, он «просто работает».

+0

Это идея, которую я только что имел, но это не лучше ... Я добавил код, чтобы помочь вам найти, где проблема на самом деле. – Zelig63

+0

Какова фактическая проблема, с которой вы сталкиваетесь? Кодирование -1, безусловно, является исправлением перезапуска многоугольника, поэтому, если у вас проблемы, это не связано с этим ... – solidpixel

+0

Вот что я подумал, увидев, что ввод -1 не решил проблему, и именно поэтому я добавил свой код в вопрос. Могу добавить, что сохранение только первого треугольника приводит к правильному отображению лица. Добавление второго лица приводит к сбою приложения (ошибка: фатальный сигнал 11 (SIGSEGV), код 2, ошибка addr 0x74d7e3b0 in tid 5585 (GLThread 179)) – Zelig63

Смежные вопросы