Войти
ПрограммированиеФорумГрафика

Nvidia и OpenGL 3.3. Фу таким быть

#0
13:16, 7 июля 2017

Решил я значит портировать приложение с js/WebGL на C++/OpenGL. Да так, чтобы была возможность использовать одну и ту же базу кода как для js так и для десктопа

Используя GLFW запросил окно с версией OpenGL 3.3 Core Profile. И в тот момент, когда я таки дошел до вывода картинки на экран, у меня появились большие вопросы.

На встроенной Intel видеокарте - картинка выводилась нормально с текстурами. А на карточках Nvidia - я получал буфер глубины вместо текстур. Причем на 10 запусков приложения на Nvidia, приходился один запуск, где текстуры все-таки отображались корректно

После нескольких дней мучений, проблема таки была найдена. GLSL у меня в коде использовался версии 120. Когда я заменил его на версию 330 и поменял "attributes" на "in", а "varying" на "out" - картинка стала стабильно отображаться корректно


Моя главная претензия - почему OpenGL не выводил никаких ошибок? glGetError никак не ругался на некорректную версию GLSL. Отладка в таких условиях - это гадание на кофейной гуще


#1
13:39, 7 июля 2017

Deamon
Использование разных версий glsl - это не баг, это фича!

#2
13:46, 7 июля 2017

Дык, это твой косяк.
Строка с версией ДОЛЖНА быть, так в стандарте написано, иначе драйвер выбирает минимальную, с которой получается скомпилировать.

Nvidia NSIGHT+KHR_Debug в помощь.

#3
13:54, 7 июля 2017

NickGastovski
Так строка с версией и была. Первой строчкой в коде шейдер.

#version 120

Вопрос почему OpenGL не ругался, если ему не нравилась версия GLSL.

>>KHR_Debug
Спс, посмотрю на досуге. Если и там не будет проскакивать ошибок - это будет номер

#4
14:02, 7 июля 2017

Deamon
> Вопрос почему OpenGL не ругался, если ему не нравилась версия GLSL.

привык к DXDebug ? это GL, тут нужно ходить в чугунных труселях

#5
17:27, 7 июля 2017

Deamon
>OpenGL 3.3 Core Profile.
>GLSL у меня в коде использовался версии 120.
Intel ничего не написал?
э... Да навидия такое может. AMD на Core Profile может посылать тебя нафиг не компилить glsl,  не рисует без VAO и много чего, аналогично на Mac OS X, навидия может компилить GLSL не по стандарту или по несоответствию версии OpenGL, но на этот раз
это не прокатило - запуталися видать :)
Кстати, GL_ARB_KHR_Debug  может при отрисовке сыпать что-нибудь полезное навидия оочень много там пишет, там без фильрации сообщений никак.
>Когда я заменил его на версию 330 и поменял "attributes" на "in", а "varying" на "out" - картинка стала стабильно отображаться корректно
логично. Я вообще к примеру проверяю версию GLSL ES  и подставляю макросы #define varying out, #define attributes in там чего-то с текстурами еще.
> Вопрос почему OpenGL не ругался, если ему не нравилась версия GLSL.
компилятор GLSL навидии через Cg + агрессивная политика не следования стандартам и пропихивания своих пропритаренных технологий.

#6
17:41, 7 июля 2017

Andrey
> компилятор GLSL навидии через Cg

Надевать штаны через голову, в топку! в мегатопку!

#7
12:24, 9 июля 2017

Andrey
> навидия

А что у тебя так пукан рвёт ? Укусила Nvidia за одно место ?

> пропихивания своих пропритаренных технологий.

AMD не пропихивает своё что ли ?

#8
15:33, 9 июля 2017

>Вопрос почему OpenGL не ругался, если ему не нравилась версия GLSL.
Это политика такая. Версия для шейдеров может отличаться, от версии контекста - это так т.к "главное что бы скомпилировалось", работоспособность не гарантируется(гарантируется если версия контекста и GLSL совпадает).

По хорошему, делаешь свой VersionLayer, как написал Andrey. И дефайном указываешь какую версию ты хочешь получить.
Мега оверкилл: Пишешь свой парсер, который разворачивает макросы и инклуды. + Сам добавляет в шейдер #version CONTEXT_VER CONTEXT_PROFILE
Более простой вариант - чисто строка с версией

#9
16:39, 9 июля 2017

2 innuendo и Andrey
Блин, вы парни реально неровно дышите к друг другу!
Я все понимаю, но весна прошла, хотя в масквабаде можно сказать осень...
Вы уж наконец встретьтесь, полюбите друг друга)))
Ну в натуре, ваш срач уже иначе воспринимать!!!!

#10
17:39, 9 июля 2017

barnes
> Ну в натуре, ваш срач уже иначе воспринимать!!!!
Andrey уже давно никак не реагирует на innuendo. Тут только innuendo бегает по всему форуму за Andrey

#11
17:43, 9 июля 2017

MrShoor
> Andrey уже давно никак не реагирует

Конечно, сказать то нечего, кроме убогое апи и говноява

facepalm | Nvidia и OpenGL 3.3. Фу таким быть

Давай, развей тему компиляции Cg в glsl.

p.s. Лично мне Nvidia очень даже нравится:)

ПрограммированиеФорумГрафика

Тема в архиве.