diff --git a/Source/Examples/ExampleLauncher.Designer.cs b/Source/Examples/ExampleLauncher.Designer.cs index 9aac5235..61adc0ee 100644 --- a/Source/Examples/ExampleLauncher.Designer.cs +++ b/Source/Examples/ExampleLauncher.Designer.cs @@ -1,4 +1,4 @@ -namespace Examples +namespace Examples { partial class ExampleLauncher { @@ -85,9 +85,9 @@ // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(292, 266); + this.ClientSize = new System.Drawing.Size(292, 366); this.Controls.Add(this.splitContainer1); - this.MinimumSize = new System.Drawing.Size(300, 300); + this.MinimumSize = new System.Drawing.Size(300, 400); this.Name = "ExampleLauncher"; this.Text = "OpenTK Example Launcher"; this.Load += new System.EventHandler(this.ExampleLauncher_Load); diff --git a/Source/Examples/Tutorial/T03_Immediate_Mode_Cube.cs b/Source/Examples/Tutorial/T03_Immediate_Mode_Cube.cs index ae6c9e46..6f3729d3 100644 --- a/Source/Examples/Tutorial/T03_Immediate_Mode_Cube.cs +++ b/Source/Examples/Tutorial/T03_Immediate_Mode_Cube.cs @@ -1,4 +1,4 @@ -#region --- License --- +#region --- License --- /* Licensed under the MIT/X11 license. * Copyright (c) 2006-2008 the OpenTK Team. * This notice may not be removed from any source distribution. @@ -37,7 +37,7 @@ namespace Examples.Tutorial #region --- Constructor --- - public T03_Immediate_Mode_Cube() : base(800, 600, new GraphicsMode(16, 16)) + public T03_Immediate_Mode_Cube() : base(800, 600, new GraphicsMode(32, 16)) { } #endregion diff --git a/Source/Examples/WinForms/W01_First_Window.Designer.cs b/Source/Examples/WinForms/W01_First_Window.Designer.cs index 195e864b..8057f7a2 100644 --- a/Source/Examples/WinForms/W01_First_Window.Designer.cs +++ b/Source/Examples/WinForms/W01_First_Window.Designer.cs @@ -1,4 +1,4 @@ -namespace Examples.WinForms +namespace Examples.WinForms { partial class W01_First_Window { @@ -69,13 +69,13 @@ // // glControl1 // - this.glControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.glControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.glControl1.BackColor = System.Drawing.SystemColors.ControlDarkDark; - this.glControl1.Location = new System.Drawing.Point(1, 0); + this.glControl1.Location = new System.Drawing.Point(10, 10); this.glControl1.Name = "glControl1"; - this.glControl1.Size = new System.Drawing.Size(629, 565); + this.glControl1.Size = new System.Drawing.Size(629, 225); this.glControl1.TabIndex = 0; this.glControl1.VSync = false; this.glControl1.Resize += new System.EventHandler(this.glControl1_Resize); diff --git a/Source/Examples/WinForms/W01_First_Window.cs b/Source/Examples/WinForms/W01_First_Window.cs index 022192d2..6168017b 100644 --- a/Source/Examples/WinForms/W01_First_Window.cs +++ b/Source/Examples/WinForms/W01_First_Window.cs @@ -1,4 +1,4 @@ -#region --- License --- +#region --- License --- /* Copyright (c) 2006, 2007 Stefanos Apostolopoulos * See license.txt for license info */ @@ -59,6 +59,8 @@ namespace Examples.WinForms private void glControl1_Paint(object sender, PaintEventArgs e) { + System.Diagnostics.Debug.Print("Repainting glControl."); + GL.Clear(ClearBufferMask.ColorBufferBit); glControl1.SwapBuffers(); } diff --git a/Source/Examples/WinForms/W02_Immediate_Mode_Cube.cs b/Source/Examples/WinForms/W02_Immediate_Mode_Cube.cs index da4ecd22..0e9c9edf 100644 --- a/Source/Examples/WinForms/W02_Immediate_Mode_Cube.cs +++ b/Source/Examples/WinForms/W02_Immediate_Mode_Cube.cs @@ -1,4 +1,4 @@ -#region --- License --- +#region --- License --- /* This source file is released under the MIT license. See License.txt for more information. * Coded by Erik Ylvisaker and Stefanos Apostolopoulos. */ @@ -155,6 +155,7 @@ namespace Examples.WinForms DrawCube(); glControl.SwapBuffers(); + } #endregion diff --git a/Source/OpenTK/Platform/MacOS/AglContext.cs b/Source/OpenTK/Platform/MacOS/AglContext.cs index f621aaa7..5fb930ca 100644 --- a/Source/OpenTK/Platform/MacOS/AglContext.cs +++ b/Source/OpenTK/Platform/MacOS/AglContext.cs @@ -27,13 +27,26 @@ namespace OpenTK.Platform.MacOS IntPtr contextRef; bool mVSync = false; IntPtr displayID; - + + GraphicsMode mode; + CarbonWindowInfo carbonWindow; + IGraphicsContext shareContext; + static AglContext() { if (GraphicsContext.GetCurrentContext == null) GraphicsContext.GetCurrentContext = AglContext.GetCurrentContext; } public AglContext(GraphicsMode mode, IWindowInfo window, IGraphicsContext shareContext) + { + this.mode = mode; + this.carbonWindow = (CarbonWindowInfo)window; + this.shareContext = shareContext; + + CreateContext(mode, carbonWindow, shareContext); + } + + void CreateContext(GraphicsMode mode, CarbonWindowInfo carbonWindow, IGraphicsContext shareContext) { int[] attributes = { @@ -53,10 +66,8 @@ namespace OpenTK.Platform.MacOS (int)Agl.PixelFormatAttribute.AGL_NONE, }; - AGLContext myAGLContext = IntPtr.Zero; AGLPixelFormat myAGLPixelFormat; IntPtr shareContextRef = IntPtr.Zero; - CarbonWindowInfo carbonWindow = (CarbonWindowInfo)window; // Choose a pixel format with the attributes we specified. myAGLPixelFormat = Agl.aglChoosePixelFormat(IntPtr.Zero, 0, attributes); @@ -71,33 +82,25 @@ namespace OpenTK.Platform.MacOS shareContextRef = ((AglContext)shareContext).contextRef; // create the context and share it with the share reference. - myAGLContext = Agl.aglCreateContext(myAGLPixelFormat, shareContextRef); + this.contextRef = Agl.aglCreateContext(myAGLPixelFormat, shareContextRef); MyAGLReportError(); // Free the pixel format from memory. Agl.aglDestroyPixelFormat(myAGLPixelFormat); MyAGLReportError(); - - IntPtr windowPort; - Debug.Print("IsControl: {0}", carbonWindow.IsControl); - if (carbonWindow.IsControl) - { - IntPtr controlOwner = API.GetControlOwner(carbonWindow.WindowRef); - - Debug.Print("GetControlOwner: {0}", controlOwner); - - windowPort = API.GetWindowPort(controlOwner); - } - else - windowPort = API.GetWindowPort(carbonWindow.WindowRef); - - windowPort = API.GetWindowPort(carbonWindow.WindowRef); - Agl.aglSetDrawable(myAGLContext, windowPort); - - MyAGLReportError(); + + SetDrawable(carbonWindow); + SetBufferRect(carbonWindow); + Update(carbonWindow); + + MakeCurrent(carbonWindow); + Debug.Print("context: {0}", contextRef); + } + void SetBufferRect(CarbonWindowInfo carbonWindow) + { if (carbonWindow.IsControl) { Rect rect = API.GetControlBounds(carbonWindow.WindowRef); @@ -114,50 +117,41 @@ namespace OpenTK.Platform.MacOS glrect[2] = rect.Width; glrect[3] = rect.Height; - Agl.aglSetInteger(myAGLContext, Agl.ParameterNames.AGL_BUFFER_RECT, glrect); - MyAGLReportError(); - - Agl.aglEnable(myAGLContext, Agl.ParameterNames.AGL_BUFFER_RECT); - MyAGLReportError(); - } - - // - MyAGLReportError(); - - MakeCurrent(window); - - this.contextRef = myAGLContext; - - Debug.Print("context: {0}", contextRef); - } - - public void Update(IWindowInfo window) - { - CarbonWindowInfo carbonWindow = (CarbonWindowInfo)window; - - if (carbonWindow.IsControl) - { - Rect rect = API.GetControlBounds(carbonWindow.WindowRef); - HIRect hirect = API.HIViewGetFrame(carbonWindow.WindowRef); - - Debug.Print("Setting buffer_rect for control."); - Debug.Print("Rect: {0}", rect); - Debug.Print("HIRect: {0}", hirect); - - int[] glrect = new int[4]; - - glrect[0] = rect.Left; - glrect[1] = rect.Top; - glrect[2] = rect.Width; - glrect[3] = rect.Height; - Agl.aglSetInteger(contextRef, Agl.ParameterNames.AGL_BUFFER_RECT, glrect); MyAGLReportError(); + Agl.aglEnable(contextRef, Agl.ParameterNames.AGL_BUFFER_RECT); + MyAGLReportError(); + } + } + void SetDrawable(CarbonWindowInfo carbonWindow) + { + IntPtr windowPort; + + if (carbonWindow.IsControl) + { + IntPtr controlOwner = API.GetControlOwner(carbonWindow.WindowRef); + + Debug.Print("GetControlOwner: {0}", controlOwner); + + windowPort = API.GetWindowPort(controlOwner); } + else + windowPort = API.GetWindowPort(carbonWindow.WindowRef); + + Agl.aglSetDrawable(contextRef, windowPort); + + MyAGLReportError(); + + } + public void Update(IWindowInfo window) + { + CarbonWindowInfo carbonWindow = (CarbonWindowInfo)window; + + SetBufferRect(carbonWindow); + //Agl.aglSetCurrentContext(contextRef); Agl.aglUpdateContext(contextRef); - //Agl.aglSetDrawable(contextRef, API.GetWindowPort(carbonWindow.WindowRef)); } void MyAGLReportError() @@ -174,13 +168,21 @@ namespace OpenTK.Platform.MacOS } #region IGraphicsContext Members - + bool first = false; public void SwapBuffers() { + if (first == false && carbonWindow.IsControl) + { + Debug.WriteLine("--> Resetting drawable. <--"); + first = true; + SetDrawable(carbonWindow); + Update(carbonWindow); + } + Agl.aglSwapBuffers(contextRef); MyAGLReportError(); } - + public void MakeCurrent(IWindowInfo window) { if (Agl.aglSetCurrentContext(contextRef) == false) diff --git a/Source/OpenTK/Platform/MacOS/Application.cs b/Source/OpenTK/Platform/MacOS/Application.cs index a7f43e16..2582351e 100644 --- a/Source/OpenTK/Platform/MacOS/Application.cs +++ b/Source/OpenTK/Platform/MacOS/Application.cs @@ -29,7 +29,7 @@ namespace OpenTK.Platform.MacOS.Carbon internal static void Initialize() { if (mInitialized) return; - + API.AcquireRootMenu(); ConnectEvents(); diff --git a/Source/OpenTK/Platform/MacOS/CarbonGLControl.cs b/Source/OpenTK/Platform/MacOS/CarbonGLControl.cs index 90453285..98d4de49 100644 --- a/Source/OpenTK/Platform/MacOS/CarbonGLControl.cs +++ b/Source/OpenTK/Platform/MacOS/CarbonGLControl.cs @@ -25,9 +25,15 @@ namespace OpenTK.Platform.MacOS return new GraphicsContext(mode, WindowInfo); } + // TODO: Fix this + bool lastIsIdle = false; public bool IsIdle { - get { return true; } + get + { + lastIsIdle = !lastIsIdle; + return lastIsIdle; + } } public IWindowInfo WindowInfo