Логичный вопрос: что делать?
Отправлено ZONER 24-10-2008 в 12:05:
Я конечно этим компилятром никогда не пользовался. Но если перевести с английского, она жалуется, что у тебя не определена программа, которая должна быть откомпилена.
__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)
Отправлено Government-Man 24-10-2008 в 12:15:
ZONER гениально!!! 
Ku2zoff может надо имя файла перед параметрами писать? )
Отправлено Ku2zoff 24-10-2008 в 12:29:
Government-Man не помогает. Тут похоже дело в коде шейдера.
Отправлено ZONER 24-10-2008 в 12:46:
Я могу открыть темку на форуме developer.nvidia.com по твоему вопросу. Может быть там ответ у кого-нибудь выудим.
З.Ы.
А там в документации по компилятору ничего не написано, что надо вписывать имя функции, исходя из которой код компилится? А то в HLSL компиляторе была такая фигня...
__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)
Отправлено Ku2zoff 24-10-2008 в 13:41:
ZONER я ничего никогда не понимаю в документациях. Сколько не ищу, найти не могу. Для меня лучше всего "живой пример" 
Отправлено ZONER 24-10-2008 в 14:46:
Короче я нашел выход из создавшейся поблемы. пишешь так:
cgc.exe -profile <профиль> -entry <имя основной функции> -o <здесь имя исходного кода и не более!>
Пример:
cgc.exe -profile arbfp1 -entry main_fp -o main.cg
Ветку дискусси этой проблемы можешь найти здесь: http://developer.nvidia.com/forums/...tart=#entry6300
__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)
Отправлено Ku2zoff 24-10-2008 в 15:09:
ZONER как только я увидел параметр -entry main_fp до меня дошло. Что надо было писать не FragmentProgram(это имя функции просто для примера, а имя функции, шо присутствует в шейдере, т.е. просто main)
Cg Pixel Shader:
5 | float2 tex0 : TEXCOORD0; |
6 | float2 tex1 : TEXCOORD1; |
7 | float2 tex2 : TEXCOORD2; |
8 | float2 tex3 : TEXCOORD3; |
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) |
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; |
29 | float4 avg1 = (col1 + col2) / 2.0f; |
30 | float4 avg2 = (col3 + col4) / 2.0f; |
32 | fout.col = avg1 + avg2; |
Отправлено ZONER 24-10-2008 в 15:13:
А что на счет компиляции? Откомпилировалось? Просто мне самому интересно
__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)
Отправлено Ku2zoff 24-10-2008 в 15:18:
Откомпилировалось. Вышеуказанный шейдер теперь выглядит вот так:
C++ Source Code:
2 | PARAM c[1] = { { 0.125, 0.875, 0.5 } }; |
6 | TEX R1, fragment.texcoord[3], texture[3], RECT; |
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; |
12 | TEX R0, fragment.texcoord[0], texture[0], RECT; |
13 | MAD R0, R0, c[0].x, R1; |
15 | MUL result.color, R0, c[0].z; |
Отправлено ZONER 24-10-2008 в 15:27:
Хотя бы одному человеку помог с проблемой
Если что понадобится еще, можешь в аську мне стучать.
__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)
Отправлено Ku2zoff 24-10-2008 в 16:50:
Шейдеры скомпилированы. Осталась малнькая неувязочка. ЦГшные функции нужно полностью убрать. Но им нужна альтернатива. Чем их заменить?
C++ Source Code:
cgGLSetStateMatrixParameter |
Вроде бы пока всё.
Отправлено ZONER 24-10-2008 в 17:18:
а ты можешь собственные написать. Вот, например как у меня было, когда я писал собственный движок:
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); |
6 | void GLShader::sendVec4(const String &name, const Vec4 &value) { |
7 | GLint param = glGetUniformLocationARB(program, name.c_str()); |
8 | glUniform4fvARB(param, 1, value); |
11 | void GLShader::sendVec3(const String &name, const Vec3 &value) { |
12 | GLint param = glGetUniformLocationARB(program, name.c_str()); |
13 | glUniform3fvARB(param, 1, value); |
16 | void GLShader::sendVec2(const String &name, const Vec2 &value) { |
17 | GLint param = glGetUniformLocationARB(program, name.c_str()); |
18 | glUniform2fvARB(param, 1, value); |
21 | void GLShader::sendFloat(const String &name, float value) { |
22 | int param = glGetUniformLocationARB(program, name.c_str()); |
23 | glUniform1fARB(param, value); |
26 | void GLShader::sendInt(const String &name, int value) { |
27 | int param = glGetUniformLocationARB(program, name.c_str()); |
28 | glUniform1iARB(param, value); |
Это пример написания, если ты пишешь шейеры на языке GLSL.
Не совсем уверен, но может быть и для ассемблерных шейдеров подойдет.
Если надо то могу все функции описать, что да как работает.
__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)
Отправлено Ku2zoff 24-10-2008 в 17:35:
Нет, похоже зелен ещё я для таких дел. С использованием ЦГ у нас имеется 2 строчки:
C++ Source Code:
cgGLBindProgram(g_cgVP_GlowBlur); |
cgGLBindProgram(g_cgFP_GlowBlur); |
А после отключения ЦГ их количество удвоилось:
C++ Source Code:
1 | glBindProgramARB(GL_VERTEX_PROGRAM_ARB, vp_glow_blur); |
2 | glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, fp_glow_blur); |
4 | glProgramStringARB( GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ARB, sizeof(vp_glow_blur_source)-1, vp_glow_blur_source); |
5 | glProgramStringARB( GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, sizeof(fp_glow_blur_source)-1, fp_glow_blur_source); |
Наверное, я что-то не так делаю. У меня не так уж много опыта в OpenGL.
Отправлено ZONER 24-10-2008 в 17:40:
Да и у меня особо опыта мало... Пока еще здесь нет Ксаерокса, будем сами решать эту задачу.
А какие у тебя ошибки вылезли? Может я смогу помочь тебе
__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)
Отправлено Ku2zoff 24-10-2008 в 18:58:
ZONER ошибок нет, за исключением тех, что вызваны "несуществующими" функциями, которые я выше упомянул. Я закомментировал их, всё скомпилилось без ошибок. Результат - огромные тормоза и отсутствие нужного граф. эффекта. Тут нужна помощь знающего человека.
Отправлено ZONER 25-10-2008 в 12:51:
Не отоборажется потому что шейдер тока загружен. А никаких действий над ним ты не выполняешь. После загрузки надо бы отправить шейдеру значения параметров, если они есть. А потом отправить этот шейдер в буфер кадра, где он выводится на экран.
__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)
Отправлено XaeroX 27-10-2008 в 10:12:
Цитата:
Ku2zoff писал:
А после отключения ЦГ их количество удвоилось:
Ну и нормально, для этапа загрузки. На этапе рисования так же две строчки будет. В чем вопрос?
Цитата:
ZONER писал:
А потом отправить этот шейдер в буфер кадра, где он выводится на экран.
Шейдер не выводится на экран, и в буфер кадра не отправляется.
Шейдер - это программа.
Параметры надо биндить по индексам, а индексы - расставить вручную, например так:
uniform float3 LightPos: C0
Тогда это будет параметр с индексом 0, и его можно привязать через glBindUniformParameter.
А вообще смотри сорцы Ксаша, там все есть.__________________
Отправлено ZONER 28-10-2008 в 19:50:
XaeroX ну извини уж, что если не правильно что-то написал... Я и имел ввиду, что все параметры биндятся по индексам, а индексы вручную.
З.Ы.
А вот разве не в буффер кадра все отпраляется потом? Просто, когда я юзал Директ, там после бинда и получения параметров шейдера, а так же установки значений парамеров - результат отправляется в буффер кадра, а там на рендеринг.
З.З.Ы.
Надо еще ксаш посмотреть, может быть пойму схему рендернга OpenGL после него.
__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)
Отправлено XaeroX 28-10-2008 в 21:00:
Цитата:
ZONER писал:
результат отправляется в буффер кадра, а там на рендеринг.
Буфер кадра - это конечный этап работы конвейера. Не ограничивая общности, можно сказать, что это то, что ты видишь на экране. Шейдеры вообще никуда не отправляются и сидят в видеопамяти, а при бинде загружаются на шейдерный процессор (в Unified shader model) или на вершинный/фрагментный процессор (в старых видеокартах с разделением процессоров). А вот результат работы шейдера, разумеется, в конечном итоге попадает (или не попадает - помним про команду KIL) в буфер кадра.
Добавлено 29-10-2008 в 03:00:
Кстати, я, возможно, соврал в именах функций - не факт, что есть такая, glBindUniformParameter. Кажется, она все же называется glProgramParameter. Последнее время работаю только с Cg и уже позабыл порядком низкоуровневый апи 
__________________
Отправлено ZONER 29-10-2008 в 19:30:
XaeroX отдельно спасибо, что немного напомнил мне, а то я чуть подзабыл после лета про прогаммирование графики. Сейчас вспоминать начал.
Меня в общем другой вопрос мучал, хотя его в отдельную тему выносить надо...
Тут полазил по книге по OpenGL. Нашел тока вот эти функции glUniformARB - задает значение переменной и glGetUniformARB - возвращает значение переменной(по индексу заданным пользователем), glGetActiveUniformARB - возвращает активное значение перменной( по индексу)...
glProgramParameter ща поищем
__________________
Сложно обьяснить, проще сделать (C) (_-=Zheka=-_)
Отправлено XaeroX 29-10-2008 в 21:16:
ZONER это вроде как функции расширений GLSL, а я про функции ARB_vertex_program/ARB_fragment_program.
__________________
Отправлено (_-=ZhekA=-_) 02-11-2008 в 18:12:
Ku2zoff
Выложи если не трудно
glow_darken_fp.cg
glow_blur_fp.cg
glow_combine_fp.cg
glow_darken_vp.cg
glow_blur_vp.cg
glow_combine_vp.cg
__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.
http://button.moddb.com/download/medium/125531.png
Отправлено Ku2zoff 03-11-2008 в 11:09:
Вотъ
Изменённые, от самого гуру FiEctro 
Отправлено (_-=ZhekA=-_) 03-11-2008 в 22:59:
Ku2zoff
Cпасибо )
А какая консольная команда ? И в какой папке должны находить эти файлы и сама папка ? 
__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.
http://button.moddb.com/download/medium/125531.png
Отправлено FiEctro 04-11-2008 в 08:49:
Ku2zoff
Хотя бы спросил, прежде чем выкладывать на публику
.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено (_-=ZhekA=-_) 06-11-2008 в 10:56:
Цитата:
FiEctro писал:
Хотя бы спросил, прежде чем выкладывать на публику .
Ты бы лучше сказалбы про это
Цитата:
(_-=ZhekA=-_) писал:
А какая консольная команда ? И в какой папке должны находить эти файлы и сама папка ?
А не катил болоны )__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.
http://button.moddb.com/download/medium/125531.png