oglplus-example/main.cc
2015-05-26 23:16:22 -04:00

97 lines
2.3 KiB
C++

#include <SDL.h>
#include <oglplus/gl.hpp>
#include <oglplus/all.hpp>
using namespace oglplus;
#define WIDTH 800
#define HEIGHT 600
static void init();
static void display(SDL_Window * window);
int main(int argc, char * argv[])
{
if (SDL_Init(SDL_INIT_VIDEO))
{
printf("Failed to initialize SDL!\n");
return 1;
}
atexit(SDL_Quit);
SDL_Window * window = SDL_CreateWindow("OGLplus example",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
WIDTH,
HEIGHT,
SDL_WINDOW_OPENGL);
if (!window)
{
printf("Failed to create window!\n");
SDL_Quit();
return 1;
}
SDL_GLContext gl_context = SDL_GL_CreateContext(window);
init();
display(window);
SDL_Event event;
while (SDL_WaitEvent(&event))
{
if (event.type == SDL_QUIT)
break;
else if (event.type == SDL_KEYDOWN)
{
if (event.key.keysym.sym == SDLK_ESCAPE)
break;
if (event.key.keysym.sym == SDLK_RETURN)
display(window);
}
}
return 0;
}
static void init()
{
VertexShader vs;
FragmentShader fs;
Program program;
VertexArray cube;
Buffer verts;
vs.Source("#version 330\n"
"uniform mat4 projection;\n"
"uniform mat4 modelview;\n"
"in vec4 position;\n"
"in vec3 normal;\n"
"in vec2 texture;\n"
"out vec3 normal_i;\n"
"out vec2 texture_i;\n"
"void main(void)\n"
"{\n"
" normal_i = normal;\n"
" texture_i = texture;\n"
" gl_Position = projection * modelview * position\n"
"}");
vs.Compile();
fs.Source("#version 330\n"
"in vec3 normal_i;\n"
"in vec2 texture_i;\n"
"out vec4 frag_color;\n"
"void main(void)\n"
"{\n"
" frag_color = vec4(texture_i, 1.0, 1.0);\n"
"}");
fs.Compile();
}
static void display(SDL_Window * window)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
SDL_GL_SwapWindow(window);
}