int main(int argc, char *argv[]) { CGSDebugOptions options; CGSGetDebugOptions(&options); options ^= kCGSDebugOptionNoShadows; CGSSetDebugOptions(options); return 0; }
PsychError SCREENGetWindowInfo(void) { const char *FieldNames[]={ "Beamposition", "LastVBLTimeOfFlip", "LastVBLTime", "VBLCount", "TimeAtSwapRequest", "TimePostSwapRequest", "RawSwapTimeOfFlip", "VBLTimePostFlip", "OSSwapTimestamp", "GPULastFrameRenderTime", "StereoMode", "ImagingMode", "MultiSampling", "MissedDeadlines", "FlipCount", "StereoDrawBuffer", "GuesstimatedMemoryUsageMB", "VBLStartline", "VBLEndline", "VideoRefreshFromBeamposition", "GLVendor", "GLRenderer", "GLVersion", "GPUCoreId", "GLSupportsFBOUpToBpc", "GLSupportsBlendingUpToBpc", "GLSupportsTexturesUpToBpc", "GLSupportsFilteringUpToBpc", "GLSupportsPrecisionColors", "GLSupportsFP32Shading", "BitsPerColorComponent", "IsFullscreen", "SpecialFlags", "SwapGroup", "SwapBarrier" }; const int fieldCount = 35; PsychGenericScriptType *s; PsychWindowRecordType *windowRecord; double beamposition, lastvbl; int infoType = 0, retIntArg; double auxArg1, auxArg2, auxArg3; CGDirectDisplayID displayId; psych_uint64 postflip_vblcount; double vbl_startline; long scw, sch; psych_bool onscreen; //all subfunctions should have these two lines. PsychPushHelp(useString, synopsisString, seeAlsoString); if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);}; PsychErrorExit(PsychCapNumInputArgs(5)); //The maximum number of inputs PsychErrorExit(PsychRequireNumInputArgs(1)); //The required number of inputs PsychErrorExit(PsychCapNumOutputArgs(1)); //The maximum number of outputs // Query infoType flag: Defaults to zero. PsychCopyInIntegerArg(2, FALSE, &infoType); if (infoType < 0 || infoType > 5) PsychErrorExitMsg(PsychError_user, "Invalid 'infoType' argument specified! Valid are 0, 1, 2, 3, 4 and 5."); // Windowserver info requested? if (infoType == 2 || infoType == 3) { // Return info about WindowServer: #if PSYCH_SYSTEM == PSYCH_OSX const char *CoreGraphicsFieldNames[]={ "CGSFps", "CGSValue1", "CGSValue2", "CGSValue3", "CGSDebugOptions" }; const int CoreGraphicsFieldCount = 5; float cgsFPS, val1, val2, val3; // This (undocumented) Apple call retrieves information about performance statistics of // the Core graphics server, also known as WindowServer or Quartz compositor: CGSGetPerformanceData(_CGSDefaultConnection(), &cgsFPS, &val1, &val2, &val3); if (CGSGetDebugOptions(&retIntArg)) { if (PsychPrefStateGet_Verbosity() > 1) printf("PTB-WARNING: GetWindowInfo: Call to CGSGetDebugOptions() failed!\n"); } PsychAllocOutStructArray(1, FALSE, 1, CoreGraphicsFieldCount, CoreGraphicsFieldNames, &s); PsychSetStructArrayDoubleElement("CGSFps", 0 , cgsFPS, s); PsychSetStructArrayDoubleElement("CGSValue1", 0, val1, s); PsychSetStructArrayDoubleElement("CGSValue2", 0, val2, s); PsychSetStructArrayDoubleElement("CGSValue3", 0, val3, s); PsychSetStructArrayDoubleElement("CGSDebugOptions", 0, (double) retIntArg, s); if ( (infoType == 3) && PsychCopyInDoubleArg(3, FALSE, &auxArg1) ) { // Type 3 setup request with auxArg1 provided. Apple auxArg1 as debugFlag setting // for the CoreGraphics server: DANGEROUS! if (CGSSetDebugOptions((unsigned int) auxArg1)) { if (PsychPrefStateGet_Verbosity() > 1) printf("PTB-WARNING: GetWindowInfo: Call to CGSSetDebugOptions() failed!\n"); } } #endif #if PSYCH_SYSTEM == PSYCH_WINDOWS psych_uint64 onsetVBLCount, frameId; double onsetVBLTime, compositionRate; psych_uint64 targetVBL; PsychAllocInWindowRecordArg(kPsychUseDefaultArgPosition, TRUE, &windowRecord); // Query all DWM presentation timing info, return full info as struct in optional return argument '1': if (PsychOSGetPresentationTimingInfo(windowRecord, TRUE, 0, &onsetVBLCount, &onsetVBLTime, &frameId, &compositionRate, 1)) { // Query success: Info struct has been created and returned by PsychOSGetPresentationTimingInfo()... auxArg1 = auxArg2 = 0; auxArg3 = 2; // Want us to change settings? if ( (infoType == 3) && PsychCopyInDoubleArg(3, FALSE, &auxArg1) && PsychCopyInDoubleArg(4, FALSE, &auxArg2) && PsychCopyInDoubleArg(5, FALSE, &auxArg3)) { if (auxArg1 < 0) auxArg1 = 0; targetVBL = auxArg1; if (PsychOSSetPresentParameters(windowRecord, targetVBL, (int) auxArg3, auxArg2)) { if (PsychPrefStateGet_Verbosity() > 5) printf("PTB-DEBUG: GetWindowInfo: Call to PsychOSSetPresentParameters(%i, %i, %f) SUCCESS!\n", (int) auxArg1, (int) auxArg3, auxArg2); } else { if (PsychPrefStateGet_Verbosity() > 1) printf("PTB-WARNING: GetWindowInfo: Call to PsychOSSetPresentParameters() failed!\n"); } } } else { // Unsupported / Failed: PsychCopyOutDoubleArg(1, FALSE, -1); } #endif #if PSYCH_SYSTEM == PSYCH_LINUX if (infoType == 2) { // MMIO register Read for screenid "auxArg1", register offset "auxArg2": PsychCopyInDoubleArg(3, TRUE, &auxArg1); PsychCopyInDoubleArg(4, TRUE, &auxArg2); PsychCopyOutDoubleArg(1, FALSE, (double) PsychOSKDReadRegister((int) auxArg1, (unsigned int) auxArg2, NULL)); } if (infoType == 3) { // MMIO register Write for screenid "auxArg1", register offset "auxArg2", to value "auxArg3": PsychCopyInDoubleArg(3, TRUE, &auxArg1); PsychCopyInDoubleArg(4, TRUE, &auxArg2); PsychCopyInDoubleArg(5, TRUE, &auxArg3); PsychOSKDWriteRegister((int) auxArg1, (unsigned int) auxArg2, (unsigned int) auxArg3, NULL); } #endif // Done. return(PsychError_none); } // Get the window record: PsychAllocInWindowRecordArg(kPsychUseDefaultArgPosition, TRUE, &windowRecord); onscreen = PsychIsOnscreenWindow(windowRecord); if (onscreen) { // Query rasterbeam position: Will return -1 if unsupported. PsychGetCGDisplayIDFromScreenNumber(&displayId, windowRecord->screenNumber); beamposition = (double) PsychGetDisplayBeamPosition(displayId, windowRecord->screenNumber); } else { beamposition = -1; } if (infoType == 1) { // Return the measured beamposition: PsychCopyOutDoubleArg(1, FALSE, beamposition); } else if (infoType == 4) { // Return async flip state: 1 = Active, 0 = Inactive. PsychCopyOutDoubleArg(1, FALSE, (((NULL != windowRecord->flipInfo) && (0 != windowRecord->flipInfo->asyncstate)) ? 1 : 0)); } else if (infoType == 5) { // Create a GL_EXT_timer_query object for this window: if (glewIsSupported("GL_EXT_timer_query")) { // Pending queries finished? if (windowRecord->gpuRenderTimeQuery > 0) { PsychErrorExitMsg(PsychError_user, "Tried to create a new GPU rendertime query, but last query not yet finished! Call Screen('Flip') first!"); } // Enable our rendering context by selecting this window as drawing target: PsychSetDrawingTarget(windowRecord); // Generate Query object: glGenQueries(1, &windowRecord->gpuRenderTimeQuery); // Emit Query: GPU will measure elapsed processing time in Nanoseconds, starting // with the first GL command executed after this command: glBeginQuery(GL_TIME_ELAPSED_EXT, windowRecord->gpuRenderTimeQuery); // Reset last measurement: windowRecord->gpuRenderTime = 0; } else { if (PsychPrefStateGet_Verbosity() > 4) printf("PTB-INFO: GetWindowInfo for infoType 5: GPU timer query objects are unsupported on this platform and GPU. Call ignored!\n"); } } else { // Return all information: PsychAllocOutStructArray(1, FALSE, 1, fieldCount, FieldNames, &s); // Rasterbeam position: PsychSetStructArrayDoubleElement("Beamposition", 0, beamposition, s); // Time of last vertical blank when a double-buffer swap occured: if ((windowRecord->flipCount > 0) && (windowRecord->time_at_last_vbl == 0) && (PsychPrefStateGet_VBLTimestampingMode() == 4)) { // If time_at_last_vbl for an already finished or at least pending flip isn't available and // we have support for OS-Builtin timestamping enabled, we try to employ OS-Builtin timestamping // to get a timestamp for the most recent pending or finished flip. If this fails or is unsupported, // it will have no effect: PsychOSGetSwapCompletionTimestamp(windowRecord, 0, &(windowRecord->time_at_last_vbl)); } // Return it - or the value zero if it is (still) undefined/unavailable: PsychSetStructArrayDoubleElement("LastVBLTimeOfFlip", 0, windowRecord->time_at_last_vbl, s); // Uncorrected timestamp of flip swap completion: PsychSetStructArrayDoubleElement("RawSwapTimeOfFlip", 0, windowRecord->rawtime_at_swapcompletion, s); // Timestamp immediately prior to call to PsychOSFlipWindowBuffers(), i.e., time at swap request submission: PsychSetStructArrayDoubleElement("TimeAtSwapRequest", 0, windowRecord->time_at_swaprequest, s); // Timestamp immediately after call to PsychOSFlipWindowBuffers() returns, i.e., time at swap request submission completion: PsychSetStructArrayDoubleElement("TimePostSwapRequest", 0, windowRecord->time_post_swaprequest, s); // Timestamp immediately after call to PsychOSFlipWindowBuffers() returns, i.e., time at swap request submission completion: PsychSetStructArrayDoubleElement("VBLTimePostFlip", 0, windowRecord->postflip_vbltimestamp, s); // Swap completion timestamp for most recently completed swap, according to OS-builtin PsychOSGetSwapCompletionTimestamp() method: PsychSetStructArrayDoubleElement("OSSwapTimestamp", 0, windowRecord->osbuiltin_swaptime, s); // Result from last GPU rendertime query as triggered by infoType 5: Zero if undefined. PsychSetStructArrayDoubleElement("GPULastFrameRenderTime", 0, windowRecord->gpuRenderTime, s); // Try to determine system time of last VBL on display, independent of any // flips / bufferswaps. lastvbl = -1; postflip_vblcount = 0; // On supported systems, we can query the OS for the system time of last VBL, so we can // use the most recent VBL timestamp as baseline for timing calculations, // instead of one far in the past. if (onscreen) { lastvbl = PsychOSGetVBLTimeAndCount(windowRecord, &postflip_vblcount); } // If we couldn't determine this information we just set lastvbl to the last known // vbl timestamp of last flip -- better than nothing... if (lastvbl < 0) lastvbl = windowRecord->time_at_last_vbl; PsychSetStructArrayDoubleElement("LastVBLTime", 0, lastvbl, s); PsychSetStructArrayDoubleElement("VBLCount", 0, (double) (psych_int64) postflip_vblcount, s); // Misc. window parameters: PsychSetStructArrayDoubleElement("StereoMode", 0, windowRecord->stereomode, s); PsychSetStructArrayDoubleElement("ImagingMode", 0, windowRecord->imagingMode, s); PsychSetStructArrayDoubleElement("SpecialFlags", 0, windowRecord->specialflags, s); PsychSetStructArrayDoubleElement("IsFullscreen", 0, (windowRecord->specialflags & kPsychIsFullscreenWindow) ? 1 : 0, s); PsychSetStructArrayDoubleElement("MultiSampling", 0, windowRecord->multiSample, s); PsychSetStructArrayDoubleElement("MissedDeadlines", 0, windowRecord->nr_missed_deadlines, s); PsychSetStructArrayDoubleElement("FlipCount", 0, windowRecord->flipCount, s); PsychSetStructArrayDoubleElement("StereoDrawBuffer", 0, windowRecord->stereodrawbuffer, s); PsychSetStructArrayDoubleElement("GuesstimatedMemoryUsageMB", 0, (double) windowRecord->surfaceSizeBytes / 1024 / 1024, s); PsychSetStructArrayDoubleElement("BitsPerColorComponent", 0, (double) windowRecord->bpc, s); // Query real size of the underlying display in order to define the vbl_startline: PsychGetScreenSize(windowRecord->screenNumber, &scw, &sch); vbl_startline = (double) sch; PsychSetStructArrayDoubleElement("VBLStartline", 0, vbl_startline, s); // And VBL endline: PsychSetStructArrayDoubleElement("VBLEndline", 0, windowRecord->VBL_Endline, s); // Video refresh interval duration from beamposition method: PsychSetStructArrayDoubleElement("VideoRefreshFromBeamposition", 0, windowRecord->ifi_beamestimate, s); // Swap group assignment and swap barrier assignment, if any: PsychSetStructArrayDoubleElement("SwapGroup", 0, windowRecord->swapGroup, s); PsychSetStructArrayDoubleElement("SwapBarrier", 0, windowRecord->swapBarrier, s); // Which basic GPU architecture is this? PsychSetStructArrayStringElement("GPUCoreId", 0, windowRecord->gpuCoreId, s); // FBO's supported, and how deep? if (windowRecord->gfxcaps & kPsychGfxCapFBO) { if (windowRecord->gfxcaps & kPsychGfxCapFPFBO32) { PsychSetStructArrayDoubleElement("GLSupportsFBOUpToBpc", 0, 32, s); } else if (windowRecord->gfxcaps & kPsychGfxCapFPFBO16) { PsychSetStructArrayDoubleElement("GLSupportsFBOUpToBpc", 0, 16, s); } else PsychSetStructArrayDoubleElement("GLSupportsFBOUpToBpc", 0, 8, s); } else { PsychSetStructArrayDoubleElement("GLSupportsFBOUpToBpc", 0, 0, s); } // How deep is alpha blending supported? if (windowRecord->gfxcaps & kPsychGfxCapFPBlend32) { PsychSetStructArrayDoubleElement("GLSupportsBlendingUpToBpc", 0, 32, s); } else if (windowRecord->gfxcaps & kPsychGfxCapFPBlend16) { PsychSetStructArrayDoubleElement("GLSupportsBlendingUpToBpc", 0, 16, s); } else PsychSetStructArrayDoubleElement("GLSupportsBlendingUpToBpc", 0, 8, s); // How deep is texture mapping supported? if (windowRecord->gfxcaps & kPsychGfxCapFPTex32) { PsychSetStructArrayDoubleElement("GLSupportsTexturesUpToBpc", 0, 32, s); } else if (windowRecord->gfxcaps & kPsychGfxCapFPTex16) { PsychSetStructArrayDoubleElement("GLSupportsTexturesUpToBpc", 0, 16, s); } else PsychSetStructArrayDoubleElement("GLSupportsTexturesUpToBpc", 0, 8, s); // How deep is texture filtering supported? if (windowRecord->gfxcaps & kPsychGfxCapFPFilter32) { PsychSetStructArrayDoubleElement("GLSupportsFilteringUpToBpc", 0, 32, s); } else if (windowRecord->gfxcaps & kPsychGfxCapFPFilter16) { PsychSetStructArrayDoubleElement("GLSupportsFilteringUpToBpc", 0, 16, s); } else PsychSetStructArrayDoubleElement("GLSupportsFilteringUpToBpc", 0, 8, s); if (windowRecord->gfxcaps & kPsychGfxCapVCGood) { PsychSetStructArrayDoubleElement("GLSupportsPrecisionColors", 0, 1, s); } else PsychSetStructArrayDoubleElement("GLSupportsPrecisionColors", 0, 0, s); if (windowRecord->gfxcaps & kPsychGfxCapFP32Shading) { PsychSetStructArrayDoubleElement("GLSupportsFP32Shading", 0, 1, s); } else PsychSetStructArrayDoubleElement("GLSupportsFP32Shading", 0, 0, s); // Renderer information: This comes last, and would fail if async flips // are active, because it needs PsychSetDrawingTarget, which in turn needs async // flips to be inactive: PsychSetDrawingTarget(windowRecord); PsychSetStructArrayStringElement("GLVendor", 0, (char*) glGetString(GL_VENDOR), s); PsychSetStructArrayStringElement("GLRenderer", 0, (char*) glGetString(GL_RENDERER), s); PsychSetStructArrayStringElement("GLVersion", 0, (char*) glGetString(GL_VERSION), s); } // Done. return(PsychError_none); }
bool PluginProcessChild::Init() { #if defined(XP_MACOSX) // Remove the trigger for "dyld interposing" that we added in // GeckoChildProcessHost::PerformAsyncLaunchInternal(), in the host // process just before we were launched. Dyld interposing will still // happen in our process (the plugin child process). But we don't want // it to happen in any processes that the plugin might launch from our // process. nsCString interpose(PR_GetEnv("DYLD_INSERT_LIBRARIES")); if (!interpose.IsEmpty()) { // If we added the path to libplugin_child_interpose.dylib to an // existing DYLD_INSERT_LIBRARIES, we appended it to the end, after a // ":" path seperator. int32_t lastSeparatorPos = interpose.RFind(":"); int32_t lastTriggerPos = interpose.RFind("libplugin_child_interpose.dylib"); bool needsReset = false; if (lastTriggerPos != -1) { if (lastSeparatorPos == -1) { interpose.Truncate(); needsReset = true; } else if (lastTriggerPos > lastSeparatorPos) { interpose.SetLength(lastSeparatorPos); needsReset = true; } } if (needsReset) { nsCString setInterpose("DYLD_INSERT_LIBRARIES="); if (!interpose.IsEmpty()) { setInterpose.Append(interpose); } // Values passed to PR_SetEnv() must be seperately allocated. char* setInterposePtr = strdup(setInterpose.get()); PR_SetEnv(setInterposePtr); } } #endif #ifdef XP_WIN // Drag-and-drop needs OleInitialize to be called, and Silverlight depends // on the host calling CoInitialize (which is called by OleInitialize). ::OleInitialize(nullptr); #endif // Certain plugins, such as flash, steal the unhandled exception filter // thus we never get crash reports when they fault. This call fixes it. message_loop()->set_exception_restoration(true); std::string pluginFilename; #if defined(OS_POSIX) // NB: need to be very careful in ensuring that the first arg // (after the binary name) here is indeed the plugin module path. // Keep in sync with dom/plugins/PluginModuleParent. std::vector<std::string> values = CommandLine::ForCurrentProcess()->argv(); NS_ABORT_IF_FALSE(values.size() >= 2, "not enough args"); pluginFilename = UnmungePluginDsoPath(values[1]); #elif defined(OS_WIN) std::vector<std::wstring> values = CommandLine::ForCurrentProcess()->GetLooseValues(); NS_ABORT_IF_FALSE(values.size() >= 1, "not enough loose args"); if (ShouldProtectPluginCurrentDirectory(values[0].c_str())) { SanitizeEnvironmentVariables(); SetDllDirectory(L""); } pluginFilename = WideToUTF8(values[0]); #else # error Sorry #endif if (NS_FAILED(nsRegion::InitStatic())) { NS_ERROR("Could not initialize nsRegion"); return false; } bool retval = mPlugin.Init(pluginFilename, ParentHandle(), IOThreadChild::message_loop(), IOThreadChild::channel()); #if defined(XP_MACOSX) if (nsCocoaFeatures::OnYosemiteOrLater()) { // Explicitly turn off CGEvent logging. This works around bug 1092855. // If there are already CGEvents in the log, turning off logging also // causes those events to be written to disk. But at this point no // CGEvents have yet been processed. CGEvents are events (usually // input events) pulled from the WindowServer. An option of 0x80000008 // turns on CGEvent logging. CGSSetDebugOptions(0x80000007); } #endif return retval; }
SrApp::SrApp(ofBaseApp * ofApp) : _model(), _audio("Audio", &_model), _globalParameters("GlobalParams", &_model, &_audio), _artnet("Artnet", &_model), _previs(&_model, &_audio, this), _switcher("Switcher", this), _oscSync(&_model, &_audio, &_switcher, this, 8000, "", 9000), _showGlobals(false), _showFft(false), _showPatternParameters(false), _showPrevis(false), _intentionalCrash(false), _uiColumnWidth(220), _uiMargin(10), _previsXCoord(0), _previsWidth(1280), _previsHeight(720), _leftAlignScale(.7), _leftAlignPrevis(true) { ofSetFrameRate(_model.ComputeFramesPerSecond()); // Disable vertical sync so FPS can be greater than 60. ofSetVerticalSync(false); CGSSetDebugOptions(0x08000000); CGSDeferredUpdates(true); _uiTogglesPanel.setup("UI Toggles"); _uiTogglesPanel.setPosition(_uiMargin, _uiMargin); _showGlobals.setName("Show Globals"); _showFft.setName("Show FFT"); _showPatternParameters.setName("Show Patterns"); _showPrevis.setName("Show Previs"); _intentionalCrash.setName("CRASH!"); _uiTogglesPanel.add(_showGlobals); _uiTogglesPanel.add(_showFft); _uiTogglesPanel.add(_showPatternParameters); _uiTogglesPanel.add(_showPrevis); _uiTogglesPanel.add(_intentionalCrash); _globalPanel.setup("Global"); _globalPanel.add(_previs.GetUiPanel()); _globalPanel.add(_artnet.GetUiPanel()); _globalPanel.add(_audio.GetUiPanel()); _switcher.GetUiPanel()->setPosition(_uiMargin + _uiColumnWidth, _uiMargin); _patternsParameterGroup.setName("Patterns"); _model.GetParameterGroup().add(_patternsParameterGroup); _model.GetParameterGroup().add(_audio.GetParameterGroup()); _model.GetParameterGroup().add(_previs.GetParameterGroup()); _model.GetParameterGroup().add(_globalParameters.GetParameterGroup()); _MakeAnimPatterns(); SrExamplePattern *examplePattern = new SrExamplePattern("Example", &_model, &_audio, &_globalParameters); _AddPattern(examplePattern); SrPaletteBandsPattern *paletteBouncePattern = new SrPaletteBandsPattern("Palette Bands", &_model, &_audio, &_globalParameters); _AddPattern(paletteBouncePattern); SrBeatPattern * beatPattern = new SrBeatPattern("Beat", &_model, &_audio, &_globalParameters); _AddPattern(beatPattern); beatPattern->SetEnabled(false); SrBeatPattern * beatPatternSecondary = new SrBeatPattern("BeatSecondary", &_model, &_audio, &_globalParameters); _AddPattern(beatPatternSecondary); beatPatternSecondary->SetEnabled(false); SrFftPattern *fftPattern = new SrFftPattern("Fft", &_model, &_audio, &_globalParameters); _AddPattern(fftPattern); SrStripesPattern *stripesPattern = new SrStripesPattern("Stripes", &_model, &_audio, &_globalParameters); _AddPattern(stripesPattern); SrDoubleRainbowPattern *DoubleRainbowPattern = new SrDoubleRainbowPattern("DoubleRainbow", &_model, &_audio, &_globalParameters); _AddPattern(DoubleRainbowPattern); SrStarPattern *starPattern = new SrStarPattern("Star", &_model, &_audio, &_globalParameters); _AddPattern(starPattern); SrRainbowPattern *rainbowPattern = new SrRainbowPattern("Rainbow", &_model, &_audio, &_globalParameters); _AddPattern(rainbowPattern); SrArcPattern *arcPattern = new SrArcPattern("Arc", &_model, &_audio, &_globalParameters); _AddPattern(arcPattern); SrPhasorPattern *phasorPattern = new SrPhasorPattern("Phasor", &_model, &_audio, &_globalParameters); _AddPattern(phasorPattern); SrTrailsPattern *trailsPattern = new SrTrailsPattern("Trails", &_model, &_audio, &_globalParameters); _AddPattern(trailsPattern); SrPhrasePattern *phrasePattern = new SrPhrasePattern("Phrase", &_model, &_audio, &_globalParameters); _AddPattern(phrasePattern); SrDiagnosticPattern *diagnosticPattern = new SrDiagnosticPattern("Diagnostic", &_model, &_audio, &_globalParameters); _AddPattern(diagnosticPattern); SrRmsPattern *rmsPattern = new SrRmsPattern("RMS", &_model, &_audio, &_globalParameters); _AddPattern(rmsPattern); SrBigTrailsPattern *bigTrailsPattern = new SrBigTrailsPattern("Big Trails", &_model, &_audio, &_globalParameters); _AddPattern(bigTrailsPattern); SrNetworkInputPattern *networkInputPattern = new SrNetworkInputPattern("Network Input", &_model, &_audio, &_globalParameters); _AddPattern(networkInputPattern); //_MakeVideoPatterns(); SrWhompPattern *whompPattern = new SrWhompPattern("Whomp", &_model, &_audio, &_globalParameters); _AddPattern(whompPattern); SrSpinTrailsPattern *spinTrailsPattern = new SrSpinTrailsPattern("SpinTrails", &_model, &_audio, &_globalParameters); _AddPattern(spinTrailsPattern); SrAmbientRainbowPattern *ambientRainbowPattern = new SrAmbientRainbowPattern("AmbientRainbow", &_model, &_audio, &_globalParameters); _AddPattern(ambientRainbowPattern); SrDropoutPattern *dropoutPattern = new SrDropoutPattern("Dropout", &_model, &_audio, &_globalParameters); _AddPattern(dropoutPattern); SrTriggerPattern *triggerPattern = new SrTriggerPattern("Trigger", &_model, &_audio, &_globalParameters); _AddPattern(triggerPattern); // XXX Disabling video patterns because they are slow //_MakeVideoPatterns(); // Enable the patterns we want on by default. //fftPattern->SetEnabled(true); //whompPattern->SetEnabled(true); //phrasePattern->SetEnabled(true); diagnosticPattern->SetEnabled(true); // Always enable trigger pattern triggerPattern->SetEnabled(true); // Always enable dropout pattern dropoutPattern -> SetEnabled(true); // Add global parameters to the model so they will be accessible // from osc _model.GetParameterGroup().add(_globalParameters.GetParameterGroup()); ofSoundStreamListDevices(); _soundStream.setup(ofApp,_model.GetNumChannels(), _model.GetNumChannels(), _model.GetSampleRate(), _model.GetBufferSize(), 4); // XXX Disabling Loopback for now. Planning on using a mixer // instead of the MOTU /* std::vector<ofSoundDevice> loopbackDevices = _soundStream.getMatchingDevices("Loopback Audio"); printf("number of matching loopback devices %zu\n", loopbackDevices.size()); if (not loopbackDevices.empty()) { int loopbackDeviceID = loopbackDevices[0].deviceID; printf("setting loopback device %d\n", loopbackDeviceID); _soundStream.setDeviceID(loopbackDeviceID); } */ // Calculate X position of the previs _previsXCoord = _uiMargin + _uiColumnWidth * (_patternPanels.size() + 2); // This must happen after patterns are initialized. _switcher.ReadPresets(); LeftAlignPrevis(_leftAlignPrevis); }