Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OpenGL 2.0, тестирование 
:(
    Опции темы
CPlusPlusFAN
Дата 23.3.2012, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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);


выдала:
Код

OpenGL ES 2.0 1309647


Тестирую на девайсе LG P500.

Кто знает из-за чего такая проблема?

Спасибо за внимание!
PM MAIL ICQ Jabber   Вверх
MoonKnight
Дата 26.3.2012, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.3.2012

Репутация: нет
Всего: нет



спасибо, все понятно
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0373 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.