Форум программистов, компьютерный форум CyberForum.ru

OpenGL ES 2.0. Сильно проседает ФПС - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Questoid SQLite Manager http://www.cyberforum.ru/android-dev/thread1368594.html
Подскажите пожалуйста как пользоваться плагином для Eclipse - Questoid SQLite Manager, файл базы выделяю а значек плагина не активный? в чем проблема может быть?
Android Android Studio и AMD Решил научиться создавать андройд приложения,но так как у меня амд бульдозер,не работает эмулятор.На Android Studio пишет НАХ kernel module is not installed.Неужели только проц менять? http://www.cyberforum.ru/android-dev/thread1368588.html
Видел у друга чехол, который при открывании разблокировывает смартфон, как это сделать? Android
Я имею в виду как такой чехол сделать своими руками? Видел что от чехла идут пару проводков к гнезду зарядника, разве возможно управлять телефоном через этот разъем?
Opengl es: вывод 3D моделей Android
Всем привет!!!! Пытаюсь разобраться как на экран выводить 3D модели, но почему то не получается. Насколько я понял, единственное отличие в выводе куба допустим от 3D модели, это то что нам необходимо взять из 3d модели и записать в массив вершины, нормали, текстуры ? Вот, следуя этой логики я скачал пример из урока, там где выводят квадраты крутящиеся и точку света крутящуюся вокруг, метод...
Android Остановить мелодию в MediaPlayer http://www.cyberforum.ru/android-dev/thread1368468.html
Всем привет ,у меня такой вопрос как остановит MediaPlayer? у меня есть класс и в нем один медиаплеер для двух классов import android.content.Context; import android.media.MediaPlayer; import android.widget.ImageView; public class MediaPl { MediaPlayer mediaPlayer; public ImageView image ; Context context; public MediaPl(Context c) {
Xamarin Диплом на xamarin android Здравствуйте. Хочу написать программу кинотеатр с бронированием мест. Клиент- серверное приложение. Подскажите с чего начать. Какие уроки есть, книги и т.д.. Спасибо. подробнее

Показать сообщение отдельно
contedevel
 Аватар для contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 589

OpenGL ES 2.0. Сильно проседает ФПС - Android

05.02.2015, 01:27. Просмотров 482. Ответов 2
Метки (Все метки)

Здравствуйте!
Имеется такой отрисовщик:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
package com.contedevel.lastlegend.core.render;
 
import android.content.Context;
import android.graphics.Bitmap;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.opengl.GLUtils;
import android.opengl.Matrix;
import android.util.Log;
 
import com.contedevel.lastlegend.core.objects.EasyCamera;
import com.contedevel.lastlegend.core.objects.EasySprite;
import com.contedevel.lastlegend.core.objects.textures.EasyAtlas;
import com.contedevel.lastlegend.core.objects.textures.EasyTexture;
import com.contedevel.lastlegend.core.utils.EasyColor;
import com.contedevel.lastlegend.core.utils.EasyFPS;
import com.contedevel.lastlegend.core.utils.EasyMatrix;
import com.contedevel.lastlegend.core.utils.EasyVector2;
 
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;
 
public class EasyRenderer implements GLSurfaceView.Renderer {
    private static final String TAG = EasyRenderer.class.getSimpleName();
    private Context context;
    private EasyColor color;
    private EasyCamera camera;
    private EasySprite sprite;
 
    //Matrix
    private float[] mtrxProjection = new float[16];
    private float[] mtrxView = new float[16];
    private float[] mtrxViewWork = new float[16];
    private float[] mtrxResult = new float[16];
 
    //Shader program handles
    public static int sp_SolidColor;
 
    // Geometric variables
    public static final short INDICES[] = new short[] {0, 1, 2, 0, 2, 3};
 
    public static EasyCache.EasyCacheItem cacheItem;
    public ShortBuffer drawListBuffer;
 
    public EasyRenderer(Context context) {
        this.context = context;
        color = new EasyColor(EasyColor.COLOR_WHITE);
    }
 
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        EasyAtlas atlas = new EasyAtlas("img/img.png");
        EasyTexture texture = new EasyTexture(atlas)
                .setColor(new EasyColor(0xb0ff00ff))
                .setMode(EasyTexture.MODE_COLOR);
        sprite = new EasySprite(1f, 1f, 200f, 200f, texture);
 
        setup();
        setupImage();
        GLES20.glClearColor(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha());
        GLES20.glEnable(GLES20.GL_BLEND);
        GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
        initShaders();
    }
 
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        camera = new EasyCamera(0f, 0f, width, height);
        camera.setZoom(0.5f);
        setupCamera(camera);
        GLES20.glUseProgram(sp_SolidColor);
        EasyMatrix.copy(mtrxView, mtrxViewWork);
        EasyMatrix.translateXY(mtrxViewWork, 1, 1);
        EasyMatrix.rotateXY(mtrxViewWork, sprite.getAngle());
        Matrix.multiplyMM(mtrxResult, 0, mtrxProjection, 0, mtrxViewWork, 0);
    }
 
    @Override
    public void onDrawFrame(GL10 gl) {
        for(int i = 0; i < 50; ++i) {
            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
            int positionHandler = -1;
            int textureCoordinatesHandler = -1;
            EasyTexture texture = sprite.getTexture();
 
            positionHandler = GLES20.glGetAttribLocation(sp_SolidColor, "vPosition");
            GLES20.glEnableVertexAttribArray(positionHandler);
            GLES20.glVertexAttribPointer(positionHandler, 3, GLES20.GL_FLOAT, false, 0, cacheItem.getVertexBuffer());
            int mtrxHandle = GLES20.glGetUniformLocation(sp_SolidColor, "uMVPMatrix");
            GLES20.glUniformMatrix4fv(mtrxHandle, 1, false, mtrxResult, 0);
            int colorHandle = GLES20.glGetUniformLocation(sp_SolidColor, "vColor");
            EasyColor color = texture.getColor();
            GLES20.glUniform4fv(colorHandle, 1, color.getColor(), 0);
 
            GLES20.glDrawElements(GLES20.GL_TRIANGLES, INDICES.length,
                    GLES20.GL_UNSIGNED_SHORT, drawListBuffer);
 
            if (positionHandler != -1)
                GLES20.glDisableVertexAttribArray(positionHandler);
        }
        EasyFPS.log();
    }
 
    public void setup() {
        cacheItem = EasyCache.buildCacheItem(sprite);
 
        ByteBuffer dlb = ByteBuffer.allocateDirect(INDICES.length * 2);
        dlb.order(ByteOrder.nativeOrder());
        drawListBuffer = dlb.asShortBuffer();
        drawListBuffer.put(INDICES);
        drawListBuffer.position(0);
 
    }
 
    public void setupImage() {
        EasyTexture texture = sprite.getTexture();
 
        // Generate Textures, if more needed, alter these numbers.
        int[] textureNames = new int[1];
        GLES20.glGenTextures(1, textureNames, 0);
        texture.getAtlas().setTextureId(textureNames[0]);
 
        // Temporary create a bitmap
        Bitmap bmp = EasyTextureHelper.getFromAssets(context,
                texture.getAtlas().getFileName());
 
        // Bind texture to texture name
        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureNames[0]);
 
        // Set filtering
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
                GLES20.GL_LINEAR);
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,
                GLES20.GL_LINEAR);
 
        // Load the bitmap into the bound texture.
        GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0);
 
        // We are done using the bitmap so we should recycle it.
        bmp.recycle();
 
    }
 
    private void setupCamera(EasyCamera camera) {
        GLES20.glViewport(0, 0, (int)camera.getWidth(), (int)camera.getHeight());
        float scaleX = camera.getWidth()*camera.getScaleX()/2;
        float scaleY = camera.getHeight()*camera.getScaleY()/2;
        Matrix.orthoM(mtrxProjection, 0, -scaleX, scaleX, -scaleY, scaleY, 0, 50);
        EasyVector2 angle = camera.getVectorAngle();
        EasyMatrix.setLookAt(mtrxView,
                camera.getX(), camera.getY(),
                camera.getX(), camera.getY(),
                angle.x, angle.y);
    }
 
    private void initShaders() {
        sp_SolidColor = EasyShader.compileProgramGL20(
                EasyShader.getFromAssets(context, EasyShader.COLOR_VERTEX_SHADER),
                EasyShader.getFromAssets(context, EasyShader.COLOR_FRAGMENT_SHADER));
    }
}


ФПС выдает всего 10-13, на довольно производительных устройствах (Samsung Galaxy Win).
Из-за чего может быть такая задержка?
P.S. 50 итераций делаю просто, чтобы имитировать отрисовку 50 объектов. CacheItem возвращает готовый буффер (не строит его заново), EasyColor getColor тоже возвращает заранее созданный массив цвета.

Shader самый обычный:
Кликните здесь для просмотра всего текста
uniform mat4 uMVPMatrix;
attribute vec4 vPosition;
void main() {
gl_Position = uMVPMatrix * vPosition;
}


Кликните здесь для просмотра всего текста
precision mediump float;
uniform vec4 vColor;
void main() {
gl_FragColor = vColor;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru