OpenGL,glDrawElementsInstanced在NVIDIA GPU上的表现与AMD不同

时间:2015-07-26 11:34:33

标签: c++ opengl shader

我的桌面上有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上完全正常。

0 个答案:

没有答案