public void Render(OpenGL gl, RenderMode renderMode) { ColorTemplate colorTemplate = this.colorTemplate; if (colorTemplate == null) { return; } IRenderContextProvider rc = gl.RenderContextProvider; Debug.Assert(rc != null); int width = 0; int height = 0; if (rc != null) { width = rc.Width; height = rc.Height; } else { int[] viewport = new int[4]; gl.GetInteger(OpenGL.GL_VIEWPORT, viewport); width = viewport[2]; height = viewport[3]; } if (graphics == null && viewControl != null) { graphics = viewControl.CreateGraphics(); } int blockWidth = (width - colorTemplate.Margin.Left - colorTemplate.Margin.Right) / (colorTemplate.Colors.Length - 1); //draw numbers for (int i = 0; i < colorTemplate.Colors.Length; i++) { string value = (minValue * (double)(colorTemplate.Colors.Length - 1 - i) / (colorTemplate.Colors.Length - 1) + maxValue * (double)i / (colorTemplate.Colors.Length - 1)).ToString(); float valueLength = 0f; if (graphics != null) { valueLength = graphics.MeasureString(value, font).Width; } float x = colorTemplate.Margin.Left + i * blockWidth - valueLength / 2; int y = colorTemplate.Margin.Bottom - 20; gl.DrawText((int)x, (int)y, 1, 1, 1, "Courier New", 12.0f, value); } }
public override void Push(OpenGL gl, SceneElement parentElement) { IRenderContextProvider rc = gl.RenderContextProvider; Debug.Assert(rc != null); int width = 0;; int height = 0; if (rc != null) { width = rc.Width; height = rc.Height; } else { int[] viewport = new int[4]; gl.GetInteger(OpenGL.GL_VIEWPORT, viewport); width = viewport[2]; height = viewport[3]; } gl.MatrixMode(SharpGL.Enumerations.MatrixMode.Projection); gl.PushMatrix(); gl.LoadIdentity(); gl.Ortho(-CenterX, width - CenterX, -CenterY, height - CenterY, zNear, zFar); LookAtCamera camera = this.Camera; if (camera == null) { gl.LookAt(0, 0, 1, 0, 0, 0, 0, 1, 0); //throw new Exception("Camera not set!"); } else { Vertex position = camera.Position - camera.Target; position.Normalize(); gl.LookAt(position.X, position.Y, position.Z, 0, 0, 0, camera.UpVector.X, camera.UpVector.Y, camera.UpVector.Z); } gl.MatrixMode(SharpGL.Enumerations.MatrixMode.Modelview); gl.PushMatrix(); //gl.LoadIdentity(); arcBall.TransformMatrix(gl); }
private static bool TryGetHandleToBitmap(IRenderContextProvider renderContextProvider, out IntPtr handleToBitmap) { var dibSectionRenderContextProvider = renderContextProvider as DIBSectionRenderContextProvider; if (dibSectionRenderContextProvider != null) { handleToBitmap = dibSectionRenderContextProvider.DIBSection.HBitmap; return(true); } var fboRenderContextProvider = renderContextProvider as FBORenderContextProvider; if (fboRenderContextProvider != null) { handleToBitmap = fboRenderContextProvider.InternalDIBSection.HBitmap; return(true); } handleToBitmap = IntPtr.Zero; return(false); }
protected void CalculateViewport(OpenGL gl, SimpleUIRectArgs args) { IRenderContextProvider rcp = gl.RenderContextProvider; Debug.Assert(rcp != null, "The gl.RenderContextProvider is null!"); if (rcp != null) { args.viewWidth = rcp.Width; args.viewHeight = rcp.Height; } else { int[] viewport = new int[4]; gl.GetInteger(OpenGL.GL_VIEWPORT, viewport); args.viewWidth = viewport[2]; args.viewHeight = viewport[3]; } }
/// <summary> /// Creates the OpenGL instance using an external, existing render context. /// </summary> /// <param name="openGLVersion">The OpenGL version requested.</param> /// <param name="width">The width.</param> /// <param name="height">The height.</param> /// <param name="bitDepth">The bit depth.</param> /// <param name="windowHandle">The window handle.</param> /// <param name="renderContextHandle">The render context handle.</param> /// <param name="deviceContextHandle">The device context handle.</param> /// <returns> /// True on success /// </returns> public virtual bool CreateFromExternalContext(OpenGLVersion openGLVersion, int width, int height, int bitDepth, IntPtr windowHandle, IntPtr renderContextHandle, IntPtr deviceContextHandle) { // Return if we don't have a sensible width or height. if (width == 0 || height == 0 || bitDepth == 0) { return false; } renderContextProvider = new ExternalRenderContextProvider(windowHandle, renderContextHandle, deviceContextHandle); renderContextProvider.Create(openGLVersion, this, width, height, bitDepth, null); return true; }
/// <summary> /// Creates the OpenGL instance. /// </summary> /// <param name="openGLVersion">The OpenGL version requested.</param> /// <param name="renderContextType">Type of the render context.</param> /// <param name="width">The drawing context width.</param> /// <param name="height">The drawing context height.</param> /// <param name="bitDepth">The bit depth.</param> /// <param name="parameter">The parameter.</param> /// <returns></returns> public virtual bool Create(OpenGLVersion openGLVersion, RenderContextType renderContextType, int width, int height, int bitDepth, object parameter) { // Return if we don't have a sensible width or height. if(width == 0 || height == 0 || bitDepth == 0) return false; // TODO: [RS] I suggest to replace the switch-case statement with a RenderContextProviderFactory. // Create an instance of the render context provider. switch (renderContextType) { case RenderContextType.DIBSection: renderContextProvider = new DIBSectionRenderContextProvider(); break; case RenderContextType.NativeWindow: renderContextProvider = new NativeWindowRenderContextProvider(); break; case RenderContextType.HiddenWindow: renderContextProvider = new HiddenWindowRenderContextProvider(); break; case RenderContextType.FBO: renderContextProvider = new FBORenderContextProvider(); break; } // Create the render context. renderContextProvider.Create(openGLVersion, this, width, height, bitDepth, parameter); return true; }
public override void Push(OpenGL gl, SceneElement parentElement) { IRenderContextProvider rc = gl.RenderContextProvider; Debug.Assert(rc != null); int width = 0; int height = 0; if (rc != null) { width = rc.Width; height = rc.Height; } else { int[] viewport = new int[4]; gl.GetInteger(OpenGL.GL_VIEWPORT, viewport); width = viewport[2]; height = viewport[3]; } gl.MatrixMode(SharpGL.Enumerations.MatrixMode.Projection); gl.PushMatrix(); gl.LoadIdentity(); System.Windows.Forms.Padding margin = colorTemplate.Margin; int targetOrthoBarWidth = width - colorTemplate.Margin.Left - colorTemplate.Margin.Right; if (targetOrthoBarWidth <= 0) { targetOrthoBarWidth = 1; } int scaledWidth = width * colorTemplate.Width / targetOrthoBarWidth; int scaledLeft = -colorTemplate.Margin.Left * colorTemplate.Width / targetOrthoBarWidth; int scaledRight = scaledLeft + scaledWidth; if (scaledLeft >= scaledRight) { scaledRight = scaledLeft + 1; } gl.Ortho(scaledLeft, scaledRight, -colorTemplate.Margin.Bottom, height - colorTemplate.Margin.Bottom, zNear, zFar); LookAtCamera camera = null;// this.Camera; if (camera == null) { gl.LookAt(0, 0, 1, 0, 0, 0, 0, 1, 0); //throw new Exception("Camera not set!"); } else { Vertex position = camera.Position - camera.Target; position.Normalize(); gl.LookAt(position.X, position.Y, position.Z, 0, 0, 0, camera.UpVector.X, camera.UpVector.Y, camera.UpVector.Z); } gl.MatrixMode(SharpGL.Enumerations.MatrixMode.Modelview); gl.PushMatrix(); //gl.LoadIdentity(); }