#include "system.h" static GLTexture* renderTarget = 0; static DebugPanel* debugPanel = 0; static Shader* shader = 0; static CUDAModule* module = 0; static CUDAKernel* kernel; Timer timer; void HostApp::Init() { // prepare render target renderTarget = new GLTexture( SCRWIDTH, SCRHEIGHT, GLTexture::FLOAT ); // load post processing shader shader = new Shader( "shaders/vignette.vert", "shaders/vignette.frag" ); // load cuda kernel module = new CUDAModule( "programs/program.cu", 63, "programs/program.h", "shared.h" ); module->LinkSurfaceToTexture( "outputSurface", renderTarget ); kernel = new CUDAKernel( module, "testFunction" ); kernel->SetBlockSize( 32, 4 ); kernel->SetGridSize( SCRWIDTH, SCRHEIGHT ); // prepare timer timer.init(); timer.reset(); // prepare debug panel debugPanel = new DebugPanel( -0.975f, -0.8f, -0.4f, -0.95f ); } void HostApp::Tick() { // wait for OpenGL glFinish(); // execute GPU code timer.reset(); kernel->Launch( renderTarget ); float duration = timer.elapsed(); // render using shader shader->Bind(); shader->SetInputTexture( 0, "color", renderTarget ); shader->SetInputMatrix( "view", mat4::Identity() ); DrawQuad(); // render debug surface debugPanel->Clear(); char t[128]; sprintf( t, "kernel time: %5.2fms", duration ); debugPanel->Print( t, 2, 2, 0xffffffff ); debugPanel->Present(); } void HostApp::Shutdown() { delete renderTarget; delete debugPanel; delete shader; delete kernel; delete module; } // EOF