#include #include #include #include #include #include typedef struct { mgl_texture *texture; } Userdata; static void draw(mgl_window *window, void *userdata) { Userdata *u = userdata; glBegin(GL_QUADS); glColor3f(1., 0., 0.); glVertex3f(-.75, -.75, 0.); glColor3f(0., 1., 0.); glVertex3f( .75, -.75, 0.); glColor3f(0., 0., 1.); glVertex3f( .75, .75, 0.); glColor3f(1., 1., 0.); glVertex3f(-.75, .75, 0.); glEnd(); glBegin(GL_QUADS); glColor4f(1., 0., 0., 0.5); glVertex3f(0.1 + -.75, 0.1 + -.75, 0.); glColor4f(1., 0., 0., 0.5); glVertex3f(0.1 + .75, 0.1 + -.75, 0.); glColor4f(1., 0., 0., 0.5); glVertex3f(0.1 + .75, 0.1 + .75, 0.); glColor4f(1., 0., 0., 0.5); glVertex3f(0.1 + -.75, 0.1 + .75, 0.); glEnd(); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glBindTexture(GL_TEXTURE_2D, u->texture->id); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f + 0.1f, -1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f + 0.1f, -1.0f + 0.1f, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, -1.0f + 0.1f, 0.0f); glEnd(); glBindTexture(GL_TEXTURE_2D, 0); } int main(int argc, char **argv) { if(mgl_init() != 0) return 1; mgl_texture texture; Userdata userdata; userdata.texture = &texture; mgl_window_callback window_callback; window_callback.userdata = &userdata; window_callback.draw = draw; mgl_window window; if(mgl_window_create(&window, "mgl", 1280, 720, &window_callback) != 0) return 1; if(mgl_texture_load_from_file(&texture, "X11.png") != 0) return 1; for(;;) { mgl_window_events_poll(&window); mgl_window_draw(&window); } mgl_texture_unload(&texture); mgl_window_deinit(&window); mgl_deinit(); return 0; }