protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.Main); mSurfaceView = FindViewById <GLSurfaceView>(Resource.Id.surfaceview); mDisplayRotationHelper = new DisplayRotationHelper(this); Java.Lang.Exception exception = null; string message = null; try { mSession = new Session(/*context=*/ this); } catch (UnavailableArcoreNotInstalledException e) { message = "Please install ARCore"; exception = e; } catch (UnavailableApkTooOldException e) { message = "Please update ARCore"; exception = e; } catch (UnavailableSdkTooOldException e) { message = "Please update this app"; exception = e; } catch (Java.Lang.Exception e) { exception = e; message = "This device does not support AR"; } if (message != null) { Toast.MakeText(this, message, ToastLength.Long).Show(); return; } // Create default config, check is supported, create session from that config. var config = new Google.AR.Core.Config(mSession); if (!mSession.IsSupported(config)) { Toast.MakeText(this, "This device does not support AR", ToastLength.Long).Show(); Finish(); return; } mGestureDetector = new Android.Views.GestureDetector(this, new SimpleTapGestureDetector { SingleTapUpHandler = (MotionEvent arg) => { onSingleTap(arg); return(true); }, DownHandler = (MotionEvent arg) => true }); mSurfaceView.SetOnTouchListener(this); // Set up renderer. mSurfaceView.PreserveEGLContextOnPause = true; mSurfaceView.SetEGLContextClientVersion(2); mSurfaceView.SetEGLConfigChooser(8, 8, 8, 8, 16, 0); // Alpha used for plane blending. mSurfaceView.SetRenderer(this); mSurfaceView.RenderMode = Rendermode.Continuously; }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.Main); mSurfaceView = FindViewById <GLSurfaceView>(Resource.Id.surfaceview); mSession = new Session(/*context=*/ this); // Create default config, check is supported, create session from that config. mDefaultConfig = Google.AR.Core.Config.CreateDefaultConfig(); if (!mSession.IsSupported(mDefaultConfig)) { Toast.MakeText(this, "This device does not support AR", ToastLength.Long).Show(); Finish(); return; } mGestureDetector = new Android.Views.GestureDetector(this, new SimpleTapGestureDetector { SingleTapUpHandler = (MotionEvent arg) => { onSingleTap(arg); return(true); }, DownHandler = (MotionEvent arg) => true }); mSurfaceView.SetOnTouchListener(this); // Set up renderer. mSurfaceView.PreserveEGLContextOnPause = true; mSurfaceView.SetEGLContextClientVersion(2); mSurfaceView.SetEGLConfigChooser(8, 8, 8, 8, 16, 0); // Alpha used for plane blending. mSurfaceView.SetRenderer(this); mSurfaceView.RenderMode = Rendermode.Continuously; }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); BitmapCache.Context = TextureCache.Context = Instance = this; DisplayMetrics m = new DisplayMetrics(); WindowManager.DefaultDisplay.GetMetrics(m); density = m.Density; try { version = PackageManager.GetPackageInfo(PackageName, 0).VersionName; } catch (PackageManager.NameNotFoundException) { version = "???"; } VolumeControlStream = Stream.Music; view = new GLSurfaceView(this); view.SetEGLContextClientVersion(2); view.SetEGLConfigChooser(false); view.SetRenderer(this); view.SetOnTouchListener(this); SetContentView(view); }
/// <summary> /// See Android App lifecycle diagram to know when Android call this event hadler /// https://developer.android.com/guide/components/activities/activity-lifecycle /// </summary> /// <param name="savedInstanceState">use this to store global app variables and objects when ardroid reLaunch application</param> protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); //Set Resources/layout/activity_main.axml as this activity content view (see android:id="@+id/mainlayout") SetContentView(Resource.Layout.activity_ruslan); _GLSurfaceView = new GLSurfaceView(this); _GLSurfaceView.SetEGLContextClientVersion(2); renderer = new RuslanRenderer(this); _GLSurfaceView.SetRenderer(renderer); RelativeLayout sceneHolder = (RelativeLayout)this.FindViewById(Resource.Id.sceneHolder); sceneHolder.AddView(_GLSurfaceView); ruslanView = new RuslanView(this); ruslanView.render = renderer; ruslanView.SetOnTouchListener(this); sceneHolder.AddView(ruslanView); System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 10; timer.Elapsed += OnTimedEvent; timer.Enabled = true; }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); this.SetContentView(Resource.Layout.hand_activity_main); mTextView = (TextView)FindViewById(Resource.Id.handTextView); mSurfaceView = (GLSurfaceView)FindViewById(Resource.Id.handSurfaceview); mDisplayRotationManager = new DisplayRotationManager(this); // Keep the OpenGL ES running context. mSurfaceView.PreserveEGLContextOnPause = true; // Set the OpenGLES version. mSurfaceView.SetEGLContextClientVersion(2); // Set the EGL configuration chooser, including for the // number of bits of the color buffer and the number of depth bits. mSurfaceView.SetEGLConfigChooser(8, 8, 8, 8, 16, 0); mHandRenderManager = new HandRenderManager(this); mHandRenderManager.SetDisplayRotationManager(mDisplayRotationManager); mHandRenderManager.SetTextView(mTextView); mSurfaceView.SetRenderer(mHandRenderManager); mSurfaceView.RenderMode = Android.Opengl.Rendermode.Continuously; }
public static void queueEvent(this GLSurfaceView that, Action h) { that.queueEvent( new queueEvent_Handler { h = h } ); }
private void SetupGlSurfaceView() { glSurfaceView = FindViewById <GLSurfaceView>(Resource.Id.surfaceview); glSurfaceView.PreserveEGLContextOnPause = true; glSurfaceView.SetEGLContextClientVersion(2); glSurfaceView.SetEGLConfigChooser(8, 8, 8, 8, 16, 0); glSurfaceView.SetOnTouchListener(this); glSurfaceView.SetRenderer(this); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); this.RequestWindowFeature(WindowFeatures.NoTitle); this.Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen); glView = new GLSurfaceView(this); glView.SetRenderer(new SimpleRender()); SetContentView(glView); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Create a GLSurfaceView instance and set it // as the ContentView for this Activity mGLView = new MyGLSurfaceView(this); SetContentView(mGLView); }
protected override void OnCreate(Bundle savedInstance) { base.OnCreate(savedInstance); var glView = new GLSurfaceView(this); glView.SetRenderer(new MyRenderer()); SetContentView(glView); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.activity_jpoint_cloud); Title = GetString(Resource.String.app_name); mPoseTextView = (TextView)FindViewById(Resource.Id.pose); mQuatTextView = (TextView)FindViewById(Resource.Id.quat); mPoseCountTextView = (TextView)FindViewById(Resource.Id.posecount); mDeltaTextView = (TextView)FindViewById(Resource.Id.deltatime); mTangoEventTextView = (TextView)FindViewById(Resource.Id.tangoevent); mPoseStatusTextView = (TextView)FindViewById(Resource.Id.status); mPointCountTextView = (TextView)FindViewById(Resource.Id.pointCount); mTangoServiceVersionTextView = (TextView)FindViewById(Resource.Id.version); mApplicationVersionTextView = (TextView)FindViewById(Resource.Id.appversion); mAverageZTextView = (TextView)FindViewById(Resource.Id.averageZ); mFrequencyTextView = (TextView)FindViewById(Resource.Id.frameDelta); mFirstPersonButton = (Button)FindViewById(Resource.Id.first_person_button); mFirstPersonButton.SetOnClickListener(this); mThirdPersonButton = (Button)FindViewById(Resource.Id.third_person_button); mThirdPersonButton.SetOnClickListener(this); mTopDownButton = (Button)FindViewById(Resource.Id.top_down_button); mTopDownButton.SetOnClickListener(this); mTango = new Tango(this); mConfig = new TangoConfig(); mConfig = mTango.GetConfig(TangoConfig.ConfigTypeCurrent); mConfig.PutBoolean(TangoConfig.KeyBooleanDepth, true); int maxDepthPoints = mConfig.GetInt("max_point_cloud_elements"); mRenderer = new PCRenderer(maxDepthPoints); mGLView = (GLSurfaceView)FindViewById(Resource.Id.gl_surface_view); mGLView.SetEGLContextClientVersion(2); mGLView.SetRenderer(mRenderer); mGLView.RenderMode = Rendermode.WhenDirty; PackageInfo packageInfo; try { packageInfo = this.PackageManager.GetPackageInfo(this.PackageName, 0); mApplicationVersionTextView.Text = packageInfo.VersionName; } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.ToString()); System.Diagnostics.Debug.WriteLine(e.StackTrace); } // Display the version of Tango Service mServiceVersion = mConfig.GetString("tango_service_library_version"); mTangoServiceVersionTextView.Text = mServiceVersion; mIsTangoServiceConnected = false; }
private void SurfaceView_Render(object sender, GLSurfaceViewEventArgs e) { GLSurfaceView glSurfaceView = (GLSurfaceView)sender; Gl.Viewport(0, 0, glSurfaceView.Width, glSurfaceView.Height); Gl.ClearColor(0.0f, 0.0f, 0.0f, 1.0f); Gl.Clear(ClearBufferMask.ColorBufferBit); Es2_Render(); }
// protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Engine.activity = this; //apply general settings if (fullscreen) { Window.AddFlags(WindowManagerFlags.Fullscreen); } if (keepScreenOn) { Window.AddFlags(WindowManagerFlags.KeepScreenOn); } StartupTiming.TotalStart(); SetContentView(Resource.Layout.activity_main); //Android.Support.V7.Widget.Toolbar toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>( Resource.Id.toolbar ); //SetSupportActionBar( toolbar ); #if VULKAN surfaceView = new VulkanView(this); //!!!!LinearLayout? RelativeLayout sceneHolder = (RelativeLayout)this.FindViewById(Resource.Id.sceneHolder); sceneHolder.AddView(surfaceView); surfaceView.SetOnTouchListener(this); #else glSurfaceView = new GLSurfaceView(this); glSurfaceView.SetEGLContextClientVersion(3); //it's just recommendation, is not works for any device glSurfaceView.PreserveEGLContextOnPause = true; //!!!!hdr //glSurfaceView.SetEGLConfigChooser( 8, 8, 8, 8, 24, 8 ); var renderer = new Renderer(); glSurfaceView.SetRenderer(renderer); RelativeLayout sceneHolder = (RelativeLayout)this.FindViewById(Resource.Id.sceneHolder); sceneHolder.AddView(glSurfaceView); glSurfaceView.SetOnTouchListener(this); #endif //engineMainThread = new Thread( EngineMainThreadMethod ); //engineMainThread.Start(); }
public BasicCustomVideoRenderer(Context context) { this.mContext = context; mView = new GLSurfaceView(context); mView.EGLContextClientVersion = 2; mRenderer = new MyRenderer(this); mView.Renderer = mRenderer; mView.RenderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY; }
protected override void onCreate(global::android.os.Bundle savedInstanceState) { base.onCreate(savedInstanceState); this.ToFullscreen(); // Create a GLSurfaceView instance and set it // as the ContentView for this Activity mGLView = new HelloOpenGLES20SurfaceView(this); setContentView(mGLView); this.ShowToast("http://my.jsc-solutions.net x"); }
protected override void OnCreate(Bundle savedInstanceState) { base.SetTheme(Resource.Style.MainTheme); base.OnCreate(savedInstanceState); var renderer = new Renderer(); var glview = new GLSurfaceView(this); glview.SetRenderer(renderer); SetContentView(glview); }
/// <summary> /// Save filter bitmap from {@link ImageFilterView} /// </summary> /// <param name="glSurfaceView">surface view on which is image is drawn</param> /// <param name="gl">open gl source to read pixels from {@link GLSurfaceView}</param> /// <returns>save bitmap</returns> /// <OutOfMemoryError>error when system is out of memory to load and save bitmap</OutOfMemoryError> public static Bitmap CreateBitmapFromGlSurface(GLSurfaceView glSurfaceView, IGL10 gl) { try { //My Code Work <3 var w = glSurfaceView.Width; var h = glSurfaceView.Height; var ib = IntBuffer.Allocate(w * h); IntBuffer ibt = IntBuffer.Allocate(w * h); try { gl.GlReadPixels(0, 0, w, h, GL10.GlRgba, GL10.GlUnsignedByte, ib); //Parallel.For(0, h, i => //{ // for (var j = 0; j < w; j++) // ibt.Put((h - i - 1) * w + j, ib.Get(i * w + j)); //}); for (var i = 0; i < h; i++) { for (var j = 0; j < w; j++) { ibt.Put((h - i - 1) * w + j, ib.Get(i * w + j)); } } var mBitmap = Bitmap.CreateBitmap(w, h, Bitmap.Config.Argb8888); mBitmap.CopyPixelsFromBuffer(ibt); return(mBitmap); } catch (GLException e) { Console.WriteLine(e); return(null); } catch (OutOfMemoryError e) { Console.WriteLine(e); return(null); } } catch (Exception e) { Console.WriteLine(e); return(null); } }
protected override void OnCreate(Bundle bundle) { // Base implementation base.OnCreate(bundle); // Surface view GLSurfaceView surfaceView = new GLSurfaceView(this); surfaceView.ContextCreated += SurfaceView_ContextCreated; surfaceView.Render += SurfaceView_Render; surfaceView.ContextDestroying += SurfaceView_ContextDestroying; SetContentView(surfaceView); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); mGlSurfaceView = new GLSurfaceView(this); ActivityManager am = (ActivityManager)GetSystemService(Context.ActivityService); mGlSurfaceView.SetEGLContextClientVersion(2); mGlSurfaceView.SetEGLConfigChooser(true); var gr = new GameRenderer(); mGlSurfaceView.SetRenderer(gr); SetContentView(mGlSurfaceView); }
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // 创建一个GLSurfaceView,用于显示OpenGL绘制的图形 GLSurfaceView glView = new GLSurfaceView(this); // 创建GLSurfaceView的内容绘制器 MyRenderer myRenderer = new MyRenderer(this); // 为GLSurfaceView设置绘制器 glView.SetRenderer(myRenderer); // Set our view from the "main" layout resource SetContentView(glView); detector = new GestureDetector(this, this); }
/// <summary> /// Creates the AR Renderer /// </summary> public BaseArRenderer(Context context, GLSurfaceView surfaceView) { this.context = context; this.surfaceView = surfaceView; this.session = new Session(this.context); this.displayRotationHelper = new DisplayRotationHelper(this.context); config = new Google.AR.Core.Config(this.session); if (!session.IsSupported(config)) { return; } this.surfaceView.PreserveEGLContextOnPause = true; this.surfaceView.SetEGLContextClientVersion(2); this.surfaceView.SetEGLConfigChooser(8, 8, 8, 8, 16, 0); }
/// <summary> /// See Android App lifecycle diagram to know when Android call this event hadler /// https://developer.android.com/guide/components/activities/activity-lifecycle /// </summary> /// <param name="savedInstanceState">use this to store global app variables and objects when ardroid reLaunch application</param> protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); //Set Resources/layout/activity_main.axml as this activity content view (see android:id="@+id/mainlayout") SetContentView(Resource.Layout.activity_main); _GLSurfaceView = new GLSurfaceView(this); _GLSurfaceView.SetEGLContextClientVersion(2); Renderer renderer = new Renderer(this); _GLSurfaceView.SetRenderer(renderer); RelativeLayout sceneHolder = (RelativeLayout)this.FindViewById(Resource.Id.sceneHolder); sceneHolder.AddView(_GLSurfaceView); }
protected override void onCreate(global::android.os.Bundle savedInstanceState) { base.onCreate(savedInstanceState); this.ToFullscreen(); mGLSurfaceView = new GLSurfaceView(this); // Request an OpenGL ES 2.0 compatible context. mGLSurfaceView.setEGLContextClientVersion(2); // Set the renderer to our demo renderer, defined below. mGLSurfaceView.setRenderer(new LessonFourRenderer(this)); setContentView(mGLSurfaceView); this.ShowLongToast("http://my.jsc-solutions.net"); }
private void GlSurface_Render(object sender, GLSurfaceViewEventArgs e) { GLSurfaceView senderControl = (GLSurfaceView)sender; float senderAspectRatio = (float)senderControl.Width / senderControl.Height; // Clear Gl.Viewport(0, 0, senderControl.Width, senderControl.Height); Gl.Clear(ClearBufferMask.ColorBufferBit); _CubeScene.CurrentView.ProjectionMatrix = new PerspectiveProjectionMatrix(45.0f, senderAspectRatio, 0.1f, 100.0f); _CubeScene.CurrentView.LocalModel.SetIdentity(); _CubeScene.CurrentView.LocalModel.Translate(_ViewStrideLat, _ViewStrideAlt, 0.0f); _CubeScene.CurrentView.LocalModel.RotateY(_ViewAzimuth); _CubeScene.CurrentView.LocalModel.RotateX(_ViewElevation); _CubeScene.CurrentView.LocalModel.Translate(0.0f, 0.0f, _ViewLever); _CubeScene.UpdateViewMatrix(); _CubeScene.Draw(_Context); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); RequestWindowFeature(WindowFeatures.NoTitle); Window.SetFlags(WindowManagerFlags.Fullscreen, WindowManagerFlags.Fullscreen); _glView = new GLSurfaceView(this); //mod //_glView.SetEGLConfigChooser (false); //_glView.SetEGLConfigChooser(8, 8, 8, 8, 0,0); _glView.SetRenderer(this); _input = new AndroidInput(this, _glView, 1, 1); _file = new AndroidFileIO(this.Assets); _audio = new AndroidAudio(this); _glGraphics = new AndroidGLGraphics(_glView); SetContentView(_glView); PowerManager pm = (PowerManager)GetSystemService(Service.PowerService); _wakeLock = pm.NewWakeLock(WakeLockFlags.Full, "GLGame"); }
protected override void OnCreate(Bundle bundle) { #if DEBUG KhronosApi.Log += KhronosApi_Log; KhronosApi.LogEnabled = true; #endif // Base implementation base.OnCreate(bundle); // Load layout SetContentView(Resource.Layout.Main); // Setup GL view GLSurfaceView glSurface = FindViewById <GLSurfaceView>(Resource.Id.GLSurface); glSurface.ContextCreated += GlSurface_ContextCreated; glSurface.ContextDestroying += GlSurface_ContextDestroying; glSurface.Render += GlSurface_Render; }
/// <summary> /// OnCreate is called by Android when this activity is created /// </summary> protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); App.Manager.ApplicationContext = base.ApplicationContext; App.Manager.Setup(); // The SurfaceView is inflated from the layout file when the ContentView is set... SetContentView(Resource.Layout.Main); // ...we can then hold onto a reference to that view using its id SurfaceView = FindViewById <GLSurfaceView> (Resource.Id.hellorhinoview); var intLayout = FindViewById <RelativeLayout> (Resource.Id.relLayout1); if (App.Manager.CurrentModel.IsReadyForRendering) { RunOnUiThread(() => intLayout.Visibility = ViewStates.Invisible); } else { RunOnUiThread(() => intLayout.Visibility = ViewStates.Visible); } var warningImage = FindViewById <ImageView> (Resource.Id.imageView1); RunOnUiThread(() => warningImage.Visibility = ViewStates.Invisible); var cancelButton = FindViewById <Button> (Resource.Id.cancelButton); cancelButton.Click += (sender, e) => App.Manager.CurrentModel.CancelModelPreparation(); // Tell the model to prepare itself for display... App.Manager.CurrentModel.MeshPrep += new MeshPreparationHandler(ObserveMeshPrep); // Tell the model to prepare itself for display... if (!App.Manager.CurrentModel.IsReadyForRendering) { App.Manager.CurrentModel.Prepare(); } }
protected override void onCreate(global::android.os.Bundle savedInstanceState) { base.onCreate(savedInstanceState); glSurfaceView = new GLSurfaceView(this); // http://www.learnopengles.com/android-emulator-now-supports-native-opengl-es2-0/ //we definitely want a GLES 2 context glSurfaceView.setEGLContextClientVersion(2); //and create our own renderer glSurfaceView.setRenderer(new Lesson01Renderer(this)); setContentView(glSurfaceView); this.ShowToast("http://jsc-solutions.net"); }
protected internal override void onCreate(Bundle savedInstanceState) { base.onCreate(savedInstanceState); mGlSurfaceView = new GLSurfaceView(this); mGlSurfaceView.Renderer = new RendererAnonymousInnerClassHelper(this); ContentView = mGlSurfaceView; mGlSurfaceView.OnHoverListener = new OnHoverListenerAnonymousInnerClassHelper(this); mAirButton = new SlookAirButton(mGlSurfaceView, AdapterMenuList, SlookAirButton.UI_TYPE_MENU); mAirButton.Gravity = SlookAirButton.GRAVITY_HOVER_POINT; Slook slook = new Slook(); if (!slook.isFeatureEnabled(Slook.AIRBUTTON)) { Toast.makeText(this, "This model doesn't support AirButton", Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "Please hover and push the Spen button on each button", Toast.LENGTH_SHORT).show(); } }
protected internal override void onCreate(Bundle savedInstanceState) { base.onCreate(savedInstanceState); mGlSurfaceView = new GLSurfaceView(this); mGlSurfaceView.Renderer = new RendererAnonymousInnerClassHelper(this); ContentView = mGlSurfaceView; mGlSurfaceView.OnHoverListener = new OnHoverListenerAnonymousInnerClassHelper(this); mAirButton = new SlookAirButton(mGlSurfaceView, AdapterMenuList, SlookAirButton.UI_TYPE_MENU); mAirButton.Gravity = SlookAirButton.GRAVITY_HOVER_POINT; Slook slook = new Slook(); if (!slook.isFeatureEnabled(Slook.AIRBUTTON)) { Toast.makeText(this, "This model doesn't support AirButton", Toast.LENGTH_LONG).show(); } else { Toast.makeText(this, "Please hover and push the Spen button on each button", Toast.LENGTH_SHORT).show(); } }
/// <summary> /// Creates the AR Renderer /// </summary> public PlaceCharacterRenderer(Context context, GLSurfaceView surfaceView, Character character) : base(context, surfaceView) { this.selectedCharacter = character; this.gestureDetector = new GestureDetector(this.context, new TapGestureDetectorHelper { SingleTapUpHandler = (arg) => { OnSingleTap(arg); return(true); }, DownHandler = (arg) => true }); this.surfaceView.SetOnTouchListener(this); this.messengerService = Mvx.IoCProvider.GetSingleton <IMvxMessenger>(); selectedCharacterMvxSubscriptionToken = this.messengerService.Subscribe <SelectedCharacterMessage>((e) => { this.selectedCharacter = e.Character; }); // Selects by default the first character Task.Run(async() => { try { var characters = await Mvx.IoCProvider.GetSingleton <ICharacterRepository>()?.GetAll(); if (characters.Any()) { this.selectedCharacter = characters.FirstOrDefault(x => x.Captured); } } catch { // Ignored } }); }
public BasicCustomVideoRenderer(Context context) { this.mContext = context; mView = new GLSurfaceView(context); mView.EGLContextClientVersion = 2; mRenderer = new MyRenderer(this); mView.Renderer = mRenderer; mView.RenderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY; }