С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
1

OpenGL ES 2.0 Шейдер работает только на эмуляторе

01.02.2015, 16:33. Просмотров 607. Ответов 4
Метки нет (Все метки)

Здравствуйте!
Возникла проблема с шейдером "тайлинг с отражением". На эмуляторе GENYMOTION различных версий Android все отлично... На реальном устройстве (Samsung Galaxy Win GT-I8552) выдает ошибку.
Вот код фрагментного шейдера:
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
precision mediump float;
 
uniform sampler2D sTexture;
uniform vec2 uv0;
uniform vec2 uv1;
uniform vec2 vTileCount;
 
varying vec2 vTextureCoordinates;
 
void main(void) {
     vec2 delta = uv1 - uv0;
     vec2 uv = delta * vTextureCoordinates * vTileCount;
     vec2 tile = mod(floor(uv / delta), vec2(2, 2));
 
     vec2 uvInverse = delta - mod(uv, delta);
     uv = mix(uv, uvInverse, ceil(tile / 2)) + uv0;
 
     gl_FragColor = texture2D(sTexture, uv);
}


Лог:
Кликните здесь для просмотра всего текста
02-01 15:33:38.320 11979-11979/com.contedevel.lastlegend D/dalvikvm﹕ Late-enabling CheckJNI
02-01 15:33:38.720 11979-11979/com.contedevel.lastlegend D/ActivityThread﹕ setTargetHeapUtilization:0.25
02-01 15:33:38.720 11979-11979/com.contedevel.lastlegend D/ActivityThread﹕ setTargetHeapIdealFree:8388608
02-01 15:33:38.720 11979-11979/com.contedevel.lastlegend D/ActivityThread﹕ setTargetHeapConcurrentStart:2097152
02-01 15:33:39.300 11979-11979/com.contedevel.lastlegend D/libEGL﹕ loaded /system/lib/egl/libEGL_adreno200.so
02-01 15:33:39.340 11979-11979/com.contedevel.lastlegend D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_adreno200.so
02-01 15:33:39.340 11979-11979/com.contedevel.lastlegend D/libEGL﹕ loaded /system/lib/egl/libGLESv2_adreno200.so
02-01 15:33:39.350 11979-11979/com.contedevel.lastlegend I/Adreno200-EGL﹕ <qeglDrvAPI_eglInitialize:299>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.119_msm8625_JB_REL_2.0.3_CL3357771_release_AU (CL3357771)
Build Date: 04/04/13 Thu
Local Branch:
Remote Branch: m/jb_rel_2.0.3
Local Patches: NONE
Reconstruct Branch: AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.119 + NOTHING
02-01 15:33:39.500 11979-11979/com.contedevel.lastlegend D/OpenGLRenderer﹕ Enabling debug mode 0
02-01 15:33:45.840 11979-11979/com.contedevel.lastlegend W/IInputConnectionWrapper﹕ getSelectedText on inactive InputConnection
02-01 15:33:45.840 11979-11979/com.contedevel.lastlegend W/IInputConnectionWrapper﹕ setComposingText on inactive InputConnection
02-01 15:38:17.940 11979-11979/com.contedevel.lastlegend W/SurfaceView﹕ CHECK surface infomation creating=false formatChanged=false sizeChanged=false visible=false visibleChanged=true surfaceChanged=true realSizeChanged=false redrawNeeded=false left=false top=false
02-01 15:38:18.420 11979-11979/com.contedevel.lastlegend E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
02-01 15:38:18.430 11979-11979/com.contedevel.lastlegend E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
02-01 15:38:38.440 13217-13217/com.contedevel.lastlegend D/ActivityThread﹕ setTargetHeapUtilization:0.25
02-01 15:38:38.440 13217-13217/com.contedevel.lastlegend D/ActivityThread﹕ setTargetHeapIdealFree:8388608
02-01 15:38:38.440 13217-13217/com.contedevel.lastlegend D/ActivityThread﹕ setTargetHeapConcurrentStart:2097152
02-01 15:38:38.750 13217-13217/com.contedevel.lastlegend D/libEGL﹕ loaded /system/lib/egl/libEGL_adreno200.so
02-01 15:38:38.770 13217-13217/com.contedevel.lastlegend D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_adreno200.so
02-01 15:38:38.780 13217-13217/com.contedevel.lastlegend D/libEGL﹕ loaded /system/lib/egl/libGLESv2_adreno200.so
02-01 15:38:38.820 13217-13217/com.contedevel.lastlegend I/Adreno200-EGL﹕ <qeglDrvAPI_eglInitialize:299>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.119_msm8625_JB_REL_2.0.3_CL3357771_release_AU (CL3357771)
Build Date: 04/04/13 Thu
Local Branch:
Remote Branch: m/jb_rel_2.0.3
Local Patches: NONE
Reconstruct Branch: AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.119 + NOTHING
02-01 15:38:38.960 13217-13217/com.contedevel.lastlegend D/OpenGLRenderer﹕ Enabling debug mode 0
02-01 15:38:39.130 13217-13217/com.contedevel.lastlegend W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection
02-01 15:38:40.670 13217-13232/com.contedevel.lastlegend W/Adreno200-ES20﹕ <qgl2DrvAPI_glUseProgram:1407>: GL_INVALID_OPERATION


Я плохо разбираюсь в OpenGL, но кажется, что не поддерживается какая-то из функций шейдера. Потому что этот фрагментный шейдер работает отлично и там, и там:
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
precision mediump float;
 
uniform sampler2D sTexture;
uniform vec2 uv0;
uniform vec2 uv1;
uniform vec2 vTileCount;
 
varying vec2 vTextureCoordinates;
 
void main(void) {
     vec2 delta = uv1 - uv0;
     vec2 uv = delta * vTextureCoordinates * vTileCount;
     uv = mod(uv, delta);
     uv = uv + uv0;
     gl_FragColor = texture2D(sTexture, uv);
}


В чем может быть проблема?

Добавлено через 51 минуту
Ошибка конкретно в функции ceil(), без нее работает, но неправильно...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2015, 16:33
Ответы с готовыми решениями:

Приложение в телефоне работает корректно только в эмуляторе
мобильное приложение .apk который я скинул на свой телефон захожу проверяю...

RSS-читалка - работает на эмуляторе, не работает на реальном девайсе
День добрый. Есть несложная читалка на основе вот этой вот, для парсинга...

Layout-large не работает в эмуляторе
Использую стандартный эмулятор который шел в Android Studio, создал доп папки...

На эмуляторе работает, а в смартфоне нет
Подскажите, в чём ошибка? В android sdk работает, а в смарте нет. А должен...

Приложение работает на эмуляторе но вылетает на телефоне
Происходит такая ошибка: При тестировании приложении на эмуляторе, все...

4
EVP
508 / 270 / 60
Регистрация: 14.12.2010
Сообщений: 545
01.02.2015, 19:14 2
Вместо 16-ой строчки:
C
1
uv = mix(uv, uvInverse, ceil(tile / vec2(2,2))) + uv0;
Цитата Сообщение от contedevel Посмотреть сообщение
выдает ошибку.
Причину поломки шейдера можно узнать:
Java
1
2
if (!shaderCompiled)
    Log.e("Shader", GLES20.glGetShaderInfoLog(shader));
1
contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
01.02.2015, 19:53  [ТС] 3
Цитата Сообщение от EVP Посмотреть сообщение
Причину поломки шейдера можно узнать:
Спасибо, сейчас посмотрю!

Добавлено через 21 минуту
Цитата Сообщение от EVP Посмотреть сообщение
Вместо 16-ой строчки:
Пробовал так делать ошибка уходила, но текстура отображалась непонятно как...
Оказалось, что это корректная запись:
C
1
2
uv = mod(uv, delta);
     vec2 uvInverse = delta - uv;
А эта нет:
C
1
vec2 uvInverse = delta - mod(uv, delta);
Не заметил, что далее используется результат, записанный в uv... Хотел код сократить немного и сам же себе ошибку сделал.

А эта запись tile/2 реально на Adreno ошибку кидает.
0
EVP
508 / 270 / 60
Регистрация: 14.12.2010
Сообщений: 545
01.02.2015, 20:02 4
Цитата Сообщение от contedevel Посмотреть сообщение
А эта запись tile/2 реально на Adreno ошибку кидает.
Компиляторы OpenGL ES 2.0 - упрощённые версии настольных, поэтому не все операторы применимы.
Эмулятор использует компилятор десктопный для компиляции, поэтому на нём не было ошибки.
А компилятор Opengl ES более простой и не понимает этой инструкции.
2
contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 606
01.02.2015, 20:03  [ТС] 5
Цитата Сообщение от EVP Посмотреть сообщение
Компиляторы OpenGL ES 2.0 - упрощённые версии настольных, поэтому не все операторы применимы.
Эмулятор использует компилятор десктопный для компиляции, поэтому на нём не было ошибки.
А компилятор Opengl ES более простой и не понимает этой инструкции.
Спасибо, буду знать!
Я на видеокарту подумал)
0
01.02.2015, 20:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2015, 20:03

Приложение не запускается на телефоне, а на эмуляторе работает
скомпилированный файл не запускается на телефоне , на эмуляторе работает...

Приложение дает ошибку на устройстве, в в эмуляторе всё работает
Всем добрый день, При запуске приложения на устройстве, оно выдает ошибку...

Как подключить шейдер glsl в opengl?
Подскажите пожалуйста, как именно нужно подключить шейдер? Мне нужно...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru