https://startandroid.ru/ru/uroki/vse-uroki-spiskom/398-urok-169-opengl-shejdery.html
столкнулся с проблемой в коде
final int[] compileStatus = new int[1];
glGetShaderiv(shaderId, GL_COMPILE_STATUS, compileStatus, 0);
у меня этот код на котлин выглядит как
val compileStatus = IntArray(1)
glGetShaderiv(shaderId, GL_COMPILE_STATUS, compileStatus, 0)
при выполнении получаю ошибку:
java.lang.IllegalArgumentException: length - offset < 1 < needed at android.opengl.GLES20.glGetProgramiv(Native Method)
погуглив наткнулся на
https://android.googlesource.com/platform/frameworks/base/+/master/core/jni/android_opengl_GLES20.cpp
где в методе glGetShaderiv это исключение выбрасывается при пустом массиве compileStatus
_remaining = _env->GetArrayLength(params_ref) - offset;
if (_remaining < 1) {
_exception = 1;
_exceptionType = "java/lang/IllegalArgumentException";
_exceptionMessage = "length - offset < 1 < needed";
goto exit;
}
но посмотрев байткод, то там создается такой же массив как и в уроке на StartAndroid
int[] compileStatus = new int[1];
GLES20.glGetShaderiv(shaderId, 35713, compileStatus, 0);
хотел спросить, может кто сталкивался с такой проблемой? или просто заметил в моем коде нелепую ошибку, которую я пропустил
заранее спасибо за совет
п.с в час startAndroid писал, там бот затер мое сообщение, по этому пишу тут
п.с.с взял код с урока для шейдера, появилась подобная проблема(в моем коде на кт) только в другом месте и решилась с помощью intArrayOf(0), но моей изначальной проблеме - нет
оказалось что андроид просто решал не пересобирать билд, и когда появилось 2 файла - сработало
Я свой старый код работы с шейдерами не стал переписывать с Java на Котлин. Работает - и ладно.
Попробуйте в glGetShaderiv передавать IntBuffer.wrap(compileStatus) вместо просто compileStatus.
та у меня студия проект не хотела пересобирать
Поставьте её в угол!
та стоило бы как я понял, у вас есть какой то опыт в работе с openGl, может посоветуете литературу или нормальные примеры(помимо startAndroid)
Все примеры искал сам в Гугле и сам разбирался со всеми косяками и глюками. Шейдеры - это жоппа, нужно все мозги перевернуть несколько раз, чтобы начать что-то понимать 😁
понял, видимо и меня такое ждет, спасибо
Обсуждают сегодня