33#include < SDL2/SDL.h>
44#include < SDL2/SDL_opengl.h>
55
6+ #include < GL/gl.h>
7+ #include < GL/glu.h>
8+
9+ enum PieceType {
10+ NO_PIECE, WHITE_PIECE, BLACK_PIECE
11+ }
612
713void initOpenGL () {
814 glEnable (GL_DEPTH_TEST);
915 glEnable (GL_TEXTURE_2D);
1016 glEnable (GL_BLEND);
1117 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
18+ glClearColor (1 .f , 1 .f , 1 .f , 1 .f );
1219}
1320
1421/* function to reset our viewport after a window resize */
15- int updateViewport ( int width, int height ) {
16- glViewport (0 , 0 , (GLsizei) w, (GLsizei) h );
22+ int updateViewport (int width, int height) {
23+ glViewport (0 , 0 , width, height );
1724 glMatrixMode (GL_PROJECTION);
1825 glLoadIdentity ();
19- gluOrtho2D (0 , 1 , 0 , 1 );
26+ gluOrtho2D (0 , 1 , 1 , 0 );
2027
2128 glMatrixMode (GL_MODELVIEW);
2229}
2330
31+ bool handleMouseButtonEvent (const SDL_MouseButtonEvent& event) {
32+ std::cout << " mouse click on " << event.x << " " << event.y << std::endl;
33+
34+ return true ;
35+ }
36+
37+ bool handleKeyboardEvent (const SDL_KeyboardEvent& event) {
38+ if (event.keysym .sym == SDLK_ESCAPE) {
39+ return false ;
40+ }
41+ // TODO: key-specific code
42+ return true ;
43+ }
44+
45+ bool handleQuitEvent (const SDL_QuitEvent& event) {
46+ return false ;
47+ }
48+
49+ // Returns true if the program should continue running, false if it should exit
50+ bool handleEvent (const SDL_Event& event) {
51+ switch (event.type ) {
52+ case SDL_MOUSEBUTTONDOWN:
53+ case SDL_MOUSEBUTTONUP:
54+ return handleMouseButtonEvent (event.button );
55+ case SDL_KEYUP:
56+ case SDL_KEYDOWN:
57+ return handleKeyboardEvent (event.key );
58+ case SDL_QUIT:
59+ return handleQuitEvent (event.quit );
60+ }
61+ return true ;
62+ }
63+
2464void render (SDL_Renderer* displayRenderer) {
65+ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
2566
67+ glBegin (GL_QUADS);
68+ glColor3f (1.0 , 0 ., 0 .);
69+ glVertex2d (0.0 , 0.0 );
70+ glVertex2d (0.0 , 0.5 );
71+ glVertex2d (0.5 , 0.5 );
72+ glVertex2d (0.5 , 0.0 );
73+ glEnd ();
2674
2775 SDL_RenderPresent (displayRenderer);
2876}
2977
3078
31- int
32- main (int argc, char *argv[])
33- {
79+ int main (int argc, char *argv[]) {
3480 SDL_Init (SDL_INIT_VIDEO);
3581 SDL_Window* displayWindow;
3682 SDL_Renderer* displayRenderer;
@@ -40,19 +86,25 @@ main(int argc, char *argv[])
4086 /* TODO: Check that we have OpenGL */
4187 if ((displayRendererInfo.flags & SDL_RENDERER_ACCELERATED) == 0 ||
4288 (displayRendererInfo.flags & SDL_RENDERER_TARGETTEXTURE) == 0 ) {
43- /* TODO: Handle this. We have no render surface and not accelerated. */
4489 std::cout << " Unable to create a window using accelerated graphics." << std::endl;
90+ return 0 ;
4591 }
4692
4793
4894 initOpenGL ();
4995
5096 updateViewport (800 , 600 );
5197
52- render (displayRenderer);
53-
98+ bool running = true ;
99+ while (running) {
100+ SDL_Event event;
101+ while (SDL_PollEvent (&event)) {
102+ running = handleEvent (event);
103+ }
104+ render (displayRenderer);
105+ SDL_Delay (100 );
106+ }
54107
55- SDL_Delay (5000 );
56108 SDL_Quit ();
57109
58110 return 0 ;
0 commit comments