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

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

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

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

10.02.2015, 17:20. Просмотров 270. Ответов 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 некорректно загружаются данные в шейдер
Посмотрите здесь:

LiveWallpaper на NDK без JAVA - Программирование Android
Возможно ли написать живые обои не используя яву? Только на С++ с использованием NDK? Как это сделать?

Нужен ли NDK начинающему разработчику? - Программирование Android
Добрый день! Интенсивно занимаюсь уже четвёртый месяц изучением Андроид, переделал сотни полторы интернет-уроков, купил много литературы,...

Как правильно установить и использовать NDK? - Программирование Android
Подскажите пожалуйста, как правильно установить и использовать NDK. Инструкцию Google понять не могу, так как проект не запускается из-за...

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

Использование boost::asio через NDK - Программирование Android
Всем привет. Можно ли использовать asio для реализации сетевых взаимодействий в android? Или нужно использовать только то что предоставляет...

Delphi XE8, какой указать путь к ndk? - Программирование Android
Имеется Delphi xe8 и для создания мобильных приложений нужно скачать Sdk,ndk,Java. Sk и Java пути я указал в tools но у меня проблема с ndk...

В каких случаях, по вашему, C++ (NDK) лучше, чем Java (SDK)? - Программирование Android
Можно ли готовое приложение Android написать в одном лишь NDK?

Не всегда загружаются картинки с сайта - Программирование Android
А вы не знаете почему некоторые картинки из интернета нельзя загрузить в приложение. Я использовал разные методы в то числе и библиотеку...

Некорректно работает таймер - Программирование Android
Здравствуйте! Написал для себя мелкое приложение в котором есть таймер, кнопка которая его останавливает и запускает, кнопка которая...

Некорректно выполняется запрос к SQLite - Программирование Android
Здравствуйте! Необходимо сделать выборку данных из БД по двум условиям + еще максимум по третьему столбцу: public List<Table.Lesson>...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 464
10.02.2015, 19:17     NDK некорректно загружаются данные в шейдер #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  [ТС]     NDK некорректно загружаются данные в шейдер #3
Цитата Сообщение от EVP Посмотреть сообщение
4-ая строчка:
Так а что не так-то? Я с C++ на Вы.

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

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