Сообщения на форуме пользователя Andrey (73 стр.)
OpenGL c старыми драйверами на Intel.Как проверить неверную работу шейдера? | 17 июля 2009 | 15:44 | #20 |
---|
хотя нет там еще степень непрозрачности и яркость передается через glProgramLocalParameter4fARB.
с твоим шейдером все зеленое.
поменял fragment.texcoord[1] на fragment.texcoord[0] только... у меня на квадрат экрана рисуется. передачу параметров закоментил.
OpenGL c старыми драйверами на Intel.Как проверить неверную работу шейдера? | 17 июля 2009 | 15:29 | #17 |
---|
итак заменил вот так:
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 июля 2009 | 15:10 | #13 |
---|
> 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 июля 2009 | 14:48 | #8 |
---|
>Вообщето нормальные авторы в длл-ке держат VersionInfo. ХЗ про интел :)
так а что это дает?
OpenGL c старыми драйверами на Intel.Как проверить неверную работу шейдера? | 17 июля 2009 | 14:47 | #6 |
---|
>Ты шейдер сам писал на 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 июля 2009 | 14: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 июля 2009 | 19:10 | #625 |
---|
много кода лишнего на входе и выходе функции.
снижает быстродействие(Майерс писал в книге)
вызывают кешь миссы
реализация исключений не очень быстрая в компиляторах.
STL. Использовать или нет? | 10 июля 2009 | 17:05 | #621 |
---|
>> 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 Library | 6 июля 2009 | 10:40 | #13 |
---|
все понятно
>что мин. требования - это ATI 3xxx :
такого в теме нету. про OpenGL 2.1 сказано, и есть поддержка в ATI X1600.
вот лог кстати:
default.log
Linderdaum Volume Rendering Library | 6 июля 2009 | 9:47 | #11 |
---|
работает. Но изоповерхности нету, только фон и отладочная информация. ATI X1600.
Чего тема попалда во флейм???
NvTriStrip UINT индексы | 3 июля 2009 | 23:20 | #1 |
---|
ты правил исходники?
Подскажите самый быстрый способ вывода текста в OpenGL | 3 июля 2009 | 11:51 | #24 |
---|
попробуй 16 битные индексы
glDrawRangeElements(type,0,size,size,GL_UNSIGNED_SHORT,indices);
Более реалистичный огонь с использованием частиц | 3 июля 2009 | 11:42 | #40 |
---|
используй VBO, используй индексированный вцывод примитивов, лучше треугольниками, а не квадратами.
glDrawElements(GL_TRIANGLES,...);
используй не float для цвета а unsigned char, экономия размера вершины будет.
glColorPointer(4, GL_UNSIGNED_BYTE,....
после применения скелета не фига не отображается | 3 июля 2009 | 11:20 | #2 |
---|
а где ты получешь a_position ? может забыл?
Должен быть код:
a_position = glGetAttribLocation(prog, "a_position");
проверь ошибки OpenGL возможно где-то "Invalid Operation".
Перенеси тему в раздел графика. Отформатируй код тегом. code=cpp
Подскажите самый быстрый способ вывода текста в OpenGL | 3 июля 2009 | 9:31 | #19 |
---|
На каких картах были тесты? просто во времена OpenGL 3.0 это явно устаревший функционал