예제 #1
0
int
Engine::init(void)
{
	int i;
	this->x_res = 1920;
	this->y_res = 1080;
	this->fov = 70;
	this->z_near = 0.01;
	this->z_far = 100;
	if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
		return (sdlError(0));
	this->window = SDL_CreateWindow("Pouet",
									SDL_WINDOWPOS_UNDEFINED,
									SDL_WINDOWPOS_UNDEFINED,
									this->x_res,
									this->y_res,
									SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
	if (this->window == NULL)
		return (sdlError(0));
	if (!(this->context = SDL_GL_CreateContext(this->window)))
		return (sdlError(0));
	this->camera = new Camera();
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(this->fov, (double)this->x_res / (double)this->y_res, this->z_near, this->z_far);

	glEnable(GL_DEPTH_TEST);

	glPointSize(16);
	glEnable(GL_POINT_SMOOTH);
	glEnable(GL_BLEND);
	glShadeModel(GL_SMOOTH);

	// Vertex reader
	glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, this->vertex_tab);

	initLight();
	this->moving = false;

	// Generate and print points
	makeCube(0.4);
	makeWTF(PARTY_START, PARTY_SIZE);
	printArray(0, 336);
	return (0);
}
예제 #2
0
RGBAPI bool rgb_open(const char *fn) {
#if !SDL_VERSION_ATLEAST(2,0,0)
    const SDL_VideoInfo *vi;
#endif
    (void)fn;

    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        sdlError("initializing SDL");
        return false;
    }

#if !SDL_VERSION_ATLEAST(2,0,0)
    vi = SDL_GetVideoInfo();
    if (vi != NULL) {
        nativewidth = vi->current_w;
        nativeheight = vi->current_h;
    }
#endif

    return screen_init(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
예제 #3
0
static bool screen_init(unsigned int newwidth, unsigned int newheight) {
#if SDL_VERSION_ATLEAST(2,0,0)
    window = SDL_CreateWindow(TITLE,
                              SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
                              newwidth, newheight,
                              newwidth ? SDL_WINDOW_RESIZABLE :
                                         SDL_WINDOW_FULLSCREEN_DESKTOP);
    if (window) {
        renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    }
    if (!window || !renderer)
#else
    Uint32 flags = SDL_HWSURFACE;
    if (newwidth == 0) {
        if (screen && !fullscreen) {
            winwidth = screen->w;
            winheight = screen->h;
        }
        newwidth = nativewidth;
        newheight = nativeheight;
        flags |= SDL_FULLSCREEN;
        fullscreen = true;
    } else {
        flags |= SDL_RESIZABLE;
        fullscreen = false;
    }

    screen = SDL_SetVideoMode(newwidth, newheight, 0, flags);
    SDL_WM_SetCaption(TITLE, TITLE);
    if (!screen)
#endif
    {
        sdlError("setting video mode");
        return false;
    } else {
        return redraw();
    }
}
예제 #4
0
static bool pollevents(void) {
    SDL_Event event;
    while (SDL_PollEvent(&event) > 0) {
        switch (event.type) {
#if SDL_VERSION_ATLEAST(2,0,0)
        case SDL_WINDOWEVENT:
            if (event.window.event == SDL_WINDOWEVENT_EXPOSED) {
                if (!redraw()) return false;
            }
            break;
#else
        case SDL_VIDEOEXPOSE:
            if (!redraw()) return false;
            break;
        case SDL_VIDEORESIZE:
            if (screen->w != (event.resize.w) ||
                screen->h != (event.resize.h)) {
                if (!screen_init(event.resize.w, event.resize.h)) return false;
            }
            break;
#endif
        case SDL_MOUSEBUTTONDOWN:
            if (event.button.button == SDL_BUTTON_LEFT
#if SDL_VERSION_ATLEAST(2,0,2)
                 && event.button.clicks == 2
#endif
                ) {
                bool res;
                if (!fullscreen) {
#if SDL_VERSION_ATLEAST(2,0,0)
                    res = !SDL_SetWindowFullscreen(window,
                                                   SDL_WINDOW_FULLSCREEN_DESKTOP);
                    fullscreen = true;
#else
                    res = screen_init(0, 0);
#endif
                } else {
#if SDL_VERSION_ATLEAST(2,0,0)
                    res = !SDL_SetWindowFullscreen(window, 0);
                    fullscreen = false;
#else
                    res = screen_init(winwidth, winheight);
#endif
                }
                if (!res) {
                    sdlError("toggling full screen size");
                    return false;
                }
            }
            break;
        case SDL_QUIT:
            return false;
            break;

        default:
            break;
        }
    }

    return true;
}