Example #1
0
int main(int argc, char *argv[])
{
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window* displayWindow = SDL_CreateWindow("", 100, 100, 800, 600, SDL_WINDOW_OPENGL);

	SDL_GL_CreateContext(displayWindow);   
    Display_InitGL();
    Display_SetViewport(800, 600);
	Display_Render(displayWindow);
    SDL_Delay(2000);
    SDL_Quit();
    return 0;
}
Example #2
0
		OpenGLWindow::OpenGLWindow(int width, int height)
		{
			SDL_Init(SDL_INIT_VIDEO);

			// Ask for OpenGL 3.2 context
			SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
			SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
			SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);

			SDL_RendererInfo displayRendererInfo;
			SDL_CreateWindowAndRenderer(width, height, SDL_WINDOW_OPENGL, &displayWindow, &displayRenderer);
			SDL_GLContext glContext = SDL_GL_CreateContext(displayWindow);
			SDL_GetRendererInfo(displayRenderer, &displayRendererInfo);

			// Check that we have OpenGL
			glewExperimental = GL_TRUE;
			GLenum err = glewInit();
			if (GLEW_OK != err)
			{
				fprintf(stdout, "Error: %s\n", glewGetErrorString(err));
			}
			fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));

			if (glewIsSupported("GL_VERSION_3_2")) {
				fprintf(stdout, "OpenGl 3.2 supported.\n");
			}

			if ((displayRendererInfo.flags & SDL_RENDERER_ACCELERATED) == 0 ||
				(displayRendererInfo.flags & SDL_RENDERER_TARGETTEXTURE) == 0) {
				/*TODO: Handle this. We have no render surface and not accelerated. */
			}

			while ((err = glGetError()) != GL_NO_ERROR) {
				std::cerr << err;
			}

			Display_InitGL();

			while ((err = glGetError()) != GL_NO_ERROR) {
				std::cerr << err;
			}

			Display_SetViewport(width, height);

			while ((err = glGetError()) != GL_NO_ERROR) {
				std::cerr << err;
			}

		}
Example #3
0
int main(int argc, char* argv[])
{
    SDL_Init(SDL_INIT_VIDEO);
    SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
    SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 8);
    SDL_CreateWindowAndRenderer(1920, 1200, SDL_WINDOW_OPENGL, &displayWindow, &displayRenderer);
    SDL_GetRendererInfo(displayRenderer, &displayRendererInfo);

    Display_InitGL();
    Display_SetViewport(1920, 1200);

    bool quit = false;

    for(int i = 0; i < NUM_MOTORS; i++)
    {
        motors[i].setAngle(180);
    }

    while(!quit)
    {

        SDL_Event event;

        while(SDL_PollEvent(&event))
        {

            switch(event.type)
            {
                case SDL_QUIT:
                {
                    quit = true;
                    break;
                }

                case SDL_MOUSEBUTTONDOWN:
                {
                    if(event.button.button == SDL_BUTTON_LEFT)
                    {
                        if(zoomed == -1)
                        {
                            int x = event.motion.x / 192;
                            int y = event.motion.y / 109;
                            zoomed = x + y * 10;
                            printf("p:%f,i:%f,d:%f\t\tovershoot:%f steady_error:%f\n", motors[zoomed].getP(), motors[zoomed].getI(), motors[zoomed].getD(), motors[zoomed].getOverShoot(), motors[zoomed].getSteadyState());
                        }
                        else
                        {
                            zoomed = -1;
                        }

                    }

                    break;
                }

            }
        }

        const unsigned char* state = SDL_GetKeyboardState(0);

        if(state[SDL_SCANCODE_ESCAPE])
        {
            quit = true;
        }

        static bool space_held = false;

        if(state[SDL_SCANCODE_SPACE] && !space_held)
        {
            space_held = true;
            sortMotors();
            breedMotors();
        }
        else if(state[SDL_SCANCODE_SPACE] != true)
        {
            space_held = false;
        }

        SDL_GetMouseState(&mouse_x, &mouse_y);

        long now = SDL_GetTicks();
        static long last = now;
        deltatime = ((float)(now - last)) / 1000.0;
        last = now;
        abstime += deltatime;
        static float lastsetTime = abstime + 0.2;

        if(abstime >= lastsetTime)
        {
            lastsetTime = abstime + 0.2;

            if(zoomed == -1)
            {
                sortMotors();
                breedMotors();
                planner.motors[0].setPid(motors[0].getP(), motors[0].getI(), motors[0].getD());
                planner.motors[1].setPid(motors[0].getP(), motors[0].getI(), motors[0].getD());
            }

        }


        static float kp = 3;
        static float ki = 0.5;
        static float kd = 0.5;

        if(state[SDL_SCANCODE_U])
        {
            kp += deltatime;
        }

        if(state[SDL_SCANCODE_J])
        {
            kp -= deltatime;

            if(kp < 0)
            {
                kp = 0;
            }
        }

        if(state[SDL_SCANCODE_I])
        {
            ki += deltatime;
        }

        if(state[SDL_SCANCODE_K])
        {
            ki -= deltatime;

            if(ki < 0)
            {
                ki = 0;
            }
        }

        if(state[SDL_SCANCODE_O])
        {
            kd += deltatime;
        }

        if(state[SDL_SCANCODE_L])
        {
            kd -= deltatime;

            if(kd < 0)
            {
                kd = 0;
            }
        }


        if(zoomed == -1)
        {
            #pragma omp parallel
            #pragma omp for

            for(int i = 0; i < NUM_MOTORS; i++)
            {
                for(int k = 0; k < 10000; k++)
                {

                    motors[i].update(deltatime);
                }
            }
        }
        else
        {
            float angle = motors[zoomed].getAngle();

            if(state[SDL_SCANCODE_LEFT])
            {
                angle += deltatime * 20;
                motors[zoomed].setAngle(angle, false);
            }

            if(state[SDL_SCANCODE_RIGHT])
            {
                angle -= deltatime * 20;
                motors[zoomed].setAngle(angle, false);
            }

            motors[zoomed].update(deltatime, 0.05);
        }

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, 1920  , 1200, 0 , -100, 100);
        glMatrixMode(GL_MODELVIEW);

        Display_Render();
        SDL_RenderPresent(displayRenderer);
    }

    SDL_Quit();
    return 0;
}
Example #4
0
int main(int argc, char *argv[])
{

	SDL_Window *window;	// Declare a pointer, main window
	GLfloat dx = 0;
	GLfloat dy = 0;
	GLfloat zoom = 1.0;
	min_x = 0;
	max_x = width;
	min_y = 0;
	max_y = height;

	// Initialize SDL2
	if (SDL_Init(SDL_INIT_VIDEO) != 0) {
		fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
		exit(EXIT_FAILURE);
	}
	// Create an application window with the following settings:
	window = SDL_CreateWindow("Drawing - OpenGL",	// window title
				  SDL_WINDOWPOS_UNDEFINED,	// initial x position
				  SDL_WINDOWPOS_UNDEFINED,	// initial y position
				  width,	// width, in pixels
				  height,	// height, in pixels
				  SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE	// flags
	    );

	// Check that the window was successfully created
	if (window == NULL) {
		// In the case that the window could not be made...
		fprintf(stderr, "SDL_CreateWindow failed: %s\n",
			SDL_GetError());
		exit(EXIT_FAILURE);
	}

	SDL_Renderer *displayRenderer = NULL;
	SDL_RendererInfo displayRendererInfo;
	displayRenderer =
	    SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
	SDL_GetRendererInfo(displayRenderer, &displayRendererInfo);
	if ((displayRendererInfo.flags & SDL_RENDERER_ACCELERATED) == 0 ||
	    (displayRendererInfo.flags & SDL_RENDERER_TARGETTEXTURE) == 0) {
		fprintf(stderr,
			"We have no render surface and not accelerated.\n");
	}

	Display_InitGL();

	Display_SetViewport(width, height, dx, dy, zoom);

	int fullscreen = 0;
	int drag = 0;
	int xcursor = 0;
	int ycursor = 0;
	SDL_Event event;
	int quit = 0;
	time_t t = time(NULL);
	time_t ctime = time(NULL);
	int frames = 0;
	Display_Render(displayRenderer, width, height, dx, dy, zoom);
	while (!quit) {
		Display_SetViewport(width, height, dx, dy, zoom);
		Display_Render(displayRenderer, width, height, dx, dy, zoom);
		while (SDL_PollEvent(&event))	// User's actions
		{
			switch (event.type) {
			case SDL_QUIT:	// Close button
				quit = 1;
				break;
			case SDL_KEYUP:	// Key release
				if (event.key.keysym.sym == SDLK_f)	// F key
				{
					if (fullscreen == 0) {
						fullscreen = 1;
						SDL_SetWindowFullscreen(window,
									SDL_WINDOW_FULLSCREEN);
					} else if (fullscreen == 1) {
						fullscreen = 0;
						SDL_SetWindowFullscreen(window,
									0);
					}
				}
				if (event.key.keysym.sym == SDLK_KP_PLUS) {
					if (zoom > 0.1) {
						dx = dx +
						    0.1 * pixelsize * (xcursor -
								       width /
								       2);
						dy = dy -
						    0.1 * pixelsize * (ycursor -
								       height /
								       2);
					}
					if (zoom > 0.1)
						zoom -= 0.1;
				}
				if (event.key.keysym.sym == SDLK_KP_MINUS) {
					dx = dx - 0.1 * pixelsize * (xcursor -
								     width / 2);
					dy = dy + 0.1 * pixelsize * (ycursor -
								     height /
								     2);
					zoom += 0.1;
				}
				if (event.key.keysym.sym == SDLK_r) {
					zoom = 1.0;
					dx = 0.0;
					dy = 0.0;
				}
				break;
			case SDL_WINDOWEVENT:
				switch (event.window.event) {
				case SDL_WINDOWEVENT_RESIZED:
					width = event.window.data1;
					height = event.window.data2;
					break;
				case SDL_WINDOWEVENT_SIZE_CHANGED:
					width = event.window.data1;
					height = event.window.data2;
					break;
				default:
					// printf("Window %d got unknown event %d\n", event.window.windowID, event.window.event);
					break;
				}
				break;
			case SDL_MOUSEBUTTONDOWN:
				if (event.button.button == SDL_BUTTON_LEFT)
					drag = 1;
				break;
			case SDL_MOUSEBUTTONUP:
				if (event.button.button == SDL_BUTTON_LEFT)
					drag = 0;
				break;
			case SDL_MOUSEMOTION:
				xcursor = event.motion.x;
				ycursor = event.motion.y;
				if (drag != 0) {
					dx -=
					    pixelsize * event.motion.xrel *
					    zoom;
					dy +=
					    pixelsize * event.motion.yrel *
					    zoom;
				}
				break;
			case SDL_MOUSEWHEEL:
				if (zoom > 0.03) {
					dx = dx +
					    0.03 * pixelsize * event.wheel.y *
					    (xcursor - width / 2);
					dy = dy -
					    0.03 * pixelsize * event.wheel.y *
					    (ycursor - height / 2);
				}
				if (event.wheel.y > 0 && zoom > 0.01)
					zoom -= 0.03;
				else if (event.wheel.y < 0)
					zoom += 0.03;
				break;
			default:
				//printf("unknown event");
				break;
			}
		}
		frames++;
		ctime = time(NULL);
		if (t != ctime) {
			t = ctime;
			fprintf(stdout, "%d fps\n", frames);
			frames = 0;
		}
	}

	// Close and destroy the window
	SDL_DestroyWindow(window);

	// Clean up
	SDL_Quit();

	return EXIT_SUCCESS;

}
Example #5
0
File: ui.c Project: XAMEUS/CPROJ6
int Display_Application(int argc, char *argv[])
{

	SDL_Window *window;	// Declare a pointer, main window
	int width = 640;
	int height = 480;
	GLdouble dx = 0;
	GLdouble dy = 0;
	GLdouble zoom = 1.0;

	initNodesBounds(argv[1]);

	min_x = minx;
	max_x = maxx;
	min_y = miny;
	max_y = maxy;

	// Initialize SDL2
	if (SDL_Init(SDL_INIT_VIDEO) != 0) {
		fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError());
		exit(EXIT_FAILURE);
	}
	// Create an application window with the following settings:
	window = SDL_CreateWindow("OSM Renderer",	// window title
				  SDL_WINDOWPOS_UNDEFINED,	// initial x position
				  SDL_WINDOWPOS_UNDEFINED,	// initial y position
				  width,	// width, in pixels
				  height,	// height, in pixels
				  SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE	// flags
	    );

	// Check that the window was successfully created
	if (window == NULL) {
		// In the case that the window could not be made...
		fprintf(stderr, "SDL_CreateWindow failed: %s\n",
			SDL_GetError());
		exit(EXIT_FAILURE);
	}

	fprintf(stdout, "Press the 'F' key to switch fullscreen.\n");
	fprintf(stdout, "Press the 'R' key to reset the view.\n");
	fprintf(stdout, "Press the [x] button to close the window.\n");

	SDL_Renderer *displayRenderer = NULL;
	SDL_RendererInfo displayRendererInfo;
	displayRenderer =
	    SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
	SDL_GetRendererInfo(displayRenderer, &displayRendererInfo);
	if ((displayRendererInfo.flags & SDL_RENDERER_ACCELERATED) == 0 ||
	    (displayRendererInfo.flags & SDL_RENDERER_TARGETTEXTURE) == 0) {
		fprintf(stderr,
			"We have no render surface and not accelerated.\n");
	}

	Display_InitGL();

	Display_SetViewport(width, height, dx, dy, zoom);

	int fullscreen = 0;
	int drag = 0;
	int xcursor = 0;
	int ycursor = 0;
	SDL_Event event;
	int quit = 0;
	time_t t = time(NULL);
	time_t ctime = time(NULL);
	int frames = 0;

	GList *l;

	for (l = g_hash_table_get_values(ways_hashtable); l != NULL;
	     l = l->next) {
		way *w = l->data;
		w->glist = tessellate(*w);
	}

	g_list_free(l);

	while (!quit) {
		Display_SetViewport(width, height, dx, dy, zoom);
		Display_Render(displayRenderer, width, height, dx, dy, zoom);
		while (SDL_PollEvent(&event))	// User's actions
		{
			switch (event.type) {
			case SDL_QUIT:	// Close button
				quit = 1;
				break;
			case SDL_KEYUP:	// Key release
				if (event.key.keysym.sym == SDLK_f)	// F key
				{
					if (fullscreen == 0) {
						fullscreen = 1;
						SDL_SetWindowFullscreen(window,
									SDL_WINDOW_FULLSCREEN);
					} else if (fullscreen == 1) {
						fullscreen = 0;
						SDL_SetWindowFullscreen(window,
									0);
					}
				}
				if (event.key.keysym.sym == SDLK_KP_PLUS) {
					if (zoom > 0.1) {
						dx = dx +
						    0.1 * pixelsize * (xcursor -
								       width /
								       2);
						dy = dy -
						    0.1 * pixelsize * (ycursor -
								       height /
								       2);
					}
					if (zoom > 0.1)
						zoom -= 0.1;
				}
				if (event.key.keysym.sym == SDLK_KP_MINUS) {
					dx = dx - 0.1 * pixelsize * (xcursor -
								     width / 2);
					dy = dy + 0.1 * pixelsize * (ycursor -
								     height /
								     2);
					zoom += 0.1;
				}
				if (event.key.keysym.sym == SDLK_r) {
					zoom = 1.0;
					dx = 0.0;
					dy = 0.0;
				}
				if (event.key.keysym.sym == SDLK_s) {
					if (showFrame)
						showFrame = 0;
					else
						showFrame = 1;
				}
				if (event.key.keysym.sym == SDLK_c) {
					screenshoot = 1;
				}
				if (event.key.keysym.sym == SDLK_p) {
					projection = !projection;
					if (projection) {
						min_x = minx;
						max_x = maxx;
						min_y = miny;
						max_y = maxy;
					} else {
						min_x = minlon;
						max_x = maxlon;
						min_y = minlat;
						max_y = maxlat;
					}
				}
				break;
			case SDL_WINDOWEVENT:
				switch (event.window.event) {
				case SDL_WINDOWEVENT_RESIZED:
					width = event.window.data1;
					height = event.window.data2;
					break;
				case SDL_WINDOWEVENT_SIZE_CHANGED:
					width = event.window.data1;
					height = event.window.data2;
					break;
				default:
					// printf("Window %d got unknown event %d\n", event.window.windowID, event.window.event);
					break;
				}
				break;
			case SDL_MOUSEBUTTONDOWN:
				if (event.button.button == SDL_BUTTON_LEFT)
					drag = 1;
				break;
			case SDL_MOUSEBUTTONUP:
				if (event.button.button == SDL_BUTTON_LEFT)
					drag = 0;
				break;
			case SDL_MOUSEMOTION:
				xcursor = event.motion.x;
				ycursor = event.motion.y;
				if (drag != 0) {
					dx -=
					    pixelsize * event.motion.xrel *
					    zoom;
					dy +=
					    pixelsize * event.motion.yrel *
					    zoom;
				}
				break;
			case SDL_MOUSEWHEEL:
				if (zoom > 0.01) {
					dx = dx +
					    0.02 * pixelsize * event.wheel.y *
					    (xcursor - width / 2);
					dy = dy -
					    0.02 * pixelsize * event.wheel.y *
					    (ycursor - height / 2);
				}
				if (event.wheel.y > 0 && zoom > 0.01)
					zoom -= 0.02;
				else if (event.wheel.y < 0)
					zoom += 0.02;
				break;
			default:
				//printf("unknown event");
				break;
			}
		}
		frames++;
		ctime = time(NULL);
		if (t != ctime) {
			t = ctime;
			//fprintf(stdout, "%d fps\n", frames);
			frames = 0;
		}
	}

	// Close and destroy the window
	SDL_DestroyWindow(window);

	// Clean up
	SDL_Quit();

	return EXIT_SUCCESS;
}