try this
// Link statically with GLEW
#define GLEW_STATIC
#include <GL/glew.h>
#include <SFML/Window.hpp>
//#include <SFML/OpenGL.hpp>
#include <iostream>
GLenum glCheckError_(const char *file, int line)
{
GLenum errorCode;
while ((errorCode = glGetError()) != GL_NO_ERROR)
{
std::string error;
switch (errorCode)
{
case GL_INVALID_ENUM: error = "INVALID_ENUM"; break;
case GL_INVALID_VALUE: error = "INVALID_VALUE"; break;
case GL_INVALID_OPERATION: error = "INVALID_OPERATION"; break;
case GL_STACK_OVERFLOW: error = "STACK_OVERFLOW"; break;
case GL_STACK_UNDERFLOW: error = "STACK_UNDERFLOW"; break;
case GL_OUT_OF_MEMORY: error = "OUT_OF_MEMORY"; break;
case GL_INVALID_FRAMEBUFFER_OPERATION: error = "INVALID_FRAMEBUFFER_OPERATION"; break;
}
std::cout << error << " | " << file << " (" << line << ")" << std::endl;
}
return errorCode;
}
#define glCheckError() glCheckError_(__FILE__, __LINE__)
int main()
{
sf::ContextSettings settings;
settings.majorVersion = 3;
settings.minorVersion = 2;
settings.attributeFlags = 1;
settings.depthBits = 24;
settings.stencilBits = 8;
settings.antialiasingLevel = 2;
sf::Window window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Titlebar | sf::Style::Close, settings);
window.setActive();
settings = window.getSettings();
std::cout << "version: " << settings.majorVersion << "." << settings.minorVersion << std::endl;
std::cout << "attributeFlags: " << settings.attributeFlags << std::endl;
std::cout << "depth bits: " << settings.depthBits << std::endl;
std::cout << "stencil bits: " << settings.stencilBits << std::endl;
std::cout << "antialiasing level: " << settings.antialiasingLevel << std::endl;
// Initialize GLEW
glewExperimental = GL_TRUE;
glewInit();
const GLchar* vertexSource = R"glsl(
#version 150 core
in vec2 position;
void main()
{
gl_Position = vec4(position, 0.0, 1.0);
}
)glsl";
const GLchar* fragmentSource = R"glsl(
#version 150 core
out vec4 outColor;
uniform vec3 triangleColor;
void main()
{
//outColor = vec4(triangleColor, 1.0);
outColor = vec4(1.0, 1.0, 1.0, 1.0);
}
)glsl";
GLfloat vertices[] = {
0.0f, 0.5f,
0.5f, -0.5f,
-0.5f, -0.5f
};
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glCheckError();
GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glCheckError();
GLuint vertexShader{glCreateShader(GL_VERTEX_SHADER)};
glShaderSource(vertexShader, 1, &vertexSource, nullptr);
glCompileShader(vertexShader);
glCheckError();
GLuint fragmentShader{glCreateShader(GL_FRAGMENT_SHADER)};
glShaderSource(fragmentShader, 1, &fragmentSource, nullptr);
glCompileShader(fragmentShader);
glCheckError();
GLuint shaderProgram{glCreateProgram()};
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glBindFragDataLocation(shaderProgram, 0, "outColor");
glLinkProgram(shaderProgram);
glUseProgram(shaderProgram);
glCheckError();
GLint posAttrib{glGetAttribLocation(shaderProgram, "position")};
glEnableVertexAttribArray(posAttrib);
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
glCheckError();
bool running{true};
while (running)
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
running = false;
else if (event.type == sf::Event::KeyPressed)
if (event.key.code == sf::Keyboard::Return)
running = false;
}
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 3);
glCheckError();
window.display();
}
glDeleteProgram(shaderProgram);
glDeleteShader(fragmentShader);
glDeleteShader(vertexShader);
glDeleteBuffers(1, &vbo);
glDeleteVertexArrays(1, &vao);
window.close();
}