GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (73 стр.)

Сообщения на форуме пользователя Andrey (73 стр.)

OpenGL c старыми драйверами на Intel.Как проверить неверную работу шейдера?17 июля 200915:44#20
RPGman
хотя нет там еще степень непрозрачности и яркость передается через glProgramLocalParameter4fARB.
с твоим шейдером все зеленое.
поменял fragment.texcoord[1] на fragment.texcoord[0] только... у меня на квадрат экрана рисуется. передачу параметров закоментил.
OpenGL c старыми драйверами на Intel.Как проверить неверную работу шейдера?17 июля 200915:29#17
innuendo
итак заменил вот так:
PARAM c[6] = { program.local[0..1],
                { 1.164, 0, 1.596, 0.5 },
                { 0.0625, 1.164, -0.391, -0.81300002 },
                { 1.164, 2.0179999, 0 },
        { 1.164, -0.391, -0.81300002, -0.81300002 } };#yzww
....
DP3 result.color.y, R0, c[5];
думаю может что исправит.
>ARB_precision_hint_fastest и ARB_precision_hint_nicest не помогут ?
а как они помогут? да и придеться еще расширения проверять и подставлять в код шейдера опции.
RPGman
>Кроме собственно yuv->rgb что-то еще делается в шейдере? Что-то у меня сильно короче код.
по сути ничего.
OpenGL c старыми драйверами на Intel.Как проверить неверную работу шейдера?17 июля 200915:10#13
innuendo
> DP3 result.color.z, R0, c[4];"
это что за " ?
в коде задавалось как
static const char yv12ToRgb[] =
"!!ARBfp1.0"
....
"END";
забыл стереть "
>> DP3 result.color.y, R0, c[3].yzww;
>вот это меня смущает yzww
почему? свизлинг не поддерживается?
OpenGL c старыми драйверами на Intel.Как проверить неверную работу шейдера?17 июля 200914:48#8
YgriK
>Вообщето нормальные авторы в длл-ке держат VersionInfo. ХЗ про интел :)
так а что это дает?
OpenGL c старыми драйверами на Intel.Как проверить неверную работу шейдера?17 июля 200914:47#6
innuendo
>Ты шейдер сам писал на ARB или через Cg ?
>Текст шейдера не выложишь ?-
текст шейдера уже есть готовый и рабочий в плагине к бибилиотеке QT. Через что он был написан через Cg ишли вручную не в курсах.
в шейдере ничего криминального нету:
!!ARBfp1.0
PARAM c[5] = { program.local[0..1],
                { 1.164, 0, 1.596, 0.5 },
                { 0.0625, 1.164, -0.391, -0.81300002 },
                { 1.164, 2.0179999, 0 } };
TEMP R0;
TEX R0.x, fragment.texcoord[0], texture[1], 2D;
ADD R0.y, R0.x, -c[2].w;
TEX R0.x, fragment.texcoord[0], texture[2], 2D;
ADD R0.x, R0, -c[2].w;
MUL R0.z, R0.y, c[0].w;
MAD R0.z, R0.x, c[0], R0;
MUL R0.w, R0.x, c[0];
MUL R0.z, R0, c[0].y;
TEX R0.x, fragment.texcoord[0], texture[0], 2D;
MAD R0.y, R0, c[0].z, R0.w;
ADD R0.x, R0, -c[3];
MUL R0.y, R0, c[0];
MUL R0.z, R0, c[1].x;
MAD R0.x, R0, c[0].y, c[0];
MUL R0.y, R0, c[1].x;
DP3 result.color.x, R0, c[2];
DP3 result.color.y, R0, c[3].yzww;
DP3 result.color.z, R0, c[4];"
MOV result.color.w, c[1].y;
END;

>Идея не очень. дай юзеру галочку, юзать поддержку GL или нет :)
про галочку понятно. но есть "глумурные блондинки" с ними тяжелей

Правка: 17 июля 2009 14:47

OpenGL c старыми драйверами на Intel.Как проверить неверную работу шейдера?17 июля 200914:27#0
Привет всем!
Особенно непоколебимым фанатам OpenGL.
Итак задача такая. Есть Видео проигрыватель, видео картинка конвертируется из цветового пространства YUV в стандартное RBG (YUV->RGB подробнее http://www.fourcc.org/fccyvrgb.php) через шейдер, в шейдер подаются 3 текстуры GL_LUMINANCE сожержащие Y, U, V компонеты.
Для шейдера используется расширение GL_ARB_fragment_program. Не спрашиваете про GLSL, он там не нужен, т.к. требуется поддержка устаревших видеокарт и очень дохлых ноутбуков.
На ATI, nVidia  все работает как часы.
На Intel работает, если есть новые драйвера. Но пользователи не всегда их обновляют. Очень часто бывает неверная работа шейдеров - разные оттенки либо еще что-то. Обновление драйверов решало неоднократнор данную проблему.

На ATI, nVidia наверняка GL_ARB_fragment_program будет работать с более старыми версиями драйверов, в отличии от Intel.

Что-бы продукт был более стабилен и максимально информативно оповещающий о неверной работе драйверов, возникла идея, проверять правильность работы драйвера хотя-бы в рамках конвертации цветовых пространств.

Для реализации теста можно взять и прогнать через шейдер 3 тестовые текстуры и сравнить цвет пикслей в соответвии с формулой преобразования, в случае неверного цвета, сообщить пользователю о неверной работе драйверов, переключиться в софтварную обработку на CPU.
Этот тест не дает 100% гарантию о неверной работе драйвера, в нем только проверка математики преобразований, причем она очень простая, я не думаю что неверно реализована будет. Нет проверки на правильность записи в результирующий цвет и т.д.

Отказаться от преобразования в шейдере на OpenGL не предлагать.
Direct3D версию не предлагать - сам знаю и есть уже мысли переписать.

Как еще можно проверить работу шейдера, на предмет того что драйвер старый, или это вообще полностью бредовая идея?
Насколько эта идея будет полезна?

STL. Использовать или нет?10 июля 200919:10#625
San
много кода лишнего на входе и выходе функции.
снижает быстродействие(Майерс писал в книге)
вызывают кешь миссы
реализация исключений не очень быстрая в компиляторах.
STL. Использовать или нет?10 июля 200917:05#621
X512
>> exe set<T> или map<T>
>Зачем компилятор это в exe это пишет? Чтобы легче ломать было?
STL выкидывает тормозные исключения, предки от от std::exception, типа std::bad_alloc, std::length_error, std::out_of_range, а строки как раз то что есть в exe, в методе const char* std::exception::what() const.
можно конечно компилить без поддержки исключений. тогда этого хлама не будет, что и следует делать в release версии, и тем более на консолях.
так что наверняка на консолях этих стро не будет.
Linderdaum Volume Rendering Library6 июля 200910:40#13
Vinil
все понятно
>что мин. требования - это ATI 3xxx :
такого в теме нету. про OpenGL 2.1 сказано, и есть поддержка в ATI X1600.
вот лог кстати:
default.log
Linderdaum Volume Rendering Library6 июля 20099:47#11
_NetSurfer_
работает. Но изоповерхности нету, только фон и отладочная информация. ATI X1600.
Чего тема попалда во флейм???
NvTriStrip UINT индексы3 июля 200923:20#1
Executor
ты правил исходники?
Подскажите самый быстрый способ вывода текста в OpenGL3 июля 200911:51#24
MarkoPolo
попробуй 16 битные индексы
glDrawRangeElements(type,0,size,size,GL_UNSIGNED_SHORT,indices);
Более реалистичный огонь с использованием частиц3 июля 200911:42#40
FROL
используй VBO, используй индексированный вцывод примитивов, лучше треугольниками, а не квадратами.
glDrawElements(GL_TRIANGLES,...);
будет меньше вершин гоняться по шине.
используй не float для цвета а unsigned char, экономия размера вершины будет.
glColorPointer(4, GL_UNSIGNED_BYTE,....
проверь, может CPU у тебя загружен сильно? Как частицы расчитываешь? new/delete для каждой? лично у меня 55% при запуски firedemo3
после применения скелета не фига не отображается3 июля 200911:20#2
iArt
а где ты получешь a_position ? может забыл?
Должен быть код:
a_position = glGetAttribLocation(prog, "a_position");
?
проверь ошибки OpenGL возможно где-то "Invalid Operation".
Перенеси тему в раздел графика. Отформатируй код тегом. code=cpp
Подскажите самый быстрый способ вывода текста в OpenGL3 июля 20099:31#19
XProger
На каких картах были тесты? просто во времена OpenGL 3.0 это явно устаревший функционал

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр