Сообщения на форуме пользователя Andrey (13 стр.)
MirrorOnce и DirectX 9.2 | 25 июля 2012 | 12:54 | #5 |
---|
>скиньте хоть пример шейдера с MirrorOnce какой-нить работающий для DX9 если есть.
> AddressU = MIRRORONCE;
> AddressV = MIRRORONCE;
> AddressW = MIRRORONCE;
добавляю эти строки в
Samples\C++\Direct3D\BasicHLSL\BasicHLSL.fx
Работает!, подумал странно, специально в код эффекта вставляю _AddressU - exe не запускается, вывод на Direct3D9 работает. nVidia 210 вроде.
Может всякие флаги для этих эффектов нужны? ты посмотри в документацию для D3DXCreateEffectFromFile или чем ты его грузишь, может несовместимость, может еще что-то. Флагов там много.
> D3D9Types.h имеется, нашел в нем D3DTADDRESS_MIRRORONCE. Но как этот state в
> шейдере включить?
Как константы API могут соотносится с символами для парсинга компилятором???
>FX Composer вообще ругается Error: Unrecognized RHS value in assignment: 'MIRRORONCE'
он тоже вызывает функцию я не помню есть ли там флаги и можно ли их там задавать.
Вопросы по быстродействию OpenGL | 25 июля 2012 | 11:13 | #26 |
---|
> На многих видеокартах NVidia стрипы вдвое быстрее треугольников. И не удивлюсь,
> что не на многих, а на всех.
Запускаем демку NvTriStrip из nVidia SDK на нескольких картах ATI, nVidia и удивляемся падению FPS на может 10-20% при использовании TRIANGLE_STRIP.
[GLSL|OpenGL] некорректный блендинг при включении шейдера | 23 июля 2012 | 17:48 | #6 |
---|
упрости пиксельный шейдер который тупо текстуру читает и все. или так и есть? у меня такое ощущение что на втором скриншоте вообще нету текстуры.
ту текстуру через glUniform1i связываешь с текстурным юнитом ? glActiveTexture вызываешь ?
Вопрос по шейдерам на Cg | 23 июля 2012 | 16:13 | #22 |
---|
> да так проще уж сразу на glsl - тем более там своих #define хватает :)
а это как раз уже далеко не просто, по сравнению с портированием PC/XBOX360->PS3
std::map<std::string, ...> vs std::map<size_t, ...> | 23 июля 2012 | 15:26 | #24 |
---|
> > твоя реализация gettimeofday имеет вызов в ядро Windows
> ideone.com использует линупс.
а... ну тогда все ок.
Вопрос по шейдерам на Cg | 23 июля 2012 | 15:24 | #20 |
---|
>XBOX360 свой код, PS3 свой код, PC свой код в зависимости от API, мобилы свой код.
Ты не прав все первые 3 платформы будут иметь почти 90% похожий код, тут уже с Cg будет проще, ибо HLSL для PC/XBOX 360 проще через Cg портануть на PS3, будут дефайны но не везде. Пишется 1 раз бибилиотека и через #include все включается. Я видел define'ы к примеру в Duke Nuckem Forever, я бы не сказал что там много этого. Единственное Для мобил совершенно другой код. Хотя компильнуть в glslf/glslv и доработкой кода вручную для GLSL ES можно и это сделать, при желании.
std::map<std::string, ...> vs std::map<size_t, ...> | 23 июля 2012 | 14:58 | #21 |
---|
>хотя нет, критично, clock() показывает более стабильный результат.
естественно. поэтому нужно больше элементов тестировать.
твоя реализация gettimeofday имеет вызов в ядро Windows + кучу дополнительного кода. т.е. еще и погрешность изменений. Получить время через QPC существенно проще, хотя тоже вызов идет в ядро, но реализация проще мы идем к системному таймеру в отличии от GetSystemTimeAsFileTime, где алгоритм работы наверное сложнее. Остается еще понять какой вызов из функция все таки быстрее с учетом дополнительного кода. Так что предлагаю с QPC тестировать.
std::map<std::string, ...> vs std::map<size_t, ...> | 23 июля 2012 | 12:34 | #18 |
---|
> Да вот быстрее, но ненамонго. Профилировщик в обоих вариантах так же показывает
> самый сложный код - оператор [] в std::map. Я, если честно, ожидал ответа в
> духе "примерно одинаково".
Сколько был элементов ? даже думать нету смысла сравни сравнение целых числе и строк. Сравни вставку со строкой(malloc + strcpy) и целым числом(просто команда пересылки)
На сотне элементов конечно чуток быстрее...
=A=L=X=
1) С++ Excpeptions отключил?
2) #define HAS_ITERATOR_DEBUGGING 0 поставил?
3) #define _SECURE_SCL 0, #define _SECURE_SCL_THROWS 0 поставил ?
Если все сделаешь разница во времени со строками может сократиться.
clock() не подходит для таких измерений в силу погрешности в 1 мс. QPC нужен или gettimeofday для POSIX.
Вопрос по шейдерам на Cg | 23 июля 2012 | 11:56 | #12 |
---|
NV47 это аналог GeForce_7900
PS3 поддерживат SM3.0 GLSL нету, значит есть поддержка расширения GL_NV_fragment_program2/GL_NV_vertex_program3, просто оно скрыто на этой платформе. Ибо OpenGL там опционален. поддержку расширения модифицировали под эту платформу. Вывели наружу для прикладного программиста ввиде libgcm или OpenGL ES.
> и он будет звать туже функцию расширения.
>какую именно ?
такую же что и в GLARB_fragment_program/GL_ARB_veretx_program(только там GL_NV_vertex_program2_option + NV_fragment_program_option это достаточно расширенные возможности для SM3 и циклы и т.д.).
Эти функции они либо есть в OpenGL обертке либо нету, но скорей всего нету. То что зовет их Cg Run Time под PS3 это точно, некоторые функции я привел, кстати, там Cg типы и определения такие же как на PC
>его возможности, действительно, аналогичны GL_NV_fragment_program2/GL_NV_vertex_program3 ( где-то меньше, где-то больше ) - это не значит, что там именно они есть
Не будет nVidia делать по другому. Зачем что-то придумывать? есть уже реализация под PC этих расширений взяли сделали порт Cg Run time и вставили его в libgcm.
Это просто расширения но использование в OpenGL обертке напрямую возможно делать нельзя. Просто не прокинули функции в PS3 SDK. Только и всего. Из за этого это уже не расширение?
>в что компилится код Cg на PS3 ? в шейдерный asm от GL_NV_fragment_program2/GL_NV_vertex_program3 ? или в какой-то там микрокод ?
Не знаю что это меняет?. Опять таки на PC ты из этого расширения получаешь ASM(через Cg, либо сам пишешь) и подаешь функции glProgramStringARB. То что данной функции нету на PS3, но есть аналог в libgcm который внутри через Cg этот asm код сразу дает этому расширению на компиляцию и созданию шейдера. Если Cg дает микрокод то мы имеем урезанную поддержку расширения для прикладного программиста, т.е. asm не подсунешь как на PC. Но факт поддержки расширений аналогичных как на PC есть, причем независимо от поддержки OpenGL. Больше не знаю как объяснить.
Rage | 23 июля 2012 | 11:35 | #844 |
---|
> У тебя кривая АТИ! Нормальные АТИ показывали зеленый квадрат либо ничего не
> показывали!
Теперь мне купить nVidia ? есть nVidia 8600 GT, пока достаточно :)
Rage | 23 июля 2012 | 11:13 | #837 |
---|
Причем на смеси якобы "глючного AMD/ATI" ATI HD 5670/ AMD Athlon II X3 460/ DDR3 4GB, Win7/32.
Я что-то делал не так?
Вопрос по шейдерам на Cg | 23 июля 2012 | 11:03 | #10 |
---|
> Поддержка расширения - это как минимум поддержка api, которое это самое
> расширение поддерживает
> если там нету никакого GL - там нет расширений GL :)
Бред. Есть поддержка GL_NV_fragment_program2/GL_NV_vertex_program3 для видюхе 7900 на PS3. Хочешь пиши на тормозном OpenGL поверх libgcm, тут наверное может и напрямую будут вызовы расширения. Если более низко работать будет вызовы всяких cellGcmSetFragmentProgram, cellGcmSetVertextProgram, cellGcmSetVertexProgramConstants тут уже будет работать Cg + libgcm но без OpenGL, и он будет звать туже функцию расширения.
Но OpenGL тут может и не поддерживаться. Но факт наличия расширения есть, в независимости от там поддержки OpenGL, ведь то это просто толстая обертка/библиотека в виде OpenGL функций, которые внутри зовут libgcm, тут OpenGL далеко не нативный. В общем спор на эту тему бесполезен.
> C проблемой tex2DGrad Cg справился
что за проблема ?
http://www.gamedev.ru/code/forum/?id=154893&page=2#m24
тут уже все выяснили прекрасно компилит в разных вариациях, с использование расширений и ядра.
Во что же превращаются игры от Blizzard? | 22 июля 2012 | 14:39 | #29 |
---|
Вопрос по шейдерам на Cg | 22 июля 2012 | 13:20 | #3 |
---|
>sm3.0 - не всё работает
будет время на досуге посмотрю что же еще с SM3 не пашет.
> как они там могут быть, если GL не используется ? :)
Потому что карта 7900, и нету Run Time под GLSL, и нужен SM3 значит единственное это это расширение. Другого нету, и его держит Cg.
Читай доки по libgcm. Причем тут вообще OpenGL ? Поддержка расширения это все лишь заявление хардварной поддержки чего либо. Использовать это можно не только через OpenGL, главное предоставить это через некое API. что и сделалf Sony и nVidia.
>не меньший минус, что последние железные фичи поддерживаются как правило только на nvidia - сколько лет ждать ?
вот это я не исследовал. Минус есть, не спорю. Но может пошаманить с кодом и т.д. Взять glsl код самому и все сделать ?
C проблемой tex2DGrad Cg справился, значит есть шанс что и тут возможно все ок.
Я просто не в курсах и утверждать не могу.
Вопрос по шейдерам на Cg | 22 июля 2012 | 11:56 | #1 |
---|
> что Cg никто не использует
На Plastation 3 это единственный вариант для шейдеров. там GL_NV_fragment_program2/GL_NV_vertex_program3.
к примеру Quake Wars использует его.
Его сейчас обновили есть версия за 2012 год. Не понимаю почему в игре Rage лежат его dll
У Cg имеет большой минус у него тормозной Run Time.
вот есть пару ссылок на эту тему.
http://forum-archive.developer.nvidia.com/index.php?showtopic=423… p;#entry12790
http://forum-archive.developer.nvidia.com/index.php?showtopic=459… p;#entry13741
Но наверное в связи с атакой на сайт работать не будут.
Если его использовать как компилятор то это будет хорошим решением.
Ты пиши шейдеры на HLSL для Direct3D, для OpenGL получай код GLSL и используй его напрямую.
Библиотека CgGL.dll не нужна а CgD3D9.dll,CgD3D10.dll,CgD3D11.dll не нужны тем более. nVidia имеет свой компилятор для D3D9 он намного хуже HLSL, для Direct3D10/Direct3D11 они вообще вызывают HLSL т.е. тупо ненужная обертка.
Единственная проблема нужно вытянуть uniform из Cg кода, он меняет их имена. Ну это не так сложно. в данный момент я использую этот путь. как не странно то все работает на ATI/nVidia и даже на OpenGL на дохлой Intel GMA 3150.
Я еще недавно добавил в glsl код выданный Cg использование UBO. Там конечно все сложнее, я стирал комментарии и добавял добавлял определение UBO. Все прекрасно работает и атрибуты вершин задаю тоже. В контексте OpenGL 3.0 и выше.
вот есть ссылка где есть конвертер Cg to GLSL, причем без лишней CgGL.dll
http://blog.tomaka17.com/2010/09/turning-cg-into-glsl-and-then-using-the-code/
но там конечно с динамическими строками и т.д. проще можно все сделать. Но главное идея. Будут вопросы пиши.