Робус Гробус Опубликовано 30 мая, 2012 Жалоба Поделиться Опубликовано 30 мая, 2012 Пишу OpenGL проект на Qt. Запилил шейдеры причём два фрагментных и два вершинных шейдера в программу линкуются. На NVIDIA всё путём, а на AMD получаю сабж. Пожалуйста, помогите разобраться с этим. Если надо могу выложить .cpp файлы (а их очень много).#define lowp#define mediump#define highpvarying vec3 NORM;varying vec3 POS;uniform int M_L;void SpotLight(in int i, in bool b, inout vec4 amb, inout vec4 dif, inout vec4 spec){vec3 n = b?NORM:-NORM;vec3 eye = -normalize(POS.xyz);float nDotVP, nDotHV, pf, spotDot, spotAttenuation, attenuation, d;vec3 VP, halfVector;VP = vec3(gl_LightSource.position)-POS;d = length(VP);VP = normalize(VP);attenuation = 1.0 / (gl_LightSource.constantAttenuation+gl_LightSource.linearAttenuation*d+gl_LightSource.quadraticAttenuation*d*d);spotDot = dot(-VP, gl_LightSource.spotDirection);if(spotDot spotAttenuation = 0.0;else spotAttenuation = pow(spotDot, gl_LightSource.spotExponent);attenuation *= spotAttenuation;halfVector = normalize(VP+eye);nDotVP = max(0.0, dot(n, VP));nDotHV = max(0.0, dot(n, halfVector));if(nDotVP==0.0) pf = 0.0;else pf = pow(nDotHV, gl_FrontMaterial.shininess);amb += gl_LightSource.ambient;dif += gl_LightSource.diffuse*nDotVP*attenuation;spec += gl_LightSource.specular*pf*attenuation;}vec4 NEON_LIGHTING_COLOR(){vec4 amb = vec4(0.0);vec4 diff = vec4(0.0);vec4 spec = vec4(0.0);for(int i=0; i SpotLight(i, gl_FrontFacing, amb, diff, spec);vec4 col = gl_FrontLightModelProduct.sceneColor + amb * gl_FrontMaterial.ambient + diff * gl_FrontMaterial.diffuse;col += spec * gl_FrontMaterial.specular;col.a = 1.0;return col;}vec4 light_color = NEON_LIGHTING_COLOR();#define lowp#define mediump#define highpvec4 light_color;varying vec3 POS;void main(void){ gl_FragColor=gl_Color; gl_FragColor.x*=abs(normalize(POS).x)*1.5; gl_FragColor.y*=abs(normalize(POS).y)*1.5; gl_FragColor.z*=abs(normalize(POS).z)*1.5;gl_FragColor*=light_color;}#define lowp#define mediump#define highpvec3 fp=ftransform().xyz;vec3 tnormal=gl_Normal;#define lowp#define mediump#define highpvarying vec3 POS;varying vec3 NORM;vec3 fp;vec3 tnormal;void main(void){ gl_Position=ftransform(); gl_FrontColor=gl_Color;POS=fp;NORM=tnormal;}Vertex_main_log:{}Vertex_lighting_log:{}Fragment_main_log:{}Fragment_lighting_log:{}ShaderProram_log:{Fragment shader(s) failed to link, Vertex shader(s) linked.Fragment Shader not supported by HWWARNING: warning(#276) Symbol 'NORM' usage doesn't match between two stages} Ссылка на комментарий
Робус Гробус Опубликовано 1 июля, 2012 Автор Жалоба Поделиться Опубликовано 1 июля, 2012 Уже решил проблему. Всё заработало. Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти