Hello,
I am using OpenGL 3.2, OS X 10.8, and Xcode 4.6. I am using glfw for my window management. I am trying to draw a simple triangle using this tutorial:
open.gl
However, I don’t get a triangle – just a black screen. I get no shader compilation errors or language errors.
Here is my code:
float vertices[] = {
0.0f, 0.5f, // Vertex 1 (X, Y)
0.5f, -0.5f, // Vertex 2 (X, Y)
-0.5f, -0.5f // Vertex 3 (X, Y)
};
const char* vertexSource =
"#version 150
"
"in vec2 position;"
"in vec3 color;"
"out vec3 Color;"
"void main() {"
" Color = color;"
" gl_Position = vec4( position, 0.0, 1.0 );"
"}";
const char* fragmentSource =
"#version 150
"
"in vec3 Color;"
"out vec4 outColor;"
"void main() {"
" outColor = vec4( Color, 1.0 );"
"}";
int main(int argc, const char * argv[])
{
unsigned char didInit = glfwInit();
if (didInit == GL_FALSE){
printf("Failed to init glfw
");
exit(1);
}else{
printf("glfw was initiated
");
}
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE);
glfwOpenWindow(800, 600, 0, 0, 0, 0, 0, 0, GLFW_WINDOW);
glewExperimental = true;
unsigned char didGlewInit = glewInit();
if (didGlewInit == GLEW_OK) {
printf("glew is ready
");
}else{
printf("failed to init glew
");
}
glfwSetWindowTitle("simple-gl");
glfwEnable(GLFW_STICKY_KEYS);
GLuint vao;
glGenVertexArraysAPPLE(1, &vao);
glBindVertexArrayAPPLE(vao);
GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),vertices,GL_STATIC_DRAW);
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader,1,&vertexSource,NULL);
glCompileShader(vertexShader);
GLint status;
glGetShaderiv( vertexShader, GL_COMPILE_STATUS, &status );
if(!status){
char buffer[512];
glGetShaderInfoLog( vertexShader, 512, NULL, buffer );
std::cout << "Error occured" << std::endl;
}
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentSource,NULL);
glCompileShader(fragmentShader);
GLint otherStatus;
glGetShaderiv( fragmentShader, GL_COMPILE_STATUS, &otherStatus );
if(!otherStatus){
char buffer[512];
glGetShaderInfoLog( fragmentShader, 512, NULL, buffer );
std::cout << "Error occured" << std::endl;
}
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glBindFragDataLocation(shaderProgram,0, "outColor");
glLinkProgram(shaderProgram);
glUseProgram(shaderProgram);
GLint posAttrib = glGetAttribLocation(shaderProgram, "position");
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0,0);
glEnableVertexAttribArray(posAttrib);
while( glfwGetWindowParam( GLFW_OPENED ) )
{
//Drawing code here
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 3);
glfwSwapBuffers();
if (glfwGetKey(GLFW_KEY_ESC)==GLFW_PRESS) {
break;
}
}
return 0;
}
The code is fairly simple and I can’t find anything in the docs that makes my code incorrect.
If anyone could take a look at my code, that would be really great!
Thanks!