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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.80
Nikkilla
2 / 2 / 0
Регистрация: 24.02.2013
Сообщений: 62
#1

Белый экран на телефоне - Android

13.05.2013, 15:58. Просмотров 5677. Ответов 8
Метки нет (Все метки)

И так, написал игрушку под Android. На эмуляторе в Eclipse все прекрасно работает. Скинул себе на телефон (Samsung Galaxy Spica I5700 Black с Android 2.1) и при запуске тупо белый экран. Скинул другу (Samsung GALAXY DUOS c Android 2.3).

Тот же результат. В эмуляторе стоит Android 2.1. В игре использую OpenGL (GLSurfaceView)

Подскажите, в чем может быть проблема.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
13.05.2013, 17:43     Белый экран на телефоне #2
разные телефоны поддерживают разные конфиги OpenGL, в этом может быть проблема.
к тому же до Android 2.2 идет OpenGL, а начиная с 2.2 OpenGL 2 и они не совместимы.
Nikkilla
2 / 2 / 0
Регистрация: 24.02.2013
Сообщений: 62
13.05.2013, 18:11  [ТС]     Белый экран на телефоне #3
А можно по подробнее про конфиги, а так же про возможные пути решения проблемы с белым экраном.
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
13.05.2013, 18:28     Белый экран на телефоне #4
читайте гайды:
http://www.learnopengles.com/android...tting-started/
http://ajc.su/grafika/opengl-es-2-0-...achinayushhix/
http://andmonahov.blogspot.com/
http://habrahabr.ru/users/ginkage/topics/
http://www.goodroid.ru/articles/prog...es-for-android

смотрите семплы SDK.

Добавлено через 9 минут
OpenGL недостаточно прост чтобы сходу понять из-за чего белый экран, причин может быть тысяча(вплоть до аппаратной несовместимости), как и вариантов решения.
Nikkilla
2 / 2 / 0
Регистрация: 24.02.2013
Сообщений: 62
14.05.2013, 18:28  [ТС]     Белый экран на телефоне #5
Спасибо за ссылки! За эти 2 дня провел пару тестов и выяснил, что у меня не рисуются полигоны, а белое, потому, что это цвет очистки экрана.

Вот сделал тестовый проект. Цвет очистки поставил зеленым. При клике по экрану рисуется красная точка в этом месте. Проблема в том, что на эмуляторе все нормально. а вот на телефоне фот зеленый, но точки не рисуются.

Вот код проекта. Тестил на андроид 2.1

MainActivity.java - главный класс проекта
Кликните здесь для просмотра всего текста

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
package ua.nikkilla.nje4a;
 
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
 
public class MainActivity extends Activity {
    
    public GLSurfaceView glSurfaceView; 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        glSurfaceView = new RenderGlobal(this);
        setContentView(glSurfaceView);
    }
 
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}


RenderGlobal.java - главный класс рендера
Кликните здесь для просмотра всего текста

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
package ua.nikkilla.nje4a;
 
import java.util.ArrayList;
 
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
 
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.view.MotionEvent;
 
public class RenderGlobal extends GLSurfaceView implements Renderer 
{
    public ArrayList<EntityPoint> pointsList;
    public float screenSizeX, screenSizeY;
    
    public RenderGlobal(Context context) 
    {
        super(context);     
        setRenderer(this); 
        pointsList = new ArrayList<EntityPoint>();
        screenSizeX = 0f;
        screenSizeY = 0f;
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent e) 
    {
       
        if (MotionEvent.ACTION_DOWN == e.getAction())
        {
            pointsList.add(new EntityPoint(getTouchX(e),getTouchY(e)));
        }
        return true;
    }
 
    @Override
    public void onDrawFrame(GL10 gl) 
    {
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT);    
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();        
        gl.glTranslatef(0f, 0f, -3f);
        
        for (int i = 0; i < pointsList.size(); i++)
        {
            pointsList.get(i).render(gl);
        }
    }
 
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) 
    {
        gl.glViewport(0, 0, width, height);
        screenSizeX = width;
        screenSizeY = height;
    }
 
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) 
    {
        gl.glClearColor(0f, 0.5f, 0f, 1f);  
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    }
    
    public float getTouchX(MotionEvent e)
    {
        return (e.getX()/(float)screenSizeX)*2f-1f;
    }
    
    public float getTouchY(MotionEvent e)
    {
        return -((e.getY()/(float)screenSizeY)*2f-1f);
    }
}


EntityPoint - класс отрисовывающий точку.
Кликните здесь для просмотра всего текста

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
package ua.nikkilla.nje4a;
 
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
 
import javax.microedition.khronos.opengles.GL10;
 
public class EntityPoint 
{
    public FloatBuffer pointBuffer;
    
    public EntityPoint(float x, float y)
    {
          ByteBuffer bb = ByteBuffer.allocateDirect(8);
          bb.order(ByteOrder.nativeOrder());
          pointBuffer = bb.asFloatBuffer();
          pointBuffer.put(x);
          pointBuffer.put(y);
          pointBuffer.position(0);
    }
    
    public void render(GL10 gl)
    {   
        gl.glColor4f(1f, 0f, 0f, 1f);
        gl.glVertexPointer(2, GL10.GL_FLOAT, 0, pointBuffer);
        gl.glPointSize(4f);
        gl.glDrawArrays(GL10.GL_POINTS, 0, 1);
    }
}
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.05.2013, 18:44     Белый экран на телефоне #6
у меня тоже семплы не работали пока не взял из SDK, сильно не углублялся в эту тему, поэтому могу только посоветовать смотреть семплы из SDK.
Nikkilla
2 / 2 / 0
Регистрация: 24.02.2013
Сообщений: 62
14.05.2013, 18:47  [ТС]     Белый экран на телефоне #7
А какая может быть причина этого, и какие именно нужно взять? (Если можно, имена файлов или имя папки)
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
14.05.2013, 18:52     Белый экран на телефоне #8
Цитата Сообщение от Nikkilla Посмотреть сообщение
А какая может быть причина этого
как уже говорил причин может быть много, OpenGL зависит от хардварной части а не только от API андроида, так что я бы не доверял эмулятору.
в семплах SDK целый раздел в графике есть для OpenGL.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2013, 20:46     Белый экран на телефоне
Еще ссылки по теме:

Android Неисполняется код на телефоне (эмуляторе)
Вместо google карты белый экран Android
Android Просмотреть БД в телефоне
Android Starting: Intent { act=android.intent.action.MAIN. и пустой белый экран
Запустить Код на телефоне Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nikkilla
2 / 2 / 0
Регистрация: 24.02.2013
Сообщений: 62
14.05.2013, 20:46  [ТС]     Белый экран на телефоне #9
Спасибо, это семпл (GLSurfaceViewActivity.java) помог!
Yandex
Объявления
14.05.2013, 20:46     Белый экран на телефоне
Ответ Создать тему
Опции темы

Текущее время: 18:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru