Я хочу создать своего рода приложение для рисования с opengl, и я следовал этим инструкциям.
Однако, когда я касаюсь экрана несколько раз, я получаю сообщение об ошибке: «приложение остановлено». и исключение:
Фатальный сигнал 11 (SIGSEGV), код 2, адрес ошибки 0x7554d018 в тиде 7210 (GLThread 379)
Это мой код для сенсорных событий:
public void processTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
x = event.getX();
y = event.getY();
// In this method I update the vector and I set "longTouch" (boolean variable) to true
addPoint(x, y);
break;
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP:
longTouch = false;
break;
}
}
Логика, которой я придерживаюсь, заключается в том, что когда пользователь перетаскивает палец на экране в DrawFrame, «longTouch» (логическая переменная) активируется в значение true, затем он создает или обновляет буфер вершин и индексный буфер, и это отправлено рисовать линии с DrawElements.
if (longTouch){
if (vertices.length >= 4){
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
index = new short[vertices.length];
for (short i = 0; i < index.length; i++){
index[i] = i;
}
ByteBuffer ibb = ByteBuffer.allocateDirect(index.length * 2);
ibb.order(ByteOrder.nativeOrder());
indexBuffer = ibb.asShortBuffer();
indexBuffer.put(index);
indexBuffer.position(0);
glVertexPointer(2, GL10.GL_FLOAT, 0, vertexBuffer);
glDrawElements(GL_LINES, index.length, GL_UNSIGNED_SHORT, indexBuffer);
}
}
Я корректно обновляю и изменяю размер вектора, так что я думаю, что это не ошибка. Я предполагаю, что ошибка связана с потоков , но я не знаю, как ее решить.