我的桌面上有AMD GPU,AMD HD 5770。 我在桌面上工作了一年多。在场景中,我实例化了草和实例树。一切都在桌面上正常工作,应该如此。
我最近将我的代码复制到了我的笔记本电脑,它有nVidia GPU。 这是问题,草是完美的渲染,但当涉及到树木时,它们会在同一个位置渲染,即(0,0,0,0)。 因此,例如,如果我想在不同的位置渲染10棵树,在AMD上它们会在各自的位置渲染,但在nVidia上它们都会在原点渲染。
以下是我确定的事情是正确的 -
*首先我检查了位置是否正确生成,答案是肯定的。
*我检查了我设置的布局位置是否正确
*我确保glVertexAttribPointer的参数是正确的。
*我确保将数据发送到正确的布局变量。
*安装'新鲜'nVidia驱动程序。
以下是实例化和着色器的代码。
//setting up the instanced buffer.
glBindBuffer(GL_ARRAY_BUFFER, iVBO);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glVertexAttribDivisor(0 ,1);
顶点着色器 -
mat4 m, m1;
m = m4_model;
vec4 pos = in_model_v4instancedPositions;
//translate..
m1[0] = vec4(i_scale, 0.0, 0.0, 0.0);
m1[1] = vec4(0.0, i_scale, 0.0, 0.0);
m1[2] = vec4(0.0, 0.0, i_scale, 0.0);
m1[3] = vec4(pos.x, pos.y, pos.z, 1.0);
m*=m1;
mat4 mv = m4_view * m;
//mat4 light_mvp = u_bias_proj_view_matrix *get_shadow_model();
light_vertex_position = u_m4MVP_light * vec4(in_model_v3Position,1.0);
vs_lightPosition=vec3(u_m4lightMatrix*vec4(uv3inLightPosition,1.0));
vs_model_v2UV = in_model_v2UV;
vs_out.texcoord = vs_model_v2UV;
vs_model_v3Normal = normalize(u_m3NormalMatrix * in_model_v3Normal);
vs_model_v3Tangent = u_m3NormalMatrix * in_model_v3Tangent;
vs_model_v3Color = in_model_v3Color;
vs_model_v3Position= in_model_v3Position;
gl_Position = m4_projection * mv * (vec4(in_model_v3Position,1.0));
我在这里没有想法,因为相同的代码在AMD上完全正常。