Сообщения на форуме пользователя Andrey (44 стр.)
Раскрытие циклов в Cg | 20 авг. 2010 | 14:24 | #35 |
---|
innuendo
да. Вообще X600 карта а не X300
да. Вообще X600 карта а не X300
Раскрытие циклов в Cg | 20 авг. 2010 | 12:31 | #33 |
---|
innuendo
драйвер как раз свежий.
драйвер как раз свежий.
Раскрытие циклов в Cg | 20 авг. 2010 | 12:08 | #31 |
---|
innuendo
Не могу. Нету карты той. И ничего ты не сможешь по логу понять. Еще раз - причина не пишется.
Не могу. Нету карты той. И ничего ты не сможешь по логу понять. Еще раз - причина не пишется.
Раскрытие циклов в Cg | 20 авг. 2010 | 11:57 | #29 |
---|
innuendo
>пустой infoLog что-ли ?
еще раз: Пишет не могу слинковать, что-то типа Failed to linked.
>пустой infoLog что-ли ?
еще раз: Пишет не могу слинковать, что-то типа Failed to linked.
Раскрытие циклов в Cg | 20 авг. 2010 | 11:49 | #27 |
---|
innuendo
ошибка линковки и все. Причины не указано. Хотя ошибки компиляции пишутся если что.
ошибка линковки и все. Причины не указано. Хотя ошибки компиляции пишутся если что.
Оптимизация софтового рендера. | 20 авг. 2010 | 11:25 | #9 |
---|
tmtlib
На C переписывай. Быстрей будет. FPS 18-46.
На C переписывай. Быстрей будет. FPS 18-46.
Раскрытие циклов в Cg | 20 авг. 2010 | 11:21 | #25 |
---|
innuendo
>и фрагментный компилился без ошибок ?
естественно.
>и фрагментный компилился без ошибок ?
естественно.
Раскрытие циклов в Cg | 20 авг. 2010 | 11:03 | #23 |
---|
innuendo
вершинный
пиксельный:
Если убирать PCF то все линкуется. Не занимался ни оптимизаций ни убиранием ветвлений, по крайней мере пару ветвлений можно убрать, Разбив на 2 шейдера и ставить их в зависимости от задачи. Не знаю верное ли это решение.
вершинный
#version 120 const int g_iNumSplits = 4; uniform mat4 lightMatrix[g_iNumSplits]; uniform mat4 cameraModelViewMatrixInverse; uniform vec3 lightdir1; varying vec4 vTexCoord[g_iNumSplits]; varying vec4 lpos; varying float lightShadows; varying vec2 texCoord; void main(void) { mat4 worldMatrix = cameraModelViewMatrixInverse * gl_ModelViewMatrix; vec4 vWorldPos = worldMatrix * gl_Vertex; lpos = gl_ModelViewProjectionMatrix * gl_Vertex; vTexCoord[0] = lightMatrix[0] * vWorldPos; vTexCoord[1] = lightMatrix[1] * vWorldPos; vTexCoord[2] = lightMatrix[2] * vWorldPos; vTexCoord[3] = lightMatrix[3] * vWorldPos; gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; //lightShadows = clamp(dot(lightdir1,normalize(mat3(worldMatrix) * gl_Normal) ), 0.0, 1.0); //max(dot( gl_Normal, lightdir1 ),0.0); mat3 world = mat3(worldMatrix[0].xyz, worldMatrix[1].xyz, worldMatrix[2].xyz); lightShadows = max(dot(lightdir1,normalize(world * gl_Normal)), 0.0); texCoord = gl_MultiTexCoord0.st; gl_FrontColor = gl_Color; } |
#version 120 const int g_iNumSplits = 4; uniform sampler2DShadow shadowMap[g_iNumSplits]; varying vec4 vTexCoord[g_iNumSplits]; varying vec4 lpos; varying float lightShadows; varying vec2 texCoord; uniform sampler2D texSampler; uniform float shadow_strength; uniform float split_planes[g_iNumSplits]; // This define the value to move one pixel left or right uniform float xPixelOffset ; // This define the value to move one pixel up or down uniform float yPixelOffset ; uniform int use_color; uniform int use_texture; uniform int use_lighting; float lookup( vec2 offSet) { return shadow2DProj(shadowMap[g_iNumSplits-4], vTexCoord[g_iNumSplits-4] + vec4(offSet.x*vTexCoord[g_iNumSplits-4].w*xPixelOffset, offSet.y*vTexCoord[g_iNumSplits-4].w*yPixelOffset, 0.0, 0.0) ).x; } float PCF_Filter() { float shadow = 0.0; shadow += lookup(vec2(-1.5,-1.5)); shadow += lookup(vec2(-0.5,-1.5)); shadow += lookup(vec2(0.5,-1.5)); shadow += lookup(vec2(1.5,-1.5)); shadow += lookup(vec2(-1.5,-0.5)); shadow += lookup(vec2(-0.5,-0.5)); shadow += lookup(vec2(0.5,-0.5)); shadow += lookup(vec2(1.5,-0.5)); shadow += lookup(vec2(-1.5,0.5)); shadow += lookup(vec2(-0.5,0.5)); shadow += lookup(vec2(0.5,0.5)); shadow += lookup(vec2(1.5,0.5)); shadow += lookup(vec2(-1.5,1.5)); shadow += lookup(vec2(-0.5,1.5)); shadow += lookup(vec2(0.5,1.5)); shadow += lookup(vec2(1.5,1.5)); return shadow*0.0625; } void main (void) { float shadow; if ( lpos.z < split_planes[g_iNumSplits-4] ) { shadow = PCF_Filter(); } else if ( lpos.z < split_planes[g_iNumSplits-3] ) { shadow = shadow2DProj(shadowMap[g_iNumSplits-3], vTexCoord[g_iNumSplits-3]).x; } else if ( lpos.z < split_planes[g_iNumSplits-2] ) { shadow = shadow2DProj(shadowMap[g_iNumSplits-2], vTexCoord[g_iNumSplits-2]).x; } else { shadow = shadow2DProj(shadowMap[g_iNumSplits-1], vTexCoord[g_iNumSplits-1]).x; } shadow = min(shadow + shadow_strength,1.0); vec4 color; if ( use_lighting != 0 ) { vec4 diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; vec4 ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; vec4 globalAmbient = gl_LightModel.ambient * gl_FrontMaterial.ambient; if ( use_color == 0 ) { color = ( lightShadows * shadow + ambient + globalAmbient ); } else { color = lightShadows * diffuse * shadow + ambient + globalAmbient; } } else { if ( use_color == 0 ) { color = vec4(shadow,shadow,shadow,1.0); } else { color = gl_FrontMaterial.ambient * shadow; } } color.w = gl_FrontMaterial.diffuse.w; if ( use_texture != 0 ) { vec4 texture = texture2D( texSampler, texCoord); color *= texture; } gl_FragColor = color; } |
Раскрытие циклов в Cg | 19 авг. 2010 | 23:58 | #20 |
---|
innuendo
> это glsl выхлоп от Cg ? тогда вопросов нету :)
нет это был шейдер на GLSL написанный другим человеком. На всех картах выше sm 2.0 он линковался.
> это glsl выхлоп от Cg ? тогда вопросов нету :)
нет это был шейдер на GLSL написанный другим человеком. На всех картах выше sm 2.0 он линковался.
SetRenderTarget, ошибка | 19 авг. 2010 | 18:46 | #3 |
---|
beetlewar
включай DX Debug на полный уровень, смотри Debug Output окно под отладчиком.
включай DX Debug на полный уровень, смотри Debug Output окно под отладчиком.
Раскрытие циклов в Cg | 19 авг. 2010 | 18:41 | #15 |
---|
innuendo
> странно, обычно сначала в таком случае не компилится
как раз написал что оба шейдеры скомпилированы успешно. А вот линковка не удалась, причины непонятны...
Убогая поддержка API :)
> странно, обычно сначала в таком случае не компилится
как раз написал что оба шейдеры скомпилированы успешно. А вот линковка не удалась, причины непонятны...
Убогая поддержка API :)
Раскрытие циклов в Cg | 19 авг. 2010 | 17:02 | #13 |
---|
innuendo
> а про циклы что посоветуешь ?
Вот тут я не спец... ATI вообще иногда выдает не информативный лог линковки GLSL шейдеров... Не линкуется и все. А причина не пишется. Столкнулся с такой ситуацией недавно Тоже было много кода в пиксельном шейдере X600 отказался линковать.
Igor'
> Тоесть сразу 2 компиляции за один шейдер? Толсто...
ну и что? зато универсально :) HLSL шейдера можно подсовывать.
> а про циклы что посоветуешь ?
Вот тут я не спец... ATI вообще иногда выдает не информативный лог линковки GLSL шейдеров... Не линкуется и все. А причина не пишется. Столкнулся с такой ситуацией недавно Тоже было много кода в пиксельном шейдере X600 отказался линковать.
Igor'
> Тоесть сразу 2 компиляции за один шейдер? Толсто...
ну и что? зато универсально :) HLSL шейдера можно подсовывать.
Раскрытие циклов в Cg | 19 авг. 2010 | 16:44 | #10 |
---|
Neptune
>При этом шейдер компилится, но как-то странно: код на Cg переводится в длиннющий код на GLSL, а с раньше получался код на ассемблере. Может его надо загружать как-то >хитро? Загрузка из файла через cgCreateProgramFromFile() проходит нормально, но cgGLLoadProgram() выдаёт вот эту ошибку.
>Раз уж на то пошло, не проще ли мне писать шейдеры сразу на GLSL? Cg ведь можно юзать для компиляции на ходу GLSL шейдеров? Или в чистом GLSL тоже есть возможность >рантайм компиляции плюс профили?
Забей на CgGL Run Time. Попробуй взять GLSL код используя cgGetProgramString(сgProgram, CG_COMPILED_PROGRAM);
Далее сам его компиль, линкуй. Если напрямую заработает значит глючит, Cg Run Time, на nVidia форуме нужно попинать разработчиков.
>При этом шейдер компилится, но как-то странно: код на Cg переводится в длиннющий код на GLSL, а с раньше получался код на ассемблере. Может его надо загружать как-то >хитро? Загрузка из файла через cgCreateProgramFromFile() проходит нормально, но cgGLLoadProgram() выдаёт вот эту ошибку.
>Раз уж на то пошло, не проще ли мне писать шейдеры сразу на GLSL? Cg ведь можно юзать для компиляции на ходу GLSL шейдеров? Или в чистом GLSL тоже есть возможность >рантайм компиляции плюс профили?
Забей на CgGL Run Time. Попробуй взять GLSL код используя cgGetProgramString(сgProgram, CG_COMPILED_PROGRAM);
Далее сам его компиль, линкуй. Если напрямую заработает значит глючит, Cg Run Time, на nVidia форуме нужно попинать разработчиков.
SetRenderTarget, ошибка | 19 авг. 2010 | 14:05 | #1 |
---|
beetlewar
>Есть какие-нибудь догадки, в чем может быть проблема?
DX Debug + DXGetErrorDescription
>Есть какие-нибудь догадки, в чем может быть проблема?
DX Debug + DXGetErrorDescription
Раскрытие циклов в Cg | 19 авг. 2010 | 10:42 | #6 |
---|
Neptune
>На opengl.org нашел пост о том, что ATI вообще ничего не поддерживают, кроме CG_PROFILE_ARBFP1
> Складывается ощущение, что надо переходить на GLSL или HLSL :(
Дай ссылку на пост, что за народ странный. Одно дело то что выдает Cg Run Time для удобства используемого профиля, другое дело то что поддерживается вообще. Выкинь функцию cgGLGetLatestProfile и не используй ее, смотрю она тупо путает разработчиков. Сейчас из профилей самый ходовой CG_PROFILE_GLSLV и CG_PROFILE_GLSLV так что на остальные можно забить уже давно, кроме конечно же еще более современных профилей типа геометрические шейдеры и т.д.
Делаешь так:
Теперь у тебя будет лучшей профиль для компиляции на любой видеокарте. Ну по крайней мере не ниже уровня SM 2.0 (минимум ATI 9550, nVidia FX 5200)
>На opengl.org нашел пост о том, что ATI вообще ничего не поддерживают, кроме CG_PROFILE_ARBFP1
> Складывается ощущение, что надо переходить на GLSL или HLSL :(
Дай ссылку на пост, что за народ странный. Одно дело то что выдает Cg Run Time для удобства используемого профиля, другое дело то что поддерживается вообще. Выкинь функцию cgGLGetLatestProfile и не используй ее, смотрю она тупо путает разработчиков. Сейчас из профилей самый ходовой CG_PROFILE_GLSLV и CG_PROFILE_GLSLV так что на остальные можно забить уже давно, кроме конечно же еще более современных профилей типа геометрические шейдеры и т.д.
Делаешь так:
CGprofile pixelProfile = CG_PROFILE_UNKNOWN; CGprofile vertexProfile = CG_PROFILE_UNKNOWN; if (cgIsProfileSupported(CG_PROFILE_GLSLV)) { vertexProfile = CG_PROFILE_GLSLV; } else if (cgIsProfileSupported(CG_PROFILE_ARBVP1)) { vertexProfile = CG_PROFILE_ARBVP1; } if (cgIsProfileSupported(CG_PROFILE_GLSLF)) { pixelProfile = CG_PROFILE_GLSLF; } else if (cgIsProfileSupported(CG_PROFILE_ARBFP1)) { pixelProfile = CG_PROFILE_ARBFP1; } // используем дальше pixelProfile и vertexProfile