Я реализовал слой на основе плитки в моей игре, но после первого раза
оно было нарисовано, только в первый раз я пытаюсь обновить его (чтобы добавить крошечные надписи, такие как брызги крови, кратеры и т. д., которые добавляются на карту и которые я не хочу рисовать отдельно каждый цикл) у меня огромный сбой в 3 ~ секунды.
после некоторого теста, я нашел единственный звонок, который зависает.
gl.glTexSubImage2D (GL10.GL_TEXTURE_2D, 0, x, y, ширина, высота, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, pixelBuffer);
декаль действительно крошечная (32 * 32 пикселя), после этого вызова нет ошибки opengl, и я действительно не понимаю все (я имею в виду ..... создание целого слоя листов на самом деле занимает намного меньше, чем 1 секунду, и выполняется тысячами команды glTexSubImage2D на большой пустой текстуре ..... 3 секунды довольно большие).
У меня уже есть обходной путь («поддельное» обновление как раз перед тем, как отключается заставка), но я действительно хочу понять это странное (по крайней мере для меня) поведение ..: |
(мне очень жаль моего английского, надеюсь, это понятно)
METHOD:
public static void replaceSubImg(GL10 gl, int hwdId , int x,int y,int width, int height,Buffer pixelBuffer) {
gl.glFinish();
gl.glBindTexture(GL10.GL_TEXTURE_2D, hwdId);
long time = System.currentTimeMillis();
gl.glTexSubImage2D(GL10.GL_TEXTURE_2D, 0, x, y, width, height, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, pixelBuffer);
Log.d("testApps","openglUtil,@@@@@@@@@@@@@@@@@@@@@@@@@ subImg replaced in "+(System.currentTimeMillis()-time)+" ms");
}
LOG:
DEBUG/testApps(3809): openglUtil,@@@@@@@@@@@@@@@@@@@@@@@@@ subImg replaced in 2811 ms
DEBUG/testApps(3809): openglUtil,@@@@@@@@@@@@@@@@@@@@@@@@@ subImg replaced in 1 ms(this is the 2d run)