Опытный
 
Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж
Репутация: нет Всего: нет
|
Привет всем! Хотел потестить сабж. Но не фурычит. Объясню подробней: 1) Начал я с тестинга опенжеле 1.1. активити: | Код | package android.test;
import android.app.Activity; import android.opengl.GLSurfaceView; import android.os.Bundle; import android.view.Window; import android.view.WindowManager;
public class TestGLActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); GLSurfaceView surface = new GLSurfaceView(this); surface.setRenderer(new MyRenderer(this)); this.setContentView(surface);
} }
|
сам класс: | Код | package android.test;
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.ShortBuffer;
import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10;
import android.content.Context; import android.opengl.GLES10; import android.opengl.GLES11; import android.opengl.GLES20; import android.opengl.GLSurfaceView.Renderer;
public class MyRenderer implements Renderer { private Context context; private int vbo; private int ibo; public MyRenderer(Context context) { this.context = context; this.vbo = 0; this.ibo = 0; } @Override public void finalize() { GLES11.glDeleteBuffers(2, new int[] { this.vbo, this.ibo }, 0); this.vbo = 0; this.ibo = 0; }
@Override public void onDrawFrame(GL10 gl) { GLES10.glClearColor(1.0f, 0.0f, 0.0f, 1.0f); // Чистим экран красным цветом GLES10.glClear(GLES10.GL_COLOR_BUFFER_BIT); // Чистим цветовой буфер GLES11.glEnableClientState(GLES11.GL_VERTEX_ARRAY); GLES11.glBindBuffer(GLES11.GL_ARRAY_BUFFER, this.vbo); // Буфер вершин GLES11.glBindBuffer(GLES11.GL_ELEMENT_ARRAY_BUFFER, this.ibo); // Буфер индексов GLES11.glColor4f(0.0f, 0.0f, 1.0f, 0.9f); // Делаем синий цвет для прямоугольника GLES11.glVertexPointer(3, GLES11.GL_FLOAT, 0, 0); // Определяем данные буфера GLES11.glDrawElements(GLES11.GL_TRIANGLE_STRIP, 4, GLES11.GL_UNSIGNED_SHORT, 0); // Рендер 2-х треугольников GLES11.glBindBuffer(GLES11.GL_ARRAY_BUFFER, 0); GLES11.glBindBuffer(GLES11.GL_ELEMENT_ARRAY_BUFFER, 0); GLES11.glDisableClientState(GLES11.GL_VERTEX_ARRAY); }
@Override public void onSurfaceChanged(GL10 gl, int width, int height) { GLES10.glViewport(0, 0, width, height); }
@Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { float [] vertexes = { // Вершины прямоугольника -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.5f, 0.5f, 0.0f, -0.5f, 0.5f, 0.0f }; short [] indexes = { 1, 2, 0, 3 }; // Индексы int [] buffers = new int[2]; GLES11.glGenBuffers(buffers.length, buffers, 0); // Создаём буфер вершин и индексов this.vbo = buffers[0]; this.ibo = buffers[1]; ByteBuffer buffer = ByteBuffer.allocateDirect(4 * vertexes.length); // Выделяем данные под вершины buffer.order(ByteOrder.nativeOrder()); FloatBuffer vertexBuffer = buffer.asFloatBuffer(); vertexBuffer.put(vertexes); vertexBuffer.rewind(); buffer = ByteBuffer.allocateDirect(2 * indexes.length); // Выделяем данные под индексы buffer.order(ByteOrder.nativeOrder()); ShortBuffer indexBuffer = buffer.asShortBuffer(); indexBuffer.put(indexes); indexBuffer.rewind(); GLES11.glBindBuffer(GLES11.GL_ARRAY_BUFFER, this.vbo); // Буфер вершин GLES11.glBufferData(GLES11.GL_ARRAY_BUFFER, 4 * vertexes.length, vertexBuffer, GLES11.GL_STATIC_DRAW); // Заливаем данные в него GLES11.glBindBuffer(GLES11.GL_ELEMENT_ARRAY_BUFFER, this.ibo); // Буфер индексов GLES11.glBufferData(GLES11.GL_ELEMENT_ARRAY_BUFFER, 2 * indexes.length, indexBuffer, GLES11.GL_STATIC_DRAW); // Заливаем данные в него GLES11.glBindBuffer(GLES11.GL_ARRAY_BUFFER, 0); GLES11.glBindBuffer(GLES11.GL_ELEMENT_ARRAY_BUFFER, 0); vertexBuffer.clear(); // Данные больше не нужны indexBuffer.clear(); GLES10.glEnable(GLES10.GL_BLEND); // Ставим прозрачность GLES10.glBlendFunc(GLES10.GL_SRC_ALPHA, GLES10.GL_ONE_MINUS_SRC_ALPHA); }
}
|
Потестил, работает как надо. 2) Потестил опенжеле 2.0 манифест: | Код | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.test" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" /> <uses-feature android:glEsVersion="0x00020000" />
<application android:icon="@drawable/ic_launcher"> <activity android:name=".TestGLActivity" android:theme="@android:style/Theme.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
</manifest>
|
активити: | Код | package android.test;
import android.app.Activity; import android.opengl.GLSurfaceView; import android.os.Bundle; import android.view.Window; import android.view.WindowManager;
public class TestGLActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); GLSurfaceView surface = new GLSurfaceView(this); surface.setEGLContextClientVersion(2); // поддержка 2.0 surface.setRenderer(new MyRenderer(this)); this.setContentView(surface);
} }
|
Теперь рендерится только красный фон. А программа в логкат мне пуляется проклятьями: | Код | called unimplemented OpenGL ES API
|
Убираю строку surface.setEGLContextClientVersion(2); - работает как прежде. Решил проверить: | Код | String str = GLES20.glGetString(GLES20.GL_VERSION);
|
выдала: Тестирую на девайсе LG P500. Кто знает из-за чего такая проблема? Спасибо за внимание!
|