Я слышал что можно из проги без исходника можна вытянуть шейдеры которые там используются(странно в Google я про этот топик ничего не нашел)! Ну, вроде запустил свою прогу для ловли шейдеров, запустил ту с которой хочешь эти шейдеры вытянуть, и по завершению работы работы имеешь все шейдеры! А как это можна реализовать в своей проге?
Dart_Bobr Все зависит от того, в каком виде ты хочешь получить свой "шейдер". 1. GLSL: glGetShaderSourceARB 2. Низкоуровневые на OpenGL: glGetProgramStringARB 3. Direct3D: В душе не знаю Проблемма в том, чтобы приаттачить чужой рендеринг контекст к своему процессу. И я был бы очень рад если бы кто-нибудь рассказал, как это сделать. captain cobalt Ну это такая штука, понимаешь, шейдер. (С) "Бобик в гостях у Барбоса".
У меня есть какая-то ati'шная демка, дык в ней есть файл Sushi.ati, который при поверхностном осмотре оказался zip содержащим кучу файлов примерно такого содержания: Код (Text): ps.1.4 texld r0, t0 // Base1 mul r0.rgb, r0, v0_x2 Так что наверное возможны и другие пути ?
На винте шейдеры могут быть закриптованы. С помощью айса: wglGetProcAddress нужной функции. Далее breakpoint на нее и все. Взяли адрес и длину из стека и сохранили текст из данных.
_DEN_ Вот-вот я тоже хотел бы об этом узнать! Не знал что на GL тоже можна шейдеры юзать. Там же вроди только расширения типа ARB, CG и т. д. S_T_A_S_ Так это на винте шейдеры. А я так понимаю их можна из памяти тырить. Тем более что делать когда прога весит 2 гига, и шейдеры где-то в ней закриптованы. Их в коде можна искать до пенсии.
2 all Интересые вы все. Ну предположим мы приаттачились к чужому RC, а дальше что? glGetProgramStringARB или glGetShaderSourceARB делать до бесконечности. Ведь шейдеры в программе подключаются по мере необходимости, и в какой момент будет использоваться шейдер мы не знаем. Dart_Bobr Не знал что на GL тоже можна шейдеры юзать. Там же вроди только расширения типа ARB, CG и т. д. =)) в opengl 2.0 есть кроме расширений, стандартная такая штука - OpenGL Shading Language. Сайты вендоров посмотри, например 3DLabs - поможет.
jekyll Спасибо, а то я на GL писал давно, но в основном примитивные проги (тем более на gl1.5, а шейдеров там вроди и не было). Теперь попробую с шейдерами.
Dart_Bobr CG это не расширение. И кто тебе сказал, что расширения это не OpenGL? jekyll Ё, нигер, давно на васме не встречались Шейдеры может быть и будут то включаться, то выключаться, вот только объекты-то не будут удаляться-создаваться каждый кадр. На кой хрен это надо? Поэтому если у программеров руки растут хотя бы из талии, то шейдеры вполне можно будет вытащить. Да, может быть не все. glCreateShaderObjectARB делается один раз, а glUseShaderObjectARB - сколько угодно. А объект-то никто не трогает! PS: - Что такое RTFM? - RTFM!
Давеча случайно обнаружил, что "Duke Nukem - Manhattan Project" хранит шейдеры открыто (файлах данных зазипованы), других игрушек у мя нет, но думаю таких много. А вообще - дампить и смотреть. ЗЫ: не путайте криптовку (которую IMHO никто юзать не будет) и сжатие широко известными методами.
_DEN_ Ё, нигер, давно на васме не встречались Теперь я здесь вроде не частый гость. Шейдеры может быть и будут то включаться, то выключаться, вот только объекты-то не будут удаляться-создаваться каждый кадр. Ты не путай теплое с мягким. Каждый кадр - это ессно бред, но с уровня на уровень скажем, вполне может быть.
jekyll Че так? Обиделся на wasm? Не путаю Там проблемма еще в том, что у шейдера есть хендл, который мы вроде как не знаем, так что придется прямой перебор юзать. Бред какой. По-моему все же самый человеческий способ это искать шейдеры на винте.
_DEN_ Че так? Обиделся на wasm? На wasm не обижаюсь. =) Грамотный сайт. По-моему все же самый человеческий способ это искать шейдеры на винте. Вот и я о том же.
Я может уже поздно. Есть такая замечательная прога 3D analyze Конечно со своими обязаннастями она справляется не очень, а вот шейдеры тырит только в путь. Только придется разобраться какой из них кто.
melnik_sergey Не бывает ничего идеального. Пока ты шейдер в видяху не подгрузишь никакая волшебная программулина тебе его не выдаст. А сразу все шейдеры никто грузить не будет. Я остаюсь при своем мнении - самое надежное - искать шейдеры на винте.