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

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

Войти
Регистрация
Восстановить пароль
 
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
#1

NDK некорректно загружаются данные в шейдер - Программирование Android

10.02.2015, 17:20. Просмотров 272. Ответов 4
Метки нет (Все метки)

Здравствуйте!
Имеется java-функция, которая прекрасно работает
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void tileRender(EasyTexture texture, int programHandler) {
        int textureStartHandler = GLES20.glGetUniformLocation(programHandler, "uv0");
        GLES20.glUniform2fv(textureStartHandler, 1,
                new float[] {texture.getLeftBound(), texture.getTopBound()}, 0);
 
        int textureEndHandler = GLES20.glGetUniformLocation(programHandler, "uv1");
        GLES20.glUniform2fv(textureEndHandler, 1,
                new float[] {texture.getRightBound(), texture.getBottomBound()}, 0);
 
        int tileCountHandler = GLES20.glGetUniformLocation(programHandler, "vTileCount");
        if(tileCountHandler != -1)
            GLES20.glUniform2fv(tileCountHandler, 1,
                    new float[]{texture.getScaleX(), texture.getScaleY()}, 0);
    }


Мне нужен ее C++ аналог, написал так
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
JNIEXPORT void JNICALL Java_com_contedevel_lastlegend_core_render_EasyRenderer_tileRender
  (JNIEnv *, jclass, jfloat left, jfloat top, jfloat right, jfloat bottom, jfloat scaleX, jfloat scaleY, jint hProgram) {
    int hTextureStart = glGetUniformLocation(hProgram, "uv0");
    float uv0[2] = {(float)left, (float)right};
    glUniform2fv(hTextureStart, 1, (GLfloat *)uv0);
 
    float uv1[2] = {(float)right, (float)bottom};
    int hTextureEnd = glGetUniformLocation(hProgram, "uv1");
    glUniform2fv(hTextureEnd, 1, (GLfloat *)uv1);
 
    int hTileCount = glGetUniformLocation(hProgram, "vTileCount");
    
    if(hTileCount == -1)
        return;
 
    float tileCount[2] = {(float)scaleX, (float)scaleY};
    glUniform2fv(hTileCount, 1, (GLfloat *)tileCount);
}


Шейдер такой
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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));
 
     uv = mod(uv, delta);
     vec2 uvInverse = delta - uv;
     uv = mix(uv, uvInverse, ceil(tile / vec2(2, 2))) + uv0;
 
     gl_FragColor = texture2D(sTexture, uv);
}


Что не так с C++ функцией? Такое чувство, что glUniform2fv берёт только первое значение из массива...

Добавлено через 11 минут
P.S. Из java в C++-функцию данные передаются корректно, проверял, т.е. проблема именно в передаче данных в OpenGL
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2015, 17:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос NDK некорректно загружаются данные в шейдер (Программирование Android):

AS и Ndk - Программирование Android
Здравствуйте На официальном сайте в разделе ndk почему- то описывается eclipse Предполагается что с AS по аналогии и типа сами...

NDK и SDK - Программирование Android
есть класс на яве который использует массив, который с течением времени увеличивается ( то есть массив динамический) в массиве находятся...

SDK or NDK - Программирование Android
я начинающий разработчик, на данный момент не много знаю с++. 1) Что лучше изучать SDK и яву или же NDK, в будущем хочу попробовать себя...

Android NDK - Программирование Android
Здравствуйте. Хотелось бы написать пару программок на андроид, но джаву вообще не знаю. Нагуглил, что можно писать на С++, но толком как...

NDK C vs C++ и примеры - Программирование Android
Гуру NDK! Посоветуйте! В очередной раз взялся за NDK и вдруг получилось... Успешно запустил все примеры что были под руками... ...

Android NDK - Программирование Android
Здравствуйте, форумчане. Появилось пара вопросов относительно Android NDK... С NDK можно программировать только вставками нативного...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
EVP
322 / 244 / 43
Регистрация: 14.12.2010
Сообщений: 465
10.02.2015, 19:17 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от contedevel Посмотреть сообщение
Что не так с C++ функцией? Такое чувство, что glUniform2fv берёт только первое значение из массива...
4-ая строчка:
C++
1
float uv0[2] = {(float)left, (float)top};
Если пишешь без отладки, так и будет.
Лучше приложение собрать под Win32 и портировать готовое в Android.
Без отладки не получится написать что-то сложное.
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
10.02.2015, 19:22  [ТС] #3
Цитата Сообщение от EVP Посмотреть сообщение
4-ая строчка:
Так а что не так-то? Я с C++ на Вы.

Добавлено через 3 минуты
Цитата Сообщение от EVP Посмотреть сообщение
Лучше приложение собрать под Win32 и портировать готовое в Android.
Да, так проблем не было, пока первая ошибка, причем мне не понятная... А под Linux собирать, я и там так же напишу)
EVP
322 / 244 / 43
Регистрация: 14.12.2010
Сообщений: 465
10.02.2015, 19:29 #4
Цитата Сообщение от contedevel Посмотреть сообщение
Так а что не так-то? Я с C++ на Вы.
Я привёл исправленную строчку, а у тебя неправильная в C++ варианте -- второй параметр смотри.
Невнимательность - очень страшный и коварный враг, который подкрадывается незаметно...
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 596
10.02.2015, 19:31  [ТС] #5
Цитата Сообщение от EVP Посмотреть сообщение
Я привёл исправленную строчку, а у тебя неправильная в C++ варианте -- второй параметр смотри.
Невнимательность - очень страшный и коварный враг, который подкрадывается незаметно...
Вай, даже не заметил Спасибо Вам за помощь!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2015, 19:31
Привет! Вот еще темы с ответами:

Использование NDK - Программирование Android
Пытаюсь освоить NDK... И как всегда не хватает ЗАДАНИЙ! Не могу придумать где можно использовать (для новичка в с++)... Писать еще один...

Подключить NDK - Программирование Android
(моя 101я попытка начать работать с NDK) Чуть сдвинулся, но не хватает теории... 1) Скачал последний NDK (android-ndk-r9c) 2)...

Где скачать NDK? - Программирование Android
Подскажите пожалуйста где скачать NDK, ну что б более менее безопасно? Ссылка на офф сайте developer.android.com не работает, на трекере...

Защита от взлома с ndk - Программирование Android
код на плюсах тоже декомпилируется в читаемый код?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.02.2015, 19:31
Ответ Создать тему
Опции темы

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