Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
#1

Система зависает в glDrawElements - как найти причину? - OpenGL

14.12.2016, 14:57. Просмотров 322. Ответов 12
Метки нет (Все метки)

Здравствуйте

После отрисовки некоторого кол-ва кадров (от 2 до 12) ОС наглухо вешается. Приходится давить кнопку "питание" и перегружать комп. Отключаю glDrawElements - все норм, вероятно виснет там внутри. Хотелось бы получить какую-то "зацепку", наугад отключать то/се в большом коде может оказаться очень долгим. Что посоветуете?

С уважением
Игорь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2016, 14:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Система зависает в glDrawElements - как найти причину? (OpenGL):

glDrawElements
Есть массив точек и треугольников, которые содержат указатели на индексы точек ...

Индексы в glDrawElements
Всем привет. Пытаюсь нарисовать пирамиду в OpenGL используя буфферы, но не могу...

Индексы и glDrawElements
Всем доброго времени суток! Мне нужно передать в вершинный шейдер координаты...

Gldrawelements и массивы
Добрый вечер. может кто объяснить??? рисую вершины с помощью массивов. когда...

GlDrawElements из vbo
Заранее sorry что задаю подобные тупые вопросы, но всёже рискну. Может я просто...

Count в glDrawElements
Дня 4 назад начал изучать opengl, расскажите пожалуйста что означает второй...

12
vxg
Модератор
3231 / 2035 / 319
Регистрация: 13.01.2012
Сообщений: 7,887
14.12.2016, 15:12 #2
Igor3D, запустить под отладкой и попробовать средствами среды поймать AV - может в glDrawElements уходит некорректный адрес и/или размер в результате чего программа несется по кочкам там где их нет
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
14.12.2016, 15:57  [ТС] #3
Цитата Сообщение от vxg Посмотреть сообщение
попробовать средствами среды поймать AV
AV = "Access Violation"? В том-то и беда что его нет - ни в IDE ни под системным отладчиком. Виснет - и все. Искал логи в системе - тоже ничего. Вывожу wireframe - нормально (там используется простой шейдер). Меняю сцену - тоже легко добиться чтобы работало. Т.е. реагирует почти на все - но где причина хз
0
snake32
1641 / 1095 / 191
Регистрация: 26.02.2009
Сообщений: 4,060
Записей в блоге: 5
14.12.2016, 16:07 #4
Igor3D, а что менялось? Драйвера? Шейдеры?

Добавлено через 2 минуты
И нет ли ошибок OpenGL перед glDrawElem?
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
14.12.2016, 16:12  [ТС] #5
Цитата Сообщение от snake32 Посмотреть сообщение
Igor3D, а что менялось? Драйвера? Шейдеры?
Драйвера нет, остальное - все менялось (большой рефакторинг). Поэтому неясно то ли я этот баг вчера внес, то ли он меня уже неск месяцев поджидал

Цитата Сообщение от snake32 Посмотреть сообщение
И нет ли ошибок OpenGL перед glDrawElem?
Нет. С выкл VBO тоже виснет. Стабильности (типа виснет на каком-то конкретном объекте) нет, т.е виснет на чем угодно
0
snake32
1641 / 1095 / 191
Регистрация: 26.02.2009
Сообщений: 4,060
Записей в блоге: 5
14.12.2016, 18:00 #6
Цитата Сообщение от Igor3D Посмотреть сообщение
Вывожу wireframe - нормально (там используется простой шейдер).
Я бы с шейдера начал.
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
15.12.2016, 12:25  [ТС] #7
Цитата Сообщение от snake32 Посмотреть сообщение
Я бы с шейдера начал.
Боюсь что будет обычный сценарий: отключил какой-то кусок шейдера - заработало. Отключил другой (никак не связанный с первым) .. тоже заработало Потому что ищем вслепую
0
snake32
1641 / 1095 / 191
Регистрация: 26.02.2009
Сообщений: 4,060
Записей в блоге: 5
15.12.2016, 13:44 #8
Можно попробовать копнут глубже - изучить отладку GLSL с помощью отладчиков. Я пока сам не осилил.
https://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf
#error will cause the implementation to put a diagnostic message into the shader object’s information log
(see the API in external documentation for how to access a shader object’s information log). The message
will be the tokens following the #error directive, up to the first new-line. The implementation must then
consider the shader to be ill-formed.
#pragma allows implementation dependent compiler control. Tokens following #pragma are not subject
to preprocessor macro expansion. If an implementation does not recognize the tokens following
#pragma, then it will ignore that pragma. The following pragmas are defined as part of the language.
#pragma STDGL
The STDGL pragma is used to reserve pragmas for use by future revisions of this language. No
implementation may use a pragma whose first token is STDGL.
#pragma optimize(on)
#pragma optimize(off)

can be used to turn off optimizations as an aid in developing and debugging shaders. It can only be used
outside function definitions. By default, optimization is turned on for all shaders. The debug pragma
#pragma debug(on)
#pragma debug(off)

can be used to enable compiling and annotating a shader with debug information, so that it can be used
with a debugger. It can only be used outside function definitions. By default, debug is turned off.
1
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
16.12.2016, 11:14  [ТС] #9
#pragma debug добавил, ничего не изменилось. Ну это нормально, наверное она готовит данные для чего-то (кого-то), само по себе ничего не делает.

Понатыкал тестовых печатей, располагаю окна так чтобы было видно что успело напечататься в консоли до зависания. Все glDrawElements отрабатывают, упр-е возвращается в ОС, но следующее событие от него не приходит, система убита
0
_Develop
261 / 170 / 27
Регистрация: 24.01.2013
Сообщений: 496
16.12.2016, 13:07 #10
Одна из версий, у меня когда то такое было - шейдер слишком длинный/сложный, если не успевает выполниться за определенное время, то краш драйвера с соответствующими последствиями...
0
homelleon
4 / 4 / 3
Регистрация: 15.12.2012
Сообщений: 188
10.01.2017, 09:54 #11
Так и для шейдеров есть отладчики. У меня всегда пишет, в какой строке ошибка, если с шейдером проблемы.
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
10.01.2017, 13:18  [ТС] #12
Цитата Сообщение от homelleon Посмотреть сообщение
Так и для шейдеров есть отладчики. У меня всегда пишет, в какой строке ошибка, если с шейдером проблемы.
А Вы уверены что это отладчик пишет?
0
homelleon
4 / 4 / 3
Регистрация: 15.12.2012
Сообщений: 188
10.01.2017, 13:32 #13
Цитата Сообщение от Igor3D Посмотреть сообщение
А Вы уверены что это отладчик пишет?
Ну да)
Кликните здесь для просмотра всего текста
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
private static int loadShader(String file, int type) {
        StringBuilder shaderSource = new StringBuilder();
        try {
            InputStream in = Class.class.getResourceAsStream(file);
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String line;
            while((line = reader.readLine())!=null) {
                
                shaderSource.append(line).append("\n");
            } 
            reader.close();
        }catch (IOException e) {
            System.err.println("Couldn't read file!");
            e.printStackTrace();
            System.exit(-1);
        }
        int shaderID = GL20.glCreateShader(type);
        GL20.glShaderSource(shaderID, shaderSource);
        GL20.glCompileShader(shaderID);
        if(GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS)==GL11.GL_FALSE){
            System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
            System.err.println("Couldn't compile shader!");
            System.exit(-1);
        }
        return shaderID;
0
10.01.2017, 13:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2017, 13:32
Привет! Вот еще темы с решениями:

glDrawElements + facets normals
Здравствуйте Рисую с помощью glDrawElements (геометрия "shared") и бывает...

Реализовать текстурированный куб с помощью glDrawElements
Здравствуйте! Сабж: Кто нибудь делал текстурированный куб с помощью...

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

Системник рандомно зависает, нужно найти причину
Добрый день, спасите меня. Имеем: 1. gigabyte ga-990fxa-ud3 rev3 2. FX 8350...


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

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

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