#include #include #include 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); }