Debian Sid / SDK 20.0.3 / Эмулятор + kvm + GPU Emulation
Использую GLES20. Делаю класс спрайта, который сохранял бы линейные размеры(в пикселях) при любом разрешении экрана (и при смене ориентации тоже). Всё хорошо, только линейные размеры увеличены в 1.5 раза. На реальном устройстве проверить не могу.
Задаю ортогональную проекцию так:
float sp = 0.5f;
Matrix.orthoM(mProjMatrix,0 ,-sp, sp, -sp, sp, -sp, sp);
Т.е. проецировать будем куб со стороной 1, центром в (0,0,0);
Камеру отодвигаю. Пересчитываю размер полигонов
:
vertexBuffer = createPlane(width/_width/2, height/_height/2);
Т.е. вычисляю соотношение размера спрайта/размер области рисования, т.к. куб единичного размера, то получившееся процентное соотношение в теории должно дать исходный размер. На два делю — функция принимает координаты правого верхнего угла квадрата с центром в (0,0,0).
Сам код функции:
private FloatBuffer createPlane(float _width, float _height)
{
float quard[] =
{
-_width, _height, 0.0f,
_width, _height, 0.0f,
-_width, -_height, 0.0f,
_width, -_height, 0.0f
};
return floatbufferFactory(quard);
}
private FloatBuffer floatbufferFactory(float[] buffer)
{
ByteBuffer bb = ByteBuffer.allocateDirect(buffer.length*4);
bb.order(ByteOrder.nativeOrder());
FloatBuffer result = bb.asFloatBuffer();
result.put(buffer);
result.position(0);
return result;
}
Все перепробывал — и разные разрешения, и DPI в эмуляторе подставлял, и гуглил. Пикселей в 1.5 раза больше.