dwscr/dwscr.cc
josh 68d41e9c63 moved files to trunk directory
git-svn-id: svn://anubis/dwscr/trunk@83 5bef9df8-b654-44bb-925b-0ff18baa8f8c
2008-09-22 17:27:40 +00:00

98 lines
2.4 KiB
C++

/* Author: Josh Holtrop
* DornerWorks screensaver
* This was a for-fun project I started working on in November '07
* because I like 3D graphics. I modeled the DornerWorks logo in
* blender, exported it to an Alias WaveFront object and material
* file, wrote an Alias Wavefront object loader, and then wrapped
* some OpenGL and ODE logic around it for various screensaver modes
*/
#include <iostream>
#include <string>
#include <SDL/SDL.h>
#include <SDL/SDL_syswm.h>
#include "displayinfo.h"
#include "ss/SSMain.h"
using namespace std;
#define PROGNAME "dwscr"
#define DEFAULT_WIDTH 1024
#define DEFAULT_HEIGHT 768
/* main function, called upon program invocation */
int main(int argc, char * argv[])
{
const string startString = "/s";
#ifdef WIN32
bool start = false;
#else
bool start = true;
#endif
SDL_Surface * sdlSurface;
int width = DEFAULT_WIDTH;
int height = DEFAULT_HEIGHT;
#ifdef DEBUG
start = true;
#endif
/* make the SDL window appear in the top-left corner of the screen */
putenv("SDL_VIDEO_WINDOW_POS=0,0");
/* do not disable power management (this will allow monitors
* to power off at the normally configured timeout) */
putenv("SDL_VIDEO_ALLOW_SCREENSAVER=1");
/* extremely simple command-line argument handling */
for (int i = 1; i < argc; i++)
{
if (startString == argv[i])
start = true;
}
if (!start)
return 0;
getDisplaySize(&width, &height);
/* initialize SDL library */
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER))
{
cerr << "Error initializing video!" << endl;
return -1;
}
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
/* Enable multisampling */
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);
if ((sdlSurface = SDL_SetVideoMode(width, height, 0,
SDL_HWSURFACE
#ifndef WINDOW_MODE
| SDL_NOFRAME
#endif
| SDL_OPENGL)) == NULL)
{
cerr << "Error setting video mode!" << endl;
return -2;
}
SDL_WM_SetCaption("dwscr", "dwscr");
#ifndef WINDOW_MODE
SDL_WM_GrabInput(SDL_GRAB_ON);
SDL_ShowCursor(SDL_DISABLE);
#endif
/* after our window is created and SDL and OpenGL are initialized,
* start the main screensaver functionality */
SSMain ss(width, height, getNumMonitors(), sdlSurface);
ss.run();
SDL_Quit();
return 0;
}