void init() { glewExperimental = GL_TRUE; GLenum err = glewInit(); if (GLEW_OK != err) { std::cerr << "Error: " << glewGetErrorString(err) << std::endl; } else { if (GLEW_VERSION_3_3) { std::cout << "Driver supports OpenGL 3.3\nDetails:" << std::endl; std::cout << "Using GLEW " << glewGetString(GLEW_VERSION) << std::endl; std::cout << "Vendor: " << glGetString(GL_VENDOR) << std::endl; std::cout << "Renderer: " << glGetString(GL_RENDERER) << std::endl; std::cout << "Version: " << glGetString(GL_VERSION) << std::endl; std::cout << "GLSL: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl; } } // FIXME: GLEW Init causes "Invalid enumerant" OpenGL error! // Supressing it now as the pipeline seems working. GLenum error = glGetError(); if (GL_NO_ERROR != error) { // std::cout << "Error: " << gluErrorString(error) << std::endl; } fullscreenQuad = new Quad(); simpleShader = new Shader("../src/lab3/shaders/passthrough.vert", "../src/lab3/shaders/simple.frag"); gaussShader = new Shader("../src/lab3/shaders/passthrough.vert", "../src/lab3/shaders/gauss.frag"); gaussShaderH = new Shader("../src/lab3/shaders/passthrough.vert", "../src/lab3/shaders/gaussH.frag"); gaussShaderV = new Shader("../src/lab3/shaders/passthrough.vert", "../src/lab3/shaders/gaussV.frag"); WE_addForce = new Shader("../src/lab3/shaders/passthrough.vert", "../src/lab3/shaders/addForce.frag"); WE_iteration_1 = new Shader("../src/lab3/shaders/passthrough.vert", "../src/lab3/shaders/iteration.frag"); WE_iteration_2 = new Shader("../src/lab3/shaders/passthrough.vert", "../src/lab3/shaders/iteration2.frag"); WE_iteration_3 = new Shader("../src/lab3/shaders/passthrough.vert", "../src/lab3/shaders/iteration3.frag"); WE_visualize = new Shader("../src/lab3/shaders/passthrough.vert", "../src/lab3/shaders/visualize.frag"); texture = new Texture2D(); texture->loadFromFile(std::string("../img/lena.jpg")); if (1 == example) { glutReshapeWindow(texture->getWidth(), texture->getHeight()); } computeBuffer[0] = new Framebuffer(texture->getWidth(), texture->getHeight(), 1); computeBuffer[1] = new Framebuffer(texture->getWidth(), texture->getHeight(), 1); WE_computeBuffer[0] = new Framebuffer(600, 600, 1); WE_computeBuffer[1] = new Framebuffer(600, 600, 1); resetWave(); addForce(300, 300); }
void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; case '1': example = 1; break; case '2': example = 2; break; case '3': example = 3; break; case '4': example = 4; break; case '5': example = 5; break; case '6': example = 6; break; case '+': npasses += 1; break; case '-': npasses = MAX(npasses - 1, 1); break; case ' ': resetWave(); break; default: std::cout << "Unbinded key: " << (unsigned int) key << std::endl; } inputBuffer = 0; glutPostRedisplay(); }
bool RDHPIRecordStream::recordReady() { HW16 hpi_error=0; char hpi_text[200]; if(debug) { printf("RDHPIRecordStream: received recordReady()\n"); } if(!is_open) { return false; } if((!is_recording)&&(!is_paused)) { resetWave(); if(HPI_InStreamGetInfoEx(hpi_subsys,hpi_stream, &state,&buffer_size,&data_recorded, &samples_recorded,&reserved)!=0) { if(debug) { printf("RDHPIRecordStream: HPI_InStreamGetInfoEx() failed\n"); } return false; } fragment_size=buffer_size/4; if(fragment_size>192000) { // ALSA Compatibility Limitation fragment_size=192000; } fragment_time=(1000*fragment_size)/(getAvgBytesPerSec()); if(pdata!=NULL) { delete pdata; } pdata=(HW8 *)malloc(fragment_size); if(pdata==NULL) { if(debug) { printf("RDHPIRecordStream: couldn't allocate buffer\n"); } return false; } switch(getFormatTag()) { case WAVE_FORMAT_PCM: if(debug) { printf("RDHPIRecordStream: using PCM%d format\n", getBitsPerSample()); } switch(getBitsPerSample()) { case 8: HPI_FormatCreate(&format,getChannels(), HPI_FORMAT_PCM8_UNSIGNED,getSamplesPerSec(), 0,0); break; case 16: HPI_FormatCreate(&format,getChannels(), HPI_FORMAT_PCM16_SIGNED,getSamplesPerSec(), 0,0); break; case 32: HPI_FormatCreate(&format,getChannels(), HPI_FORMAT_PCM32_SIGNED,getSamplesPerSec(), 0,0); break; default: if(debug) { printf("RDHPIRecordStream: unsupported sample size\n"); } return false; } break; case WAVE_FORMAT_MPEG: if(debug) { printf("RDHPIRecordStream: using MPEG-1 Layer %d\n",getHeadLayer()); } switch(getHeadLayer()) { case 1: HPI_FormatCreate(&format,getChannels(), HPI_FORMAT_MPEG_L1,getSamplesPerSec(), getHeadBitRate(),getHeadFlags()); break; case 2: HPI_FormatCreate(&format,getChannels(), HPI_FORMAT_MPEG_L2,getSamplesPerSec(), getHeadBitRate(),getHeadFlags()); break; case 3: HPI_FormatCreate(&format,getChannels(), HPI_FORMAT_MPEG_L3,getSamplesPerSec(), getHeadBitRate(),getHeadFlags()); break; default: HPI_AdapterClose(hpi_subsys,card_number); if(debug) { printf("RDHPIRecordStream: invalid MPEG-1 layer\n"); } return false; } if(getMextChunk()) { setMextHomogenous(true); setMextPaddingUsed(false); setMextHackedBitRate(true); setMextFreeFormat(false); setMextFrameSize(144*getHeadBitRate()/getSamplesPerSec()); setMextAncillaryLength(5); setMextLeftEnergyPresent(true); if(getChannels()>1) { setMextRightEnergyPresent(true); } else { setMextRightEnergyPresent(false); } setMextPrivateDataPresent(false); } break; case WAVE_FORMAT_VORBIS: if(debug) { printf("RDHPIRecordStream: using OggVorbis\n"); } HPI_FormatCreate(&format,getChannels(), HPI_FORMAT_PCM16_SIGNED,getSamplesPerSec(), 0,0); break; default: if(debug) { printf("RDHPIRecordStream: invalid format tag\n"); } return false; break; } if((hpi_error=HPI_InStreamQueryFormat(hpi_subsys,hpi_stream, &format))!=0) { if(debug) { HPI_GetErrorText(hpi_error,hpi_text); printf("Num: %d\n",hpi_error); printf("RDHPIRecordStream: %s\n",hpi_text); } return false; } } #if HPI_VER < 0x00030500 HPI_DataCreate(&hpi_data,&format,pdata,fragment_size); #endif HPI_InStreamSetFormat(hpi_subsys,hpi_stream,&format); HPI_InStreamStart(hpi_subsys,hpi_stream); // clock->start(2*fragment_time/3); clock->start(100); is_ready=true; is_recording=false; is_paused=false; stopping=false; emit isStopped(false); emit ready(); emit stateChanged(card_number,stream_number,1); // RecordReady if(debug) { printf("RDHPIRecordStream: emitted isStopped(false)\n"); printf("RDHPIRecordStream: emitted ready()\n"); printf("RDHPIRecordStream: emitted stateChanged(%d,%d,RDHPIRecordStream::RecordReady)\n",card_number,stream_number); } return true; }
int main( int argc, char **argv ) { ChangeList::setReadWriteDefault(); osgInit(argc,argv); _main_thread = Thread::getCurrent(); _sync_barrier = Barrier::get("RenderBarrier"); QApplication::setColorSpec( QApplication::CustomColor ); QApplication a( argc, argv ); if(!QGLFormat::hasOpenGL()) { qWarning( "This system has no OpenGL support. Exiting." ); return -1; } _render_widget = new OpenSGWidget(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer | QGL::Rgba | QGL::DirectRendering)); NodePtr scene = makePlane(1.0, 1.0, 50, 50); MaterialChunkPtr matc = MaterialChunk::create(); beginEditCP(matc); matc->setAmbient(Color4f(0.3, 0.3, 0.3, 1.0)); matc->setDiffuse(Color4f(0.2, 0.2, 0.8, 1.0)); matc->setSpecular(Color4f(0.6, 0.6, 0.6, 1.0)); matc->setShininess(100); endEditCP(matc); ChunkMaterialPtr cmat = ChunkMaterial::create(); beginEditCP(cmat); cmat->addChunk(matc); endEditCP(cmat); _geo = GeometryPtr::dcast(scene->getCore()); beginEditCP(_geo); _geo->setDlistCache(false); _geo->setMaterial(cmat); endEditCP(_geo); initWave(); resetWave(); _render_widget->getManager()->setRoot(scene); _render_widget->getManager()->showAll(); _render_widget->getManager()->getNavigator()->setFrom(Pnt3f(1.0f, -1.0f, 1.0f)); _render_widget->getManager()->getNavigator()->setUp(Vec3f(0.0f, 0.0f, 1.0f)); _render_widget->show(); while(!_render_widget->isInitialized()) qApp->processEvents(); // The gl widget is initialized in the main thread! // Without the doneCurrent() the next makeCurrent() call in the render thread // doesn't work because qt thinks that the context is already current but this // was in the main thread ... _render_widget->doneCurrent(); // start render thread _render_thread = dynamic_cast<Thread *>(ThreadManager::the()->getThread("RenderThread")); _render_thread->runFunction(renderThread, 1, NULL); // main loop while(!_quit) { mainThread(); // sync _sync_barrier->enter(2); if(_do_quit) _quit = true; _sync_barrier->enter(2); _main_thread->getChangeList()->clearAll(); qApp->processEvents(); } Thread::join(_render_thread); return 0; }