static bool glwindow(char* title, int width, int height, int bits, bool fsflag,int frequency)
{
	if ((SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1)) {
		handleerror(NULL,"Could not initialize SDL.","ERROR",MBF_OK|MBF_EXCL);
		return false;
	}

	// Sets window manager properties
	SDL_WM_SetIcon(SDL_LoadBMP("spring.bmp"),NULL);
	SDL_WM_SetCaption(title, title);

	int sdlflags = SDL_OPENGL | SDL_RESIZABLE;

	conditionally_set_flag(sdlflags, SDL_FULLSCREEN, fsflag);
	
	// FIXME: Might want to set color and depth sizes, too  -- johannes
	SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);

	FSAA = MultisampleTest();

	screen = SDL_SetVideoMode(width,height,bits,sdlflags);
	if (!screen) {
		handleerror(NULL,"Could not set video mode","ERROR",MBF_OK|MBF_EXCL);
		return false;
	}
	if (FSAA)
		FSAA = MultisampleVerify();
	
	setupgl();
	resizescene(screen->w,screen->h);

	return true;
}
Exemple #2
0
int main() {

    if( !setupgl() ) {
        return 1;
    }

    // 
    mesh<solid_cube> vao[100];

    for( auto &v : vao ) {
        int r = 10 + (rand() % 245);
        int g = 10 + (rand() % 245);
        int b = 10 + (rand() % 245);
        v.data.setup( color3f(r/255.f,g/255.f,b/255.f) );
        v.tf.position = glm::vec3((r-127)/10,(g-127)/10,(b-127)/10);
        v.tf.update();
    }

    postfx fx( width, height );

    // :( 
    //fx.passes.push_back( new Pass("FxaaPass", "FxaaPass.fs" ) );
    //fx.passes.push_back( new Pass("LensPass", "LensPass.fs" ) );
    //fx.passes.push_back( new Pass("ScanlinesPass", "ScanlinesPass.fs" ) );
    //fx.passes.push_back( new Pass("GrainPass", "GrainPass.fs" ) );
    //fx.passes.push_back( new Pass("ToonPass", "ToonPass.fs", "ToonPass.vs" ) ); // no idea
    //fx.passes.push_back( new Pass("VignettePass", "VignettePass.fs" ) ); // gl_FragCoord
    //fx.passes.push_back( new Pass("PostPass", "PostPass.fs" ) ); // gl_FragCoord
    //fx.passes.push_back( new Pass("BarrelPass", "BarrelPass.fs" ) );
    //fx.passes.push_back( new Pass("BumpMappingUnparametrized", "BumpMappingUnparametrized.fs" ) );
    //fx.passes.push_back( new Pass("CRTPass", "CRTPass.fs" ) );
    //fx.passes.push_back( new Pass("DirtyOldTvPass", "DirtyOldTvPass.fs" ) );
    //fx.passes.push_back( new Pass("LensPass", "LensPass.fs" ) );
    //fx.passes.push_back( new Pass("SSAO2Pass", "SSAO2Pass.fs" ) );
    //fx.passes.push_back( new Pass("VCRPass", "VCRPass.fs" ) );
    // } 

    // :) {
    fx.passes.push_back( new Pass("BleachBypassPass", "BleachBypassPass.fs" ) );
    fx.passes.push_back( new Pass("ContrastPass", "ContrastPass.fs" ) );
    fx.passes.push_back( new Pass("DofAltPass", "DofAltPass.fs" ) );
    fx.passes.push_back( new Pass("DofPass", "DofPass.fs" ) );
    fx.passes.push_back( new Pass("EdgePass", "EdgePass.fs" ) );
    fx.passes.push_back( new Pass("FXAA3Pass", "FXAA3Pass.fs" ) );
    fx.passes.push_back( new Pass("HorizontalTiltShifPass", "HorizontalTiltShifPass.fs" ) );
    fx.passes.push_back( new Pass("KaleidoscopePass", "KaleidoscopePass.fs" ) );
    fx.passes.push_back( new Pass("LimbDarkeningPass", "LimbDarkeningPass.fs" ) );   
    fx.passes.push_back( new Pass("NoiseWarpPass", "NoiseWarpPass.fs" ) ); // :?
    fx.passes.push_back( new Pass("PixelatePass", "PixelatePass.fs" ) );
    fx.passes.push_back( new Pass("RGBShiftPass", "RGBShiftPass.fs" ) );
    fx.passes.push_back( new Pass("SSAOPass", "SSAOPass.fs" ) );
    fx.passes.push_back( new Pass("VerticalTiltShifPass", "VerticalTiltShifPass.fs" ) );
    fx.passes.push_back( new Pass("ZoomBlurPass", "ZoomBlurPass.fs" ) );
    // }

//:? fx.passes.push_back( new Pass("RimHighlightingPass", "RimHighlightingPass.fs", "RimHighlightingPass.vs" ) );
//:? fx.passes.push_back( new Pass("BloomPass", "2BloomPass.fs" ) );
//:? fx.passes.push_back( new Pass("ConvolutionPass", "2ConvolutionPass.fs" ) );
//:? fx.passes.push_back( new Pass("FakeSSSPass", "2FakeSSSPass.fs" ) );
//:? fx.passes.push_back( new Pass("GodRaysPass", "2GodRaysPass.fs" ) );
//:? fx.passes.push_back( new Pass("LUTPass", "2LUTPass.fs" ) );

    for( auto &pass : fx.passes ) {
        pass->enabled = false;
    }
    
    ::camera camera;

    bool enabled = false;
    bool keys[256] = {0};
    while( pollgl() ) {

        if(!eve::lock(60.f))
            continue;

        glfwSetWindowTitle(window, ( std::to_string(eve::get_fps()) + fx.list('/') ).c_str() );

        // get the time in seconds
        float t = glfwGetTime();

        // toggle fxaa on/off with space
#define KEY(X,CH,NUM) \
        if(glfwGetKey(window, X) && !keys[CH] && NUM < fx.passes.size() ) fx.passes[NUM]->enabled ^= true; \
        keys[CH] = glfwGetKey(window, X); 

        KEY(GLFW_KEY_1,'1',0);
        KEY(GLFW_KEY_2,'2',1);
        KEY(GLFW_KEY_3,'3',2);
        KEY(GLFW_KEY_4,'4',3);
        KEY(GLFW_KEY_5,'5',4);
        KEY(GLFW_KEY_6,'6',5);
        KEY(GLFW_KEY_7,'7',6);
        KEY(GLFW_KEY_8,'8',7);
        KEY(GLFW_KEY_9,'9',8);
        KEY(GLFW_KEY_0,'0',9);
        KEY(GLFW_KEY_Q,'q',10);
        KEY(GLFW_KEY_W,'w',11);
        KEY(GLFW_KEY_E,'e',12);
        KEY(GLFW_KEY_R,'r',13);
        KEY(GLFW_KEY_T,'t',14);
        KEY(GLFW_KEY_Y,'y',15);
        KEY(GLFW_KEY_U,'u',16);
        KEY(GLFW_KEY_I,'i',17);
        KEY(GLFW_KEY_O,'o',18);
        KEY(GLFW_KEY_P,'p',19);

        // update camera and set the uniform
        float sin_t = glm::radians(90.0f)*sin(t/10);
        camera.position = glm::vec3(0.0f, 0.0f, -1.0f);
        camera.rotation = glm::vec3( sin_t, 0, sin_t );
        camera.update();

        fx.process( [&]{
            // clear first
            glEnable(GL_DEPTH_TEST);
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

            // bind and draw the vao
            for( auto &v : vao ) {
                v.draw(camera);           
            }
        });

        // check for errors
        GLenum error = glGetError();
        if(error != GL_NO_ERROR) {
            std::cerr << "GLError:" << error << std::endl;
            break;
        }

        // finally swap buffers
        swapgl();
    }

    quitgl();
    return 0;
}
Exemple #3
0
int setupgl() {
    return setupgl( 640, 480 );
}