Я реализую opengl-es для android. И я встретил странную картинку на nexus 4. Хотя на nexus-s все выглядит так, как я ожидаю. Вот мой Renderer код:Странное изображение opengl-es на nexus 4
public void onSurfaceChanged(GL10 gl, int width, int height) {
Log.d(TAG, "onSurfaceChanged");
if (height == 0) {
height = 1;
}
this.width = width;
this.height = height;
cellsh = height/cellSize;
cellsw = width/cellSize;
gl.glViewport(0, 0, width, height); // Reset The Current Viewport
gl.glMatrixMode(GL10.GL_PROJECTION); // Select The Projection Matrix
gl.glLoadIdentity(); // Reset The Projection Matrix
gl.glDisable(GL10.GL_DEPTH_TEST);// disable Z coordinate
gl.glOrthof(0f, width, height, 0, 0, 1);
gl.glMatrixMode(GL10.GL_MODELVIEW); // Select The Modelview Matrix
gl.glLoadIdentity();
}
@Override
public void onSurfaceCreated(GL10 gl,
javax.microedition.khronos.egl.EGLConfig config) {
Log.d(TAG, "onSurfaceCreated");
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
gl.glClearDepthf(1.0f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
}
public void onDrawFrame(GL10 gl) {
gl.glLoadIdentity();
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
gl.glTranslatef(cellSize/2, cellSize/2, 0f);
for (int i = 0; i < cellsw; i++) {
for (int j = 0; j < cellsh; j++) {
if (Cells.firstGen()) {
if (Cells.getCell(j, i)) {
Coloriry(gl, 2);
} else {
Coloriry(gl, 1);
}
gl.glScalef(squareSize/2f, squareSize/2f, 1f);
quad.draw(gl); // Draw triangle (NEW)
gl.glScalef(1/(squareSize/2f), 1/(squareSize/2f), 1);
gl.glTranslatef(0.0f, cellSize, 0.0f);
continue;
}
if (Cells.getOldCell(j, i) != Cells.getCell(j, i)) {
if (Cells.getCell(j, i)) {
Coloriry(gl, 2);
} else {
Coloriry(gl, 1);
}
gl.glScalef(squareSize/2f, squareSize/2f, 1f);
quad.draw(gl);
gl.glScalef(1/(squareSize/2f), 1/(squareSize/2f), 1);
}
gl.glTranslatef(0.0f, cellSize, 0.0f);
}
gl.glTranslatef(cellSize, -cellsh * cellSize, 0.0f);
}
Cells.nextGen();
frames += 1;
}
А вот скриншоты из Nexus S и Nexus 4.
Видеооборудование вашего устройства, похоже, находится в странном состоянии. Можете ли вы воспроизвести результаты после перезагрузки устройства? Вы проверили все коды возврата из функций GL в порядке? – LumpN
точно повторяются шаблоны. Похоже, что что-то не так с памятью. Но другие приложения opengl-es выглядят отлично. Я думаю, проблема в некоторой внутренней реализации opengl, потому что, например, если я перетаскиваю верхний ящик, я вижу часы на фоне моего рендеринга и других элементов системы ui ... :) И никакой ошибки в связи с нексусом S – swex
проблема уходит, если я помещаю gl.glClear (GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); to OnDrawFrame(), но что я могу сделать, если я не хочу перерисовывать весь экран в каждом кадре? Что делать, если я хочу перерисовать только измененные квадраты? – swex