I’m trying to start a small project in OpenGL coming from D3D.
My machine runs windows vista, nvidia 9xxx series card (supports opengl 3.3 natively), latest bleeding edge whql drivers. The other machine I tried to test my application on has an ATI 5xxx series card (4.2 natively).
In my app, I just request a pixel format that enables the latest possible forward compatible format, on my machine, that’s ogl 3.3, and on his, it’s 4.2.
I don’t do anything fancy, it is simply a vertex array object with two vertex buffer objects, one for verticies, one for colors. It works perfect on my machine, and on his, the small square shape won’t appear. I know there are differences between ati and nVidia, but something so simple?
vertices[0] = -0.5; vertices[1] = -0.5; vertices[2] = -3.0;
vertices[3] = -0.5; vertices[4] = 0.5; vertices[5] = -3.0;
vertices[6] = 0.5; vertices[7] = 0.5; vertices[8] = -3.0;
vertices[9] = 0.5; vertices[10] = -0.5; vertices[11] = -3.0;
vertices[12] = -0.5; vertices[13] = -0.5; vertices[14] = -3.0;
vertices[15] = 0.5; vertices[16] = 0.5; vertices[17] = -3.0;
vertices[18] = -0.5; vertices[19] = -0.5; vertices[20] = -4.0;
vertices[21] = -0.5; vertices[22] = 0.5; vertices[23] = -4.0;
vertices[24] = -0.5; vertices[25] = 0.5; vertices[26] = -3.0;
vertices[27] = -0.5; vertices[28] = -0.5; vertices[29] = -3.0;
vertices[30] = -0.5; vertices[31] = -0.5; vertices[32] = -4.0;
vertices[33] = -0.5; vertices[34] = 0.5; vertices[35] = -3.0;
colors[0] = 0.0; colors[1] = 0.0; colors[2] = 0.0; colors[3] = 1.0;
colors[4] = 0.0; colors[5] = 0.0; colors[6] = 1.0; colors[7] = 1.0;
colors[8] = 0.0; colors[9] = 0.0; colors[10] = 1.0; colors[11] = 1.0;
colors[12] = 0.0; colors[13] = 0.0; colors[14] = 0.0; colors[15] = 1.0;
colors[16] = 0.0; colors[17] = 0.0; colors[18] = 0.0; colors[19] = 1.0;
colors[20] = 0.0; colors[21] = 0.0; colors[22] = 1.0; colors[23] = 1.0;
X77Shaders(); // This just init's the shaders, which on both machines compile+link with no errors
glBindAttribLocation(shaderhandle, 0, "in_Position");
glBindAttribLocation(shaderhandle, 1, "in_Color");
glGenBuffers(2, vbo);
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glBufferData(GL_ARRAY_BUFFER, 36 * sizeof(GLfloat), vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(vertexloc);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);
glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(GLfloat), colors, GL_STATIC_DRAW);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_TRUE, 0, 0);
glBindVertexArray(0);
the pre-render loop stuff:
glEnable(GL_DEPTH_TEST);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
/* enable OpenGL for the window */
EnableOpenGL(hwnd, &hDC, &hRC);
glViewport(0, 0, 640, 480);
glClearColor(0.0f, 0.0f, 0.2f, 0.0f);
glBindVertexArray(vao); //I never unbind this again until the program quits, so I don't put this in the loop
the render loop is just glClear(depth | color), and glDrawArrays(GL_TRIANGLES, 0, 12), as I’m drawing 4 triangles with 3 verticies each.
I check for errors during init, in the render loop, and while compiling+linking the shaders: there are no errors for either of us.
What gives?