是否可能成为着色器干扰这种闪电?

时间:2014-11-06 08:39:59

标签: c++ opengl-es

我正在使用Opengl ES我有2个着色器相互干扰。我的意思是,如果我使用第二个着色器,闪电着色器会像往常一样停止工作,就像vbo上的法线被破坏一样。它只在我添加此着色器时发生:

    "#ifdef GL_ES                                   \n" //00
"precision mediump float;           \n" //01
"#else                                              \n" //02
"#version   100                                 \n" //03
"precision mediump float;           \n" //04
"#endif 
                                        \n" //05
"//ProgressBarShader\n"
"uniform float iGlobalTime;   \n" //06
"varying vec34 v_position;          \n"
"varying vec2 v_texCoord;           \n" //07
"uniform sampler2D s_texture;   \n" //11

"void main() {\n"                                   //1
" float igt=((iGlobalTime*15.0)+(sin(iGlobalTime)*25.0)); \n"
" if (gl_FragCoord.x>(1024.0-igt)) \n"                                                      
"   gl_FragColor = texture2D( s_texture, v_texCoord ); " 
"}\n";

另一个是Per Fragment Shader从这个网站上获取的:http://www.lighthouse3d.com/tutorials/glsl-tutorial/point-light-per-pixel/ 但修改了opengl es 2.0(和我的输入)

    "#ifdef GL_ES                                   \n"
"precision mediump float;           \n"
"#else                                              \n"
"#version   100                                 \n"
"precision mediump float;           \n"
"#endif                                             \n"

"uniform float iGlobalTime;   \n"
"varying vec2 v_texCoord;           \n"
"varying vec4 v_normal;             \n"
"varying vec4 v_position;           \n"

"uniform sampler2D s_texture;   \n"                                                     
"uniform mat4 MVPMat;                   \n"
"uniform mat3 iMVPMat;              \n"
"uniform vec2 iResolution;    \n"
"uniform vec3 iMouse;                   \n"

"uniform vec4  objectMaterialEmission;    // Ecm   \n"
"uniform vec4  objectMaterialAmbient;     // Acm   \n"
"uniform vec4  objectMaterialDiffuse;     // Dcm   \n"
"uniform vec4  objectMaterialSpecular;    // Scm   \n"
"uniform float objectMaterialGlossiness;  // Gcm   \n"
"uniform float objectMaterialShininess;   // Srm   \n"

"uniform float lightStrength; \n"
"uniform vec4    lightAmbient; \n"
"uniform vec4    lightDiffuse; \n"
"uniform vec4    lightSpecular; \n"
"uniform vec3    lightPosition; \n"
"uniform vec3    lightSpotDirection; \n"
"uniform float lightSpotExponent; \n"
"uniform float lightSpotCutoff; // (range: [0.0,90.0], 180.0)\n"
"uniform float lightSpotCosCutoff; // (range: [1.0,0.0],-1.0)\n"
"uniform float lightConstantAttenuation; \n"
"uniform float lightLinearAttenuation; \n"
"uniform float lightQuadraticAttenuation;\n"

"uniform bool lightOn;        \n"

"varying vec3 N;\n"
"varying vec3 v;\n"
"void main (void)  \n"
"{  \n"
"   vec3 L = normalize(-lightPosition.xyz - v);   \n"
"   vec3 E = normalize(-v); // we are in Eye Coordinates, so EyePos is (0,0,0)  \n"
"   vec3 R = normalize(-reflect(L,N));  \n"

"   //calculate Ambient Term:  \n"
"   vec4 Iamb = lightAmbient;    \n"

"   // write Total Color:  \n"
"   vec4 textureColor   =   texture2D( s_texture, v_texCoord );                                                     \n"                                                                                                                 
"       vec4 color              =textureColor;              \n"         

"   //calculate Diffuse Term:  \n"
"   vec4 Idiff = lightDiffuse * max(dot(N,L), 0.0);\n"
"   Idiff = clamp(Idiff, 0.0, 1.0);     \n"


"   float distance      = length(lightPosition-v);                                                                              \n"
"   float attenuation = lightStrength/(lightConstantAttenuation+(distance*lightLinearAttenuation));\n"

"   gl_FragColor = clamp( color *(Idiff+Iamb)*attenuation,0.0,1.0);                                                         \n"
"       gl_FragColor.a = 1.0;"

"}\n";

如果我使用进度条着色器(第一个),我的闪电消失,只有一些面孔被启用。任何其他着色器工作正常,它只会在我添加进度条着色器时中断。

我研究了网络,但从未见过关于着色器相互干扰的事情。可能吗?我该怎么办?

1 个答案:

答案 0 :(得分:0)

最后,它是数据绑定失败,绑定要求着色器第一次激活(glUseProgram),绑定是正确的,但是当照明着色器出现时,程序活动是错误的,以及何时绑定到另一个。

对这个误导性问题感到抱歉。