HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > OpenGL > Избавиться от cg.dll
Использовать шейдеры без неё
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Question Избавиться от cg.dll

Назрел вопрос: у нас имеются дллки cg.dll и cgGL.dll Спомощью них шейдеры читаются программой. Хотелось бы поместить шейдеры в код клиентской дллки(как это сделано в ксаше - преломления на воде, чёрно-белый экран и т.п.), чтобы не использовать cg. Подскажите плз. есть ли конвертеры для cg в нужный язык, и что ещёнужно делать.

Сообщить модератору | | IP: Записан
Сообщение: 38608

Старое сообщение 19-10-2008 03:57
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Компилируй их компилятором cgc в профайлы arbvp (вершинные) и arpfp (пиксельные). Получится код, как в ксаше (комментарии, начинающиеся с #, можно вырезать). А дальше грузишь так же, как в ксаше.

Добавлено 19-10-2008 в 18:08:

Забавно читать тему именно в день принятия мной решения отказаться от скомпилированных шейдеров и использовать дллки Cg.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 38620

Старое сообщение 19-10-2008 11:08
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Компилирую шейдер. Командная строка выглядит так:

code:
cgc.exe -profile arbfp1 -entry FragmentProgram -o glow_blur.fp glow_blur_fp.cg

Выдаёт ошибку:
code:
(0) : error C3001: no program defined

Логичный вопрос: что делать?

Отредактировано Ku2zoff 24-10-2008 в 12:05

Сообщить модератору | | IP: Записан
Сообщение: 38726

Старое сообщение 24-10-2008 11:58
- За что?
ZONER
Частый гость

Дата регистрации: Oct 2008
Проживает: town->GetTown()
Сообщений: 56
Возраст: 31

Рейтинг



Я конечно этим компилятром никогда не пользовался. Но если перевести с английского, она жалуется, что у тебя не определена программа, которая должна быть откомпилена.

__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)

Сообщить модератору | | IP: Записан
Сообщение: 38727

Старое сообщение 24-10-2008 12:05
- За что?
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


ZONER гениально!!!

Ku2zoff может надо имя файла перед параметрами писать? )

Сообщить модератору | | IP: Записан
Сообщение: 38728

Старое сообщение 24-10-2008 12:15
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Government-Man не помогает. Тут похоже дело в коде шейдера.

Сообщить модератору | | IP: Записан
Сообщение: 38729

Старое сообщение 24-10-2008 12:29
- За что?
ZONER
Частый гость

Дата регистрации: Oct 2008
Проживает: town->GetTown()
Сообщений: 56
Возраст: 31

Рейтинг



Я могу открыть темку на форуме developer.nvidia.com по твоему вопросу. Может быть там ответ у кого-нибудь выудим.

З.Ы.
А там в документации по компилятору ничего не написано, что надо вписывать имя функции, исходя из которой код компилится? А то в HLSL компиляторе была такая фигня...

__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)

Сообщить модератору | | IP: Записан
Сообщение: 38731

Старое сообщение 24-10-2008 12:46
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



ZONER я ничего никогда не понимаю в документациях. Сколько не ищу, найти не могу. Для меня лучше всего "живой пример"

Сообщить модератору | | IP: Записан
Сообщение: 38733

Старое сообщение 24-10-2008 13:41
- За что?
ZONER
Частый гость

Дата регистрации: Oct 2008
Проживает: town->GetTown()
Сообщений: 56
Возраст: 31

Рейтинг



Короче я нашел выход из создавшейся поблемы. пишешь так:
cgc.exe -profile <профиль> -entry <имя основной функции> -o <здесь имя исходного кода и не более!>

Пример:
cgc.exe -profile arbfp1 -entry main_fp -o main.cg

Ветку дискусси этой проблемы можешь найти здесь: http://developer.nvidia.com/forums/...tart=#entry6300

__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)

Сообщить модератору | | IP: Записан
Сообщение: 38735

Старое сообщение 24-10-2008 14:46
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



ZONER как только я увидел параметр -entry main_fp до меня дошло. Что надо было писать не FragmentProgram(это имя функции просто для примера, а имя функции, шо присутствует в шейдере, т.е. просто main)

Cg Pixel Shader:
1
struct VertOut
2
{
3
  float4 pos : POSITION;
4
  float4 col : COLOR0;
5
  float2 tex0 : TEXCOORD0;
6
  float2 tex1 : TEXCOORD1;
7
  float2 tex2 : TEXCOORD2;
8
  float2 tex3 : TEXCOORD3;
9
};
10
 
11
struct FragOut
12
{
13
  float4 col : COLOR;
14
};
15
 
16
FragOut [color=red]main[/color](VertOut vin,
17
uniform samplerRECT tex0 : TEXUNIT0,
18
uniform samplerRECT tex1 : TEXUNIT1,
19
uniform samplerRECT tex2 : TEXUNIT2,
20
uniform samplerRECT tex3 : TEXUNIT3)
21
{
22
  FragOut fout;
23
 
24
  float4 col1 = texRECT(tex0, vin.tex0) *0.125f;/// 2.0f;
25
  float4 col2 = texRECT(tex1, vin.tex1) *0.875f;/// 2.0f;
26
  float4 col3 = texRECT(tex2, vin.tex2) *0.125f;/// 2.0f;
27
  float4 col4 = texRECT(tex3, vin.tex3) *0.875f;/// 2.0f;
28
 
29
  float4 avg1 = (col1 + col2) / 2.0f;
30
  float4 avg2 = (col3 + col4) / 2.0f;
31
 
32
  fout.col = avg1 + avg2;
33
 
34
  return fout;
35
}


Сообщить модератору | | IP: Записан
Сообщение: 38738

Старое сообщение 24-10-2008 15:09
- За что?
ZONER
Частый гость

Дата регистрации: Oct 2008
Проживает: town->GetTown()
Сообщений: 56
Возраст: 31

Рейтинг



А что на счет компиляции? Откомпилировалось? Просто мне самому интересно

__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)

Сообщить модератору | | IP: Записан
Сообщение: 38739

Старое сообщение 24-10-2008 15:13
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Откомпилировалось. Вышеуказанный шейдер теперь выглядит вот так:

C++ Source Code:
1
!!ARBfp1.0
2
PARAM c[1] = { { 0.125, 0.875, 0.5 } };
3
TEMP R0;
4
TEMP R1;
5
TEMP R2;
6
TEX R1, fragment.texcoord[3], texture[3], RECT;
7
MUL R2, R1, c[0].y;
8
TEX R1, fragment.texcoord[2], texture[2], RECT;
9
TEX R0, fragment.texcoord[1], texture[1], RECT;
10
MAD R2, R1, c[0].x, R2;
11
MUL R1, R0, c[0].y;
12
TEX R0, fragment.texcoord[0], texture[0], RECT;
13
MAD R0, R0, c[0].x, R1;
14
ADD R0, R0, R2;
15
MUL result.color, R0, c[0].z;
16
END

Сообщить модератору | | IP: Записан
Сообщение: 38740

Старое сообщение 24-10-2008 15:18
- За что?
ZONER
Частый гость

Дата регистрации: Oct 2008
Проживает: town->GetTown()
Сообщений: 56
Возраст: 31

Рейтинг



Хотя бы одному человеку помог с проблемой Если что понадобится еще, можешь в аську мне стучать.

__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)

Сообщить модератору | | IP: Записан
Сообщение: 38741

Старое сообщение 24-10-2008 15:27
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Шейдеры скомпилированы. Осталась малнькая неувязочка. ЦГшные функции нужно полностью убрать. Но им нужна альтернатива. Чем их заменить?

C++ Source Code:
cgGetNamedParameter
cgGLSetParameter1f
cgGLSetStateMatrixParameter

Вроде бы пока всё.

Сообщить модератору | | IP: Записан
Сообщение: 38742

Старое сообщение 24-10-2008 16:50
- За что?
ZONER
Частый гость

Дата регистрации: Oct 2008
Проживает: town->GetTown()
Сообщений: 56
Возраст: 31

Рейтинг



а ты можешь собственные написать. Вот, например как у меня было, когда я писал собственный движок:

C++ Source Code:
1
void sendMat4(const String &name, const Mat4 &value);
2
void sendVec4(const String &name, const Vec4 &value);
3
void sendVec3(const String &name, const Vec3 &value);
4
void sendVec2(const String &name, const Vec2 &value);
5
void sendFloat(const String &name, float value);
6
void sendInt(const String &name, int value);


C++ Source Code:
1
void GLShader::sendMat4(const String &name, const Mat4 &value) {
2
  GLint param = glGetUniformLocationARB(program, name.c_str());
3
  glUniformMatrix4fvARB(param, 1, false, value);
4
};
5
 
6
void GLShader::sendVec4(const String &name, const Vec4 &value) {
7
  GLint param = glGetUniformLocationARB(program, name.c_str());
8
  glUniform4fvARB(param, 1, value);
9
};
10
 
11
void GLShader::sendVec3(const String &name, const Vec3 &value) {
12
  GLint param = glGetUniformLocationARB(program, name.c_str());
13
  glUniform3fvARB(param, 1, value);
14
};
15
 
16
void GLShader::sendVec2(const String &name, const Vec2 &value) {
17
  GLint param = glGetUniformLocationARB(program, name.c_str());
18
  glUniform2fvARB(param, 1, value);
19
};
20
 
21
void GLShader::sendFloat(const String &name, float value) {
22
  int param = glGetUniformLocationARB(program, name.c_str());
23
  glUniform1fARB(param, value);
24
};
25
 
26
void GLShader::sendInt(const String &name, int value) {
27
  int param = glGetUniformLocationARB(program, name.c_str());
28
  glUniform1iARB(param, value);
29
};


Это пример написания, если ты пишешь шейеры на языке GLSL.
Не совсем уверен, но может быть и для ассемблерных шейдеров подойдет.

Если надо то могу все функции описать, что да как работает.

__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)

Отредактировано ZONER 24-10-2008 в 17:24

Сообщить модератору | | IP: Записан
Сообщение: 38743

Старое сообщение 24-10-2008 17:18
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 23:12. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > OpenGL > Избавиться от cg.dll
Использовать шейдеры без неё
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024