It`s my two small class.
.h
class ShaderCompile
{
public:
GLuint Compile();
private:
GLuint vertex_shader;
GLuint fragment_shader;
GLuint shader;
const GLchar * vertex_shader_source
{
"#version 450 core \n"
" \n"
"void main(void) \n"
"{ \n"
" gl_Position = vec4(0.0, 0.0, 0.5, 1.0); \n"
"} \n"
};
const GLchar * fragment_shader_source
{
"#version 450 core \n"
" \n"
"out vec4 color; \n"
" \n"
"void main(void) \n"
"{ \n"
" color = vec4(0.0, 0.8, 1.0, 1.0); \n"
"} \n"
};
};
.cpp
GLuint ShaderCompile::Compile()
{
const GLchar * proxy_shader[1];
proxy_shader[0] = vertex_shader_source;
vertex_shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex_shader, 1, proxy_shader, NULL);
glCompileShader(vertex_shader);
proxy_shader[0] = fragment_shader_source;
fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment_shader, 1, proxy_shader, NULL);
glCompileShader(fragment_shader);
shader = glCreateProgram();
glAttachShader(shader, vertex_shader);
glAttachShader(shader, fragment_shader);
glLinkProgram(shader);
glDeleteShader(vertex_shader);
glDeleteShader(fragment_shader);
auto status = GL_LINK_STATUS;
auto error = glGetError();
auto comp = GL_COMPILE_STATUS;
GLint linked = 0;
glGetProgramiv(shader, GL_LINK_STATUS, &linked);
if (!linked) return 0;
return shader;
}
and
.h
class Shaders
{
public:
void Startup();
void Shutdown();
void Render();
private:
ShaderCompile * compiler;
GLuint rendering_program;
GLuint vertex_array_object;
};
.cpp
void Shaders::Startup()
{
compiler = new ShaderCompile();
rendering_program = compiler->Compile();
glCreateVertexArrays(1, &vertex_array_object);
glBindVertexArray(vertex_array_object);
}
void Shaders::Shutdown()
{
glDeleteVertexArrays(1, &vertex_array_object);
glDeleteProgram(rendering_program);
delete compiler;
}
void Shaders::Render()
{
const GLfloat color[] { 0.0, 0.8, 1.0, 1.0 };
glClearBufferfv(GL_COLOR, 0, color);
glUseProgram(rendering_program);
glDrawArrays(GL_POINTS, 0, 1);
glPointSize(100.0f);
}
I call this on click button event
void GLCore::ClickOk()
{
sh = new Shaders();
sh->Startup();
sh->Render();
}
and SwapBuffers on paint form event
void GLCore::SwapBuffer()
{
SwapBuffers(m_Hdc);
}
Why dont draw point? glDrawArrays(GL_POINTS, 0, 1);