В OpenGL ES 1.1 вы не можете использовать glLineStipple
и не можете использовать шейдер. Но вы можете использовать одномерную текстуру и Альфа-тест . См. Полная спецификация OpenGL ES 1.1 . OpenGL ES 1.1 также не поддерживает одномерные текстуры. Но это может быть легко заменено 2-мерной текстурой Nx1.
Создание 2D (4x1) текстуры с внутренним форматом GL_ALPHA
и следующим шаблоном:
1 0 0 1
Минифицирующее и функция увеличения GL_NEAREST
. Параметры переноса: GL_REPEAT
(это значение по умолчанию).
byte arr[] = new byte[] { 255, 0, 0, 255 };
ByteBuffer textureBuffer = ByteBuffer.wrap(arr);
gl2.glGenTextures(1, texture_id_, stippleTexObj);
gl.glBindTexture(GL.GL_TEXTURE_2D, stippleTexObj);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT);
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_ALPHA, 4, 1, 0, GL.GL_ALPHA, GL.GL_UNSIGNED_BYTE, textureBuffer);
При рисовании линий необходимо включить Альфа-тест и включить двухмерное текстурирование.
gl.glEnable(GL11.GL_ALPHA_TEST);
gl.glAlphaFunc(GL11.GL_GEQUAL, 0.5f);
gl.glEnable(GL11.GL_TEXTURE_2D);
Убедитесь, что координаты текстуры, связанные с вершинами, выровнены по целым значениям, когда ypu рисует линию:
например, квад с левым нижним краем (-0,5 -0,5) и до справа от (0,5, 0,5) и координат текстуры в диапазоне [0, 5]:
x y u
-0.5f -0.5f 0.0f
0.5f -0.5f 5.0f
0.5f 0.5f 0.0f
-0.5f 0.5f 5.0f