Example #1
0
 public void Dispose()
 {
     if (_selfCreatedWindow)
     {
         OpenGLContext?.Dispose();
     }
 }
Example #2
0
 public virtual void SwapBuffers()
 {
     AssertValid();
     AssertContext();
     // basically SwapBuffers is the same as FlushBuffer on OSX
     OpenGLContext.FlushBuffer();
 }
        public override void DrawRect(CGRect dirtyRect)
        {
            base.DrawRect(dirtyRect);

            var size = ConvertSizeToBacking(Bounds.Size);

            renderTarget.Width  = (int)size.Width;
            renderTarget.Height = (int)size.Height;

            Gles.glClear(Gles.GL_STENCIL_BUFFER_BIT);

            using (var surface = SKSurface.Create(context, renderTarget))
            {
                if (PaintSurface != null)
                {
                    PaintSurface.Invoke(surface);
                }

                surface.Canvas.Flush();
            }

            // flush the SkiaSharp contents to GL
            context.Flush();

            OpenGLContext.FlushBuffer();
        }
Example #4
0
        protected override void OnDraw()
        {
            OpenGLContext.CGLContext.Lock().ThrowIfFailed("CGLContext.Lock()");
            try
            {
                OpenGLContext.MakeCurrentContext();

                _perFrame.OnNext(_stopwatch.Elapsed.TotalSeconds);

                _log.TrySomethingBlocking(Bootstrapper.OnUpdate);

                if (_unoWindow.Size.HasZeroArea())
                {
                    return;
                }

                if (Uno.Application.Current != null && Bootstrapper.DrawNextFrame)
                {
                    _unoGraphics.ChangeBackbuffer((GLFramebufferHandle)_renderTarget.GetFramebufferHandle(_unoWindow.Size));
                    _log.TrySomethingBlocking(Bootstrapper.OnDraw);
                    _renderTarget.Flush(OpenGLContext);
                }
            }
            finally
            {
                ++_currentFrame;
                OpenGLContext.CGLContext.Unlock().ThrowIfFailed("CGLContext.Unlock()");
            }
        }
Example #5
0
        private void GLRenderer_Initialized(object sender, EventArgs e)
        {
            // Release the GL exclusivity that SPB gave us as we aren't going to use it in GTK Thread.
            OpenGLContext.MakeCurrent(null);

            WaitEvent.Set();
        }
Example #6
0
        public override void DrawRect(CGRect dirtyRect)
        {
            base.DrawRect(dirtyRect);

            if (fsurface == null)
            {
                return;
            }

            var size = ConvertSizeToBacking(Bounds.Size);

            renderTarget.Width  = (int)size.Width;
            renderTarget.Height = (int)size.Height;

            Gles.glClear(Gles.GL_STENCIL_BUFFER_BIT);

            using (var surface = SKSurface.Create(context, renderTarget))
            {
                fsurface.UpdateSurface(surface);

                // draw on the surface
                DrawInSurface(surface, renderTarget);

                surface.Canvas.Flush();
            }

            // flush the SkiaSharp contents to GL
            context.Flush();

            OpenGLContext.FlushBuffer();
        }
Example #7
0
 public void SetContext(IRenderContext context)
 {
     if (!(context is OpenGLContext))
     {
         throw new Exception("OpenGL: Invalid context!");
     }
     p_Context = (OpenGLContext)context;
 }
Example #8
0
        internal OpenGLFont(OpenGLContext context,string fontname,float size)
        {
            font=new WGLBitmapFont(context,new Font(fontname,size));
            font.InitRange((char)0,(char)255);

            col=Color.FromArgb(unchecked((int)0xFFFFFFFF));
            rot=0;
            pos=new Point(0,0);
        }
Example #9
0
        public override void DrawRect(CGRect dirtyRect)
        {
            base.DrawRect(dirtyRect);

            Gles.glClear(Gles.GL_COLOR_BUFFER_BIT | Gles.GL_DEPTH_BUFFER_BIT | Gles.GL_STENCIL_BUFFER_BIT);

            // create the render target
            if (renderTarget == null || lastSize != newSize || !renderTarget.IsValid)
            {
                // create or update the dimensions
                lastSize = newSize;

                // read the info from the buffer
                Gles.glGetIntegerv(Gles.GL_FRAMEBUFFER_BINDING, out var framebuffer);
                Gles.glGetIntegerv(Gles.GL_STENCIL_BITS, out var stencil);
                Gles.glGetIntegerv(Gles.GL_SAMPLES, out var samples);
                var maxSamples = context.GetMaxSurfaceSampleCount(colorType);
                if (samples > maxSamples)
                {
                    samples = maxSamples;
                }
                glInfo = new GRGlFramebufferInfo((uint)framebuffer, colorType.ToGlSizedFormat());

                // destroy the old surface
                surface?.Dispose();
                surface = null;
                canvas  = null;

                // re-create the render target
                renderTarget?.Dispose();
                renderTarget = new GRBackendRenderTarget(newSize.Width, newSize.Height, samples, stencil, glInfo);
            }

            // create the surface
            if (surface == null)
            {
                surface = SKSurface.Create(context, renderTarget, surfaceOrigin, colorType);
                canvas  = surface.Canvas;
            }

            using (new SKAutoCanvasRestore(canvas, true))
            {
                // start drawing
                var e = new SKPaintGLSurfaceEventArgs(surface, renderTarget, surfaceOrigin, colorType, glInfo);
#pragma warning disable CS0618 // Type or member is obsolete
                DrawInSurface(e.Surface, e.RenderTarget);
#pragma warning restore CS0618 // Type or member is obsolete
                OnPaintSurface(e);
            }

            // flush the SkiaSharp contents to GL
            canvas.Flush();
            context.Flush();

            OpenGLContext.FlushBuffer();
        }
Example #10
0
        public void MakeNonCurrent()
        {
            Validate(true);

            _threadLocalCurrent.Value = null;
            OpenGLContext.MakeCurrent(null);
            ThreadID = -1;

            Validate(false);
        }
Example #11
0
        public void MakeCurrent()
        {
            Validate(false);

            _threadLocalCurrent.Value = this;
            OpenGLContext.MakeCurrent(Window.WindowInfo);
            ThreadID = Thread.CurrentThread.ManagedThreadId;

            Validate(true);
        }
Example #12
0
        public override void DrawRect(CGRect dirtyRect)
        {
            OpenGLContext.MakeCurrentContext();

            GL.ClearColor(Color.Brown);

            GL.ClearColor(0, 0, 0, 0);
            GL.Clear(ClearBufferMask.ColorBufferBit);

            DrawTriangle();

            GL.Flush();
        }
Example #13
0
        private void Intialize()
        {
            NativeWindow = RetrieveNativeWindow();

            Window.EnsureNative();

            OpenGLContext = PlatformHelper.CreateOpenGLContext(FramebufferFormat, GLVersionMajor, GLVersionMinor, ContextFlags, DirectRendering, SharedContext);

            OpenGLContext.Initialize(NativeWindow);
            OpenGLContext.MakeCurrent(NativeWindow);

            _initialized = true;

            Initialized?.Invoke(this, EventArgs.Empty);
        }
        public GraphicsDevice(IntPtr target)
        {
            context = OpenGLContext.GetContext();

            context.Samples = 4;
            // Create context using platform specific methods
            context.CreateContext(target, IntPtr.Zero, null);
            //GL.InitGeneral(context);
            //foreach (var str in GL.GetSupportedExtensions())
            //Console.WriteLine(str);

            modelview_matrix  = new MatrixState();
            projection_matrix = new MatrixState();
            texture_matrix    = new MatrixState();
            normal_matrix     = new MatrixState();

            var err = GL.glGetError();

            GL.InitGL_1_2(context);
            GL.InitGL_1_3(context);
            GL.InitGL_1_4(context);
            GL.InitGL_1_5(context);
            GL.InitGL_2_0(context);
            GL.InitGL_2_1(context);
            GL.InitGL_3_0(context);
            GL.InitGL_3_1(context);
            GL.InitGL_3_2(context);
            GL.InitFramebuffers(context);
            GL.InitVertexArrayObjects(context);
            var sp = GL.GetSupportedExtensions();

            if (sp.Contains("GL_AMD_debug_output"))
            {
                GL.InitDebugOutputAMD(context);
                GL.glDebugMessageCallbackAMD(new OpenGL.OpenGL.DebugProc(DebugProcecure), IntPtr.Zero);
                GL.glDebugMessageEnableAMD(0, 0, 0, new int[] { }, GL.boolean.TRUE);
            }

            err = GL.glGetError();

            GL.glEnable(GL.Const.GL_TEXTURE_2D);

            state       = new OpenGLState(this);
            state.Blend = true;
            state.BlendFunction(Blend.SrcAlpha, Blend.OneMinusSrcAlpha);
            state.Culling   = true;
            state.DepthTest = true;
        }
Example #15
0
        public override void DrawRect(CGRect dirtyRect)
        {
            base.DrawRect(dirtyRect);

            Gles.glClear(Gles.GL_COLOR_BUFFER_BIT | Gles.GL_DEPTH_BUFFER_BIT | Gles.GL_STENCIL_BUFFER_BIT);

            // manage the drawing surface
            var size = ConvertSizeToBacking(Bounds.Size);

            if (renderTarget == null || surface == null || renderTarget.Width != size.Width || renderTarget.Height != size.Height)
            {
                // create or update the dimensions
                renderTarget?.Dispose();
                Gles.glGetIntegerv(Gles.GL_FRAMEBUFFER_BINDING, out var framebuffer);
                Gles.glGetIntegerv(Gles.GL_STENCIL_BITS, out var stencil);
                Gles.glGetIntegerv(Gles.GL_SAMPLES, out var samples);
                var maxSamples = context.GetMaxSurfaceSampleCount(colorType);
                if (samples > maxSamples)
                {
                    samples = maxSamples;
                }
                var glInfo = new GRGlFramebufferInfo((uint)framebuffer, colorType.ToGlSizedFormat());
                renderTarget = new GRBackendRenderTarget((int)size.Width, (int)size.Height, samples, stencil, glInfo);

                // create the surface
                surface?.Dispose();
                surface = SKSurface.Create(context, renderTarget, surfaceOrigin, colorType);
            }

            using (new SKAutoCanvasRestore(surface.Canvas, true))
            {
                // start drawing
                var e = new SKPaintGLSurfaceEventArgs(surface, renderTarget, surfaceOrigin, colorType);
#pragma warning disable CS0618 // Type or member is obsolete
                DrawInSurface(e.Surface, e.RenderTarget);
#pragma warning restore CS0618 // Type or member is obsolete
                OnPaintSurface(e);
            }

            // flush the SkiaSharp contents to GL
            surface.Canvas.Flush();
            context.Flush();

            OpenGLContext.FlushBuffer();
        }
Example #16
0
        protected override void Dispose(bool disposing)
        {
            // Try to bind the OpenGL context before calling the shutdown event
            try
            {
                OpenGLContext?.MakeCurrent(NativeWindow);
            }
            catch (Exception) { }

            ShuttingDown?.Invoke(this, EventArgs.Empty);

            // Unbind context and destroy everything
            try
            {
                OpenGLContext?.MakeCurrent(null);
            }
            catch (Exception) { }

            OpenGLContext.Dispose();
        }
Example #17
0
        public void BeginFrame(IRenderContext context)
        {
            if (!(context is OpenGLContext))
            {
                throw new Exception("OpenGL: Invalid context!");
            }

            p_Context = context as OpenGLContext;

            //swap to OpenGL context
            if (!p_HasContext)
            {
                wglMakeCurrent(
                    p_Context.DeviceContext,
                    p_Context.RenderContext);
                p_HasContext = true;
            }

            //resize?
            if (p_Context.SizeChanged)
            {
                int width = p_Context.Width, height = p_Context.Height;
                int centerX = width / 2, centerY = height / 2;

                glViewport(0, 0, width, height);
                glOrtho(-centerX, centerX, -centerY, centerY, -100, 100);
            }

            //reset tri count
            p_CurrentVertCount = 0;

            //setup orthoganol matrix so we are using screen coords instead
            //of world coords
            glLoadIdentity();
            gluOrtho2D(0, p_Context.Width, p_Context.Height, 0);
            glMatrixMode(MODELVIEW);
            glPushMatrix();
            glLoadIdentity();
        }
Example #18
0
        public override void DrawRect(CGRect dirtyRect)
        {
            base.DrawRect(dirtyRect);

            Gles.glClear(Gles.GL_COLOR_BUFFER_BIT | Gles.GL_DEPTH_BUFFER_BIT | Gles.GL_STENCIL_BUFFER_BIT);

            // manage the drawing surface
            var size = ConvertSizeToBacking(Bounds.Size);

            if (renderTarget == null || surface == null || renderTarget.Width != size.Width || renderTarget.Height != size.Height)
            {
                // create or update the dimensions
                renderTarget?.Dispose();
                renderTarget = SKGLDrawable.CreateRenderTarget((int)size.Width, (int)size.Height);

                // create the surface
                surface?.Dispose();
                surface = SKSurface.Create(context, renderTarget, GRSurfaceOrigin.BottomLeft, SKColorType.Rgba8888);
            }

            using (new SKAutoCanvasRestore(surface.Canvas, true))
            {
                // start drawing
                var e = new SKPaintGLSurfaceEventArgs(surface, renderTarget, GRSurfaceOrigin.BottomLeft, SKColorType.Rgba8888);
#pragma warning disable CS0618 // Type or member is obsolete
                DrawInSurface(e.Surface, e.RenderTarget);
#pragma warning restore CS0618 // Type or member is obsolete
                OnPaintSurface(e);
            }

            // flush the SkiaSharp contents to GL
            surface.Canvas.Flush();
            context.Flush();

            OpenGLContext.FlushBuffer();
        }
Example #19
0
        public void DrawString(string text
            , GePoint position, OpenGLContext context)
        {
            uint dbase = GL.glGenLists(256);
            wglUseFontBitmaps(context.GetNativeGDI(), 0, 256, dbase);

            GL.glRasterPos2f(position.X, position.Y);// Position The Text On The Screen

            GL.glPushAttrib(GL.GL_LIST_BIT);													// Pushes The Display List Bits
            GL.glListBase(dbase);														// Sets The Base Character to 32
            GL.glCallLists(text.Length, GL.GL_UNSIGNED_SHORT, text);							// Draws The Display List Text
            GL.glPopAttrib();
        }
Example #20
0
 public static void InitGL_3_0(OpenGLContext ctx)
 {
     glColorMaski = ctx.GetProc<ColorMaski>("glColorMaski");
     glGetBooleani_v = ctx.GetProc<GetBooleani_v>("glGetBooleani_v");
     glGetIntegeri_v = ctx.GetProc<GetIntegeri_v>("glGetIntegeri_v");
     glEnablei = ctx.GetProc<Enablei>("glEnablei");
     glDisablei = ctx.GetProc<Disablei>("glDisablei");
     glIsEnabledi = ctx.GetProc<IsEnabledi>("glIsEnabledi");
     glBeginTransformFeedback = ctx.GetProc<BeginTransformFeedback>("glBeginTransformFeedback");
     glEndTransformFeedback = ctx.GetProc<EndTransformFeedback>("glEndTransformFeedback");
     glBindBufferRange = ctx.GetProc<BindBufferRange>("glBindBufferRange");
     glBindBufferBase = ctx.GetProc<BindBufferBase>("glBindBufferBase");
     glTransformFeedbackVaryings = ctx.GetProc<TransformFeedbackVaryings>("glTransformFeedbackVaryings");
     glGetTransformFeedbackVarying = ctx.GetProc<GetTransformFeedbackVarying>("glGetTransformFeedbackVarying");
     glClampColor = ctx.GetProc<ClampColor>("glClampColor");
     glBeginConditionalRender = ctx.GetProc<BeginConditionalRender>("glBeginConditionalRender");
     glEndConditionalRender = ctx.GetProc<EndConditionalRender>("glEndConditionalRender");
     glVertexAttribIPointer = ctx.GetProc<VertexAttribIPointer>("glVertexAttribIPointer");
     glGetVertexAttribIiv = ctx.GetProc<GetVertexAttribIiv>("glGetVertexAttribIiv");
     glGetVertexAttribIuiv = ctx.GetProc<GetVertexAttribIuiv>("glGetVertexAttribIuiv");
     glVertexAttribI1i = ctx.GetProc<VertexAttribI1i>("glVertexAttribI1i");
     glVertexAttribI2i = ctx.GetProc<VertexAttribI2i>("glVertexAttribI2i");
     glVertexAttribI3i = ctx.GetProc<VertexAttribI3i>("glVertexAttribI3i");
     glVertexAttribI4i = ctx.GetProc<VertexAttribI4i>("glVertexAttribI4i");
     glVertexAttribI1ui = ctx.GetProc<VertexAttribI1ui>("glVertexAttribI1ui");
     glVertexAttribI2ui = ctx.GetProc<VertexAttribI2ui>("glVertexAttribI2ui");
     glVertexAttribI3ui = ctx.GetProc<VertexAttribI3ui>("glVertexAttribI3ui");
     glVertexAttribI4ui = ctx.GetProc<VertexAttribI4ui>("glVertexAttribI4ui");
     glVertexAttribI1iv = ctx.GetProc<VertexAttribI1iv>("glVertexAttribI1iv");
     glVertexAttribI2iv = ctx.GetProc<VertexAttribI2iv>("glVertexAttribI2iv");
     glVertexAttribI3iv = ctx.GetProc<VertexAttribI3iv>("glVertexAttribI3iv");
     glVertexAttribI4iv = ctx.GetProc<VertexAttribI4iv>("glVertexAttribI4iv");
     glVertexAttribI1uiv = ctx.GetProc<VertexAttribI1uiv>("glVertexAttribI1uiv");
     glVertexAttribI2uiv = ctx.GetProc<VertexAttribI2uiv>("glVertexAttribI2uiv");
     glVertexAttribI3uiv = ctx.GetProc<VertexAttribI3uiv>("glVertexAttribI3uiv");
     glVertexAttribI4uiv = ctx.GetProc<VertexAttribI4uiv>("glVertexAttribI4uiv");
     glVertexAttribI4bv = ctx.GetProc<VertexAttribI4bv>("glVertexAttribI4bv");
     glVertexAttribI4sv = ctx.GetProc<VertexAttribI4sv>("glVertexAttribI4sv");
     glVertexAttribI4ubv = ctx.GetProc<VertexAttribI4ubv>("glVertexAttribI4ubv");
     glVertexAttribI4usv = ctx.GetProc<VertexAttribI4usv>("glVertexAttribI4usv");
     glGetUniformuiv = ctx.GetProc<GetUniformuiv>("glGetUniformuiv");
     glBindFragDataLocation = ctx.GetProc<BindFragDataLocation>("glBindFragDataLocation");
     glGetFragDataLocation = ctx.GetProc<GetFragDataLocation>("glGetFragDataLocation");
     glUniform1ui = ctx.GetProc<Uniform1ui>("glUniform1ui");
     glUniform2ui = ctx.GetProc<Uniform2ui>("glUniform2ui");
     glUniform3ui = ctx.GetProc<Uniform3ui>("glUniform3ui");
     glUniform4ui = ctx.GetProc<Uniform4ui>("glUniform4ui");
     glUniform1uiv = ctx.GetProc<Uniform1uiv>("glUniform1uiv");
     glUniform2uiv = ctx.GetProc<Uniform2uiv>("glUniform2uiv");
     glUniform3uiv = ctx.GetProc<Uniform3uiv>("glUniform3uiv");
     glUniform4uiv = ctx.GetProc<Uniform4uiv>("glUniform4uiv");
     glTexParameterIiv = ctx.GetProc<TexParameterIiv>("glTexParameterIiv");
     glTexParameterIuiv = ctx.GetProc<TexParameterIuiv>("glTexParameterIuiv");
     glGetTexParameterIiv = ctx.GetProc<GetTexParameterIiv>("glGetTexParameterIiv");
     glGetTexParameterIuiv = ctx.GetProc<GetTexParameterIuiv>("glGetTexParameterIuiv");
     glClearBufferiv = ctx.GetProc<ClearBufferiv>("glClearBufferiv");
     glClearBufferuiv = ctx.GetProc<ClearBufferuiv>("glClearBufferuiv");
     glClearBufferfv = ctx.GetProc<ClearBufferfv>("glClearBufferfv");
     glClearBufferfi = ctx.GetProc<ClearBufferfi>("glClearBufferfi");
     glGetStringi = ctx.GetProc<GetStringi>("glGetStringi");
 }
Example #21
0
 public static void InitGL_2_1(OpenGLContext ctx)
 {
     glUniformMatrix2x3fv = ctx.GetProc<UniformMatrix2x3fv>("glUniformMatrix2x3fv");
     glUniformMatrix3x2fv = ctx.GetProc<UniformMatrix3x2fv>("glUniformMatrix3x2fv");
     glUniformMatrix2x4fv = ctx.GetProc<UniformMatrix2x4fv>("glUniformMatrix2x4fv");
     glUniformMatrix4x2fv = ctx.GetProc<UniformMatrix4x2fv>("glUniformMatrix4x2fv");
     glUniformMatrix3x4fv = ctx.GetProc<UniformMatrix3x4fv>("glUniformMatrix3x4fv");
     glUniformMatrix4x3fv = ctx.GetProc<UniformMatrix4x3fv>("glUniformMatrix4x3fv");
 }
Example #22
0
 public static void InitGL_2_0(OpenGLContext ctx)
 {
     glBlendEquationSeparate = ctx.GetProc<BlendEquationSeparate>("glBlendEquationSeparate");
     glDrawBuffers = ctx.GetProc<DrawBuffers>("glDrawBuffers");
     glStencilOpSeparate = ctx.GetProc<StencilOpSeparate>("glStencilOpSeparate");
     glStencilFuncSeparate = ctx.GetProc<StencilFuncSeparate>("glStencilFuncSeparate");
     glStencilMaskSeparate = ctx.GetProc<StencilMaskSeparate>("glStencilMaskSeparate");
     glAttachShader = ctx.GetProc<AttachShader>("glAttachShader");
     glBindAttribLocation = ctx.GetProc<BindAttribLocation>("glBindAttribLocation");
     glCompileShader = ctx.GetProc<CompileShader>("glCompileShader");
     glCreateProgram = ctx.GetProc<CreateProgram>("glCreateProgram");
     glCreateShader = ctx.GetProc<CreateShader>("glCreateShader");
     glDeleteProgram = ctx.GetProc<DeleteProgram>("glDeleteProgram");
     glDeleteShader = ctx.GetProc<DeleteShader>("glDeleteShader");
     glDetachShader = ctx.GetProc<DetachShader>("glDetachShader");
     glDisableVertexAttribArray = ctx.GetProc<DisableVertexAttribArray>("glDisableVertexAttribArray");
     glEnableVertexAttribArray = ctx.GetProc<EnableVertexAttribArray>("glEnableVertexAttribArray");
     glGetActiveAttrib = ctx.GetProc<GetActiveAttrib>("glGetActiveAttrib");
     glGetActiveUniform = ctx.GetProc<GetActiveUniform>("glGetActiveUniform");
     glGetAttachedShaders = ctx.GetProc<GetAttachedShaders>("glGetAttachedShaders");
     glGetAttribLocation = ctx.GetProc<GetAttribLocation>("glGetAttribLocation");
     glGetProgramiv = ctx.GetProc<GetProgramiv>("glGetProgramiv");
     glGetProgramInfoLog = ctx.GetProc<GetProgramInfoLog>("glGetProgramInfoLog");
     glGetShaderiv = ctx.GetProc<GetShaderiv>("glGetShaderiv");
     glGetShaderInfoLog = ctx.GetProc<GetShaderInfoLog>("glGetShaderInfoLog");
     glGetShaderSource = ctx.GetProc<GetShaderSource>("glGetShaderSource");
     glGetUniformLocation = ctx.GetProc<GetUniformLocation>("glGetUniformLocation");
     glGetUniformfv = ctx.GetProc<GetUniformfv>("glGetUniformfv");
     glGetUniformiv = ctx.GetProc<GetUniformiv>("glGetUniformiv");
     glGetVertexAttribdv = ctx.GetProc<GetVertexAttribdv>("glGetVertexAttribdv");
     glGetVertexAttribfv = ctx.GetProc<GetVertexAttribfv>("glGetVertexAttribfv");
     glGetVertexAttribiv = ctx.GetProc<GetVertexAttribiv>("glGetVertexAttribiv");
     glGetVertexAttribPointerv = ctx.GetProc<GetVertexAttribPointerv>("glGetVertexAttribPointerv");
     glIsProgram = ctx.GetProc<IsProgram>("glIsProgram");
     glIsShader = ctx.GetProc<IsShader>("glIsShader");
     glLinkProgram = ctx.GetProc<LinkProgram>("glLinkProgram");
     glShaderSource = ctx.GetProc<ShaderSource>("glShaderSource");
     glUseProgram = ctx.GetProc<UseProgram>("glUseProgram");
     glUniform1f = ctx.GetProc<Uniform1f>("glUniform1f");
     glUniform2f = ctx.GetProc<Uniform2f>("glUniform2f");
     glUniform3f = ctx.GetProc<Uniform3f>("glUniform3f");
     glUniform4f = ctx.GetProc<Uniform4f>("glUniform4f");
     glUniform1i = ctx.GetProc<Uniform1i>("glUniform1i");
     glUniform2i = ctx.GetProc<Uniform2i>("glUniform2i");
     glUniform3i = ctx.GetProc<Uniform3i>("glUniform3i");
     glUniform4i = ctx.GetProc<Uniform4i>("glUniform4i");
     glUniform1fv = ctx.GetProc<Uniform1fv>("glUniform1fv");
     glUniform2fv = ctx.GetProc<Uniform2fv>("glUniform2fv");
     glUniform3fv = ctx.GetProc<Uniform3fv>("glUniform3fv");
     glUniform4fv = ctx.GetProc<Uniform4fv>("glUniform4fv");
     glUniform1iv = ctx.GetProc<Uniform1iv>("glUniform1iv");
     glUniform2iv = ctx.GetProc<Uniform2iv>("glUniform2iv");
     glUniform3iv = ctx.GetProc<Uniform3iv>("glUniform3iv");
     glUniform4iv = ctx.GetProc<Uniform4iv>("glUniform4iv");
     glUniformMatrix2fv = ctx.GetProc<UniformMatrix2fv>("glUniformMatrix2fv");
     glUniformMatrix3fv = ctx.GetProc<UniformMatrix3fv>("glUniformMatrix3fv");
     glUniformMatrix4fv = ctx.GetProc<UniformMatrix4fv>("glUniformMatrix4fv");
     glValidateProgram = ctx.GetProc<ValidateProgram>("glValidateProgram");
     glVertexAttrib1d = ctx.GetProc<VertexAttrib1d>("glVertexAttrib1d");
     glVertexAttrib1dv = ctx.GetProc<VertexAttrib1dv>("glVertexAttrib1dv");
     glVertexAttrib1f = ctx.GetProc<VertexAttrib1f>("glVertexAttrib1f");
     glVertexAttrib1fv = ctx.GetProc<VertexAttrib1fv>("glVertexAttrib1fv");
     glVertexAttrib1s = ctx.GetProc<VertexAttrib1s>("glVertexAttrib1s");
     glVertexAttrib1sv = ctx.GetProc<VertexAttrib1sv>("glVertexAttrib1sv");
     glVertexAttrib2d = ctx.GetProc<VertexAttrib2d>("glVertexAttrib2d");
     glVertexAttrib2dv = ctx.GetProc<VertexAttrib2dv>("glVertexAttrib2dv");
     glVertexAttrib2f = ctx.GetProc<VertexAttrib2f>("glVertexAttrib2f");
     glVertexAttrib2fv = ctx.GetProc<VertexAttrib2fv>("glVertexAttrib2fv");
     glVertexAttrib2s = ctx.GetProc<VertexAttrib2s>("glVertexAttrib2s");
     glVertexAttrib2sv = ctx.GetProc<VertexAttrib2sv>("glVertexAttrib2sv");
     glVertexAttrib3d = ctx.GetProc<VertexAttrib3d>("glVertexAttrib3d");
     glVertexAttrib3dv = ctx.GetProc<VertexAttrib3dv>("glVertexAttrib3dv");
     glVertexAttrib3f = ctx.GetProc<VertexAttrib3f>("glVertexAttrib3f");
     glVertexAttrib3fv = ctx.GetProc<VertexAttrib3fv>("glVertexAttrib3fv");
     glVertexAttrib3s = ctx.GetProc<VertexAttrib3s>("glVertexAttrib3s");
     glVertexAttrib3sv = ctx.GetProc<VertexAttrib3sv>("glVertexAttrib3sv");
     glVertexAttrib4Nbv = ctx.GetProc<VertexAttrib4Nbv>("glVertexAttrib4Nbv");
     glVertexAttrib4Niv = ctx.GetProc<VertexAttrib4Niv>("glVertexAttrib4Niv");
     glVertexAttrib4Nsv = ctx.GetProc<VertexAttrib4Nsv>("glVertexAttrib4Nsv");
     glVertexAttrib4Nub = ctx.GetProc<VertexAttrib4Nub>("glVertexAttrib4Nub");
     glVertexAttrib4Nubv = ctx.GetProc<VertexAttrib4Nubv>("glVertexAttrib4Nubv");
     glVertexAttrib4Nuiv = ctx.GetProc<VertexAttrib4Nuiv>("glVertexAttrib4Nuiv");
     glVertexAttrib4Nusv = ctx.GetProc<VertexAttrib4Nusv>("glVertexAttrib4Nusv");
     glVertexAttrib4bv = ctx.GetProc<VertexAttrib4bv>("glVertexAttrib4bv");
     glVertexAttrib4d = ctx.GetProc<VertexAttrib4d>("glVertexAttrib4d");
     glVertexAttrib4dv = ctx.GetProc<VertexAttrib4dv>("glVertexAttrib4dv");
     glVertexAttrib4f = ctx.GetProc<VertexAttrib4f>("glVertexAttrib4f");
     glVertexAttrib4fv = ctx.GetProc<VertexAttrib4fv>("glVertexAttrib4fv");
     glVertexAttrib4iv = ctx.GetProc<VertexAttrib4iv>("glVertexAttrib4iv");
     glVertexAttrib4s = ctx.GetProc<VertexAttrib4s>("glVertexAttrib4s");
     glVertexAttrib4sv = ctx.GetProc<VertexAttrib4sv>("glVertexAttrib4sv");
     glVertexAttrib4ubv = ctx.GetProc<VertexAttrib4ubv>("glVertexAttrib4ubv");
     glVertexAttrib4uiv = ctx.GetProc<VertexAttrib4uiv>("glVertexAttrib4uiv");
     glVertexAttrib4usv = ctx.GetProc<VertexAttrib4usv>("glVertexAttrib4usv");
     glVertexAttribPointer = ctx.GetProc<VertexAttribPointer>("glVertexAttribPointer");
 }
Example #23
0
 public static void InitGL_3_1(OpenGLContext ctx)
 {
     glDrawArraysInstanced = ctx.GetProc<DrawArraysInstanced>("glDrawArraysInstanced");
     glDrawElementsInstanced = ctx.GetProc<DrawElementsInstanced>("glDrawElementsInstanced");
     glTexBuffer = ctx.GetProc<TexBuffer>("glTexBuffer");
     glPrimitiveRestartIndex = ctx.GetProc<PrimitiveRestartIndex>("glPrimitiveRestartIndex");
 }
Example #24
0
 public static void InitGL_1_4(OpenGLContext ctx)
 {
     glBlendFuncSeparate = ctx.GetProc<BlendFuncSeparate>("glBlendFuncSeparate");
     glMultiDrawArrays = ctx.GetProc<MultiDrawArrays>("glMultiDrawArrays");
     glMultiDrawElements = ctx.GetProc<MultiDrawElements>("glMultiDrawElements");
     glPointParameterf = ctx.GetProc<PointParameterf>("glPointParameterf");
     glPointParameterfv = ctx.GetProc<PointParameterfv>("glPointParameterfv");
     glPointParameteri = ctx.GetProc<PointParameteri>("glPointParameteri");
     glPointParameteriv = ctx.GetProc<PointParameteriv>("glPointParameteriv");
 }
Example #25
0
        private void lvFiles_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lvFiles.SelectedItems.Count <= 0)
            {
                pbPreview.Width    = 0;
                pbPreview.Visible  = false;
                rtbPreview.Width   = 0;
                rtbPreview.Visible = false;
                splitContainer.SplitterDistance = this.Width;

                lbSelection.Text = String.Empty;

                return;
            }

            if (File.Exists(currentMeshFile))
            {
                File.Delete(currentMeshFile);
            }

            if (File.Exists(currentMeshFile + ".mtl"))
            {
                File.Delete(currentMeshFile + ".mtl");
            }

            if (glControl != null)
            {
                if (glControl.GLrender != null)
                {
                    glControl.GLrender.ClearAllObjects();
                    glControl.GLrender.GLControlInstance.Dispose();
                }
                glControl.Dispose();
            }

            ListViewItem Item = lvFiles.SelectedItems[0];

            lbSelection.Text = String.Format("Sel {0}", Item.Index + 1);

            ImageListIndex indx = FileType.GetImageIndex(Path.GetExtension(Item.Text));

            if (indx == ImageListIndex.Image)
            {
                pbPreview.Width    = 399;
                pbPreview.Visible  = true;
                rtbPreview.Width   = 0;
                rtbPreview.Visible = false;
                pnlPreview.Visible = false;

                ArchiveEntry ent = m_Archive.getByName(Path.GetFileNameWithoutExtension(Item.Text));
                Image        img = null;

                using (MemoryStream ms = new MemoryStream(ent.getData()))
                {
                    try
                    {
                        if (Path.GetExtension(Item.Text) == ".tga")
                        {
                            TargaImage tgaImg = new TargaImage(ms);
                            img = tgaImg.Image;
                        }
                        else
                        {
                            img = Image.FromStream(ms);
                        }
                    }
                    catch
                    { }
                }

                if (img != null)
                {
                    pbPreview.Image    = img;
                    pbPreview.Width    = img.Width;
                    pbPreview.Location = new Point(pbPreview.Location.X, (this.Height / 2) - (img.Height / 2) - 20);
                    splitContainer.SplitterDistance = Math.Max(this.Width - img.Width - 20, 200);
                }
            }
            else if (indx == ImageListIndex.Text)
            {
                pbPreview.Width    = 0;
                pbPreview.Visible  = false;
                rtbPreview.Width   = 500;
                rtbPreview.Visible = true;
                pnlPreview.Visible = false;
                splitContainer.SplitterDistance = this.Width - 500;

                rtbPreview.Text = "";

                ArchiveEntry ent = m_Archive.getByName(Path.GetFileNameWithoutExtension(Item.Text));
                if (ent != null)
                {
                    rtbPreview.Text = Encoding.Default.GetString(ent.getData());
                }
            }
            else if (indx == ImageListIndex.Mesh)
            {
                pnlPreview.Visible = true;
                splitContainer.SplitterDistance = this.Width - 500;

                glControl        = new OGLControl();
                glControl.Parent = pnlPreview;
                glControl.Dock   = DockStyle.Fill;
                glContext        = new OpenGLContext(glControl);
                glControl.GLrender.PrimitiveTypes = OpenTK.Graphics.OpenGL.PrimitiveType.Triangles;
                glControl.GLrender.Camera.ZNear   = 0.01f;
                glControl.GLrender.Camera.ZFar    = float.MaxValue;

                string tempFile = Path.GetTempFileName();
                currentMeshFile = Path.ChangeExtension(Path.GetTempFileName(), "obj");
                ArchiveEntry ent = m_Archive.getByName(Path.GetFileNameWithoutExtension(Item.Text));
                ent.extractTo(tempFile, true);

                using (AssimpContext context = new AssimpContext())
                {
                    Scene mesh = context.ImportFile(tempFile);
                    context.ExportFile(mesh, currentMeshFile, "obj");
                }
                File.Delete(tempFile);

                Model model = new Model(currentMeshFile);

                glControl.GLrender.AddModel(model);
                glControl.GLrender.SelectedModelIndex = 0;
            }
            else
            {
                pbPreview.Width    = 0;
                pbPreview.Visible  = false;
                rtbPreview.Width   = 0;
                rtbPreview.Visible = false;
                pnlPreview.Visible = false;
            }
        }
Example #26
0
 public static void InitVertexArrayObjects(OpenGLContext ctx)
 {
     glBindVertexArray = ctx.GetProc<BindVertexArray>("glBindVertexArray");
     glDeleteVertexArrays = ctx.GetProc<DeleteVertexArrays>("glDeleteVertexArrays");
     glGenVertexArrays = ctx.GetProc<GenVertexArrays>("glGenVertexArrays");
     glIsVertexArray = ctx.GetProc<IsVertexArray>("glIsVertexArray");
 }
Example #27
0
        public GraphicsDevice(IntPtr target)
        {
            context = OpenGLContext.GetContext();

            context.Samples = 4;
            // Create context using platform specific methods
            context.CreateContext(target, IntPtr.Zero, null);
            //GL.InitGeneral(context);
            //foreach (var str in GL.GetSupportedExtensions())
                //Console.WriteLine(str);

            modelview_matrix = new MatrixState();
            projection_matrix = new MatrixState();
            texture_matrix = new MatrixState();
            normal_matrix = new MatrixState();

            var err = GL.glGetError();
            GL.InitGL_1_2(context);
            GL.InitGL_1_3(context);
            GL.InitGL_1_4(context);
            GL.InitGL_1_5(context);
            GL.InitGL_2_0(context);
            GL.InitGL_2_1(context);
            GL.InitGL_3_0(context);
            GL.InitGL_3_1(context);
            GL.InitGL_3_2(context);
            GL.InitFramebuffers(context);
            GL.InitVertexArrayObjects(context);
            var sp = GL.GetSupportedExtensions();
            if (sp.Contains("GL_AMD_debug_output"))
            {
                GL.InitDebugOutputAMD(context);
                GL.glDebugMessageCallbackAMD(new OpenGL.OpenGL.DebugProc(DebugProcecure), IntPtr.Zero);
                GL.glDebugMessageEnableAMD(0, 0, 0, new int[] { }, GL.boolean.TRUE);
            }

            err = GL.glGetError();

            GL.glEnable(GL.Const.GL_TEXTURE_2D);

            state = new OpenGLState(this);
            state.Blend = true;
            state.BlendFunction(Blend.SrcAlpha, Blend.OneMinusSrcAlpha);
            state.Culling = true;
            state.DepthTest = true;
        }
Example #28
0
 public static void InitDebugOutputAMD(OpenGLContext ctx)
 {
     glDebugMessageCallbackAMD = ctx.GetProc<DebugMessageCallbackAMD>("glDebugMessageCallbackAMD");
     glDebugMessageEnableAMD = ctx.GetProc<DebugMessageEnableAMD>("glDebugMessageEnableAMD");
     glDebugMessageInsertAMD = ctx.GetProc<DebugMessageInsertAMD>("glDebugMessageInsertAMD");
     glGetDebugMessageLogAMD = ctx.GetProc<GetDebugMessageLogAMD>("glGetDebugMessageLogAMD");
 }
Example #29
0
 public static void InitFramebuffers(OpenGLContext ctx)
 {
     glIsRenderbuffer = ctx.GetProc<IsRenderbuffer>("glIsRenderbuffer");
     glBindRenderbuffer = ctx.GetProc<BindRenderbuffer>("glBindRenderbuffer");
     glDeleteRenderbuffers = ctx.GetProc<DeleteRenderbuffers>("glDeleteRenderbuffers");
     glGenRenderbuffers = ctx.GetProc<GenRenderbuffers>("glGenRenderbuffers");
     glRenderbufferStorage = ctx.GetProc<RenderbufferStorage>("glRenderbufferStorage");
     glGetRenderbufferParameteriv = ctx.GetProc<GetRenderbufferParameteriv>("glGetRenderbufferParameteriv");
     glIsFramebuffer = ctx.GetProc<IsFramebuffer>("glIsFramebuffer");
     glBindFramebuffer = ctx.GetProc<BindFramebuffer>("glBindFramebuffer");
     glDeleteFramebuffers = ctx.GetProc<DeleteFramebuffers>("glDeleteFramebuffers");
     glGenFramebuffers = ctx.GetProc<GenFramebuffers>("glGenFramebuffers");
     glCheckFramebufferStatus = ctx.GetProc<CheckFramebufferStatus>("glCheckFramebufferStatus");
     glFramebufferTexture1D = ctx.GetProc<FramebufferTexture1D>("glFramebufferTexture1D");
     glFramebufferTexture2D = ctx.GetProc<FramebufferTexture2D>("glFramebufferTexture2D");
     glFramebufferTexture3D = ctx.GetProc<FramebufferTexture3D>("glFramebufferTexture3D");
     glFramebufferRenderbuffer = ctx.GetProc<FramebufferRenderbuffer>("glFramebufferRenderbuffer");
     glGetFramebufferAttachmentParameteriv = ctx.GetProc<GetFramebufferAttachmentParameteriv>("glGetFramebufferAttachmentParameteriv");
     glGenerateMipmap = ctx.GetProc<GenerateMipmap>("glGenerateMipmap");
     glBlitFramebuffer = ctx.GetProc<BlitFramebuffer>("glBlitFramebuffer");
     glRenderbufferStorageMultisample = ctx.GetProc<RenderbufferStorageMultisample>("glRenderbufferStorageMultisample");
     glFramebufferTextureLayer = ctx.GetProc<FramebufferTextureLayer>("glFramebufferTextureLayer");
 }
Example #30
0
 public override void Update()
 {
     OpenGLContext.Update();
 }
Example #31
0
 public GLxDisplayText(OpenGLContext context)
 {
     m_Context = context;
 }
Example #32
0
        public void Render()
        {
            // First take exclusivity on the OpenGL context.
            _renderer.InitializeBackgroundContext(SPBOpenGLContext.CreateBackgroundContext(OpenGLContext));

            Gtk.Window parent = Toplevel as Gtk.Window;
            parent.Present();

            OpenGLContext.MakeCurrent(NativeWindow);

            _device.Gpu.Renderer.Initialize(_glLogLevel);

            // Make sure the first frame is not transparent.
            GL.ClearColor(0, 0, 0, 1.0f);
            GL.Clear(ClearBufferMask.ColorBufferBit);
            SwapBuffers();

            _device.Gpu.InitializeShaderCache();
            Translator.IsReadyForTranslation.Set();

            while (_isActive)
            {
                if (_isStopped)
                {
                    return;
                }

                _ticks += _chrono.ElapsedTicks;

                _chrono.Restart();

                if (_device.WaitFifo())
                {
                    _device.Statistics.RecordFifoStart();
                    _device.ProcessFrame();
                    _device.Statistics.RecordFifoEnd();
                }

                while (_device.ConsumeFrameAvailable())
                {
                    _device.PresentFrame(SwapBuffers);
                }

                if (_ticks >= _ticksPerFrame)
                {
                    string dockedMode = ConfigurationState.Instance.System.EnableDockedMode ? "Docked" : "Handheld";
                    float  scale      = Graphics.Gpu.GraphicsConfig.ResScale;
                    if (scale != 1)
                    {
                        dockedMode += $" ({scale}x)";
                    }

                    StatusUpdatedEvent?.Invoke(this, new StatusUpdatedEventArgs(
                                                   _device.EnableDeviceVsync,
                                                   dockedMode,
                                                   ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(),
                                                   $"Game: {_device.Statistics.GetGameFrameRate():00.00} FPS",
                                                   $"FIFO: {_device.Statistics.GetFifoPercent():0.00} %",
                                                   $"GPU:  {_renderer.GpuVendor}"));

                    _ticks = Math.Min(_ticks - _ticksPerFrame, _ticksPerFrame);
                }
            }
        }
Example #33
0
 public virtual void MakeCurrent()
 {
     AssertValid();
     AssertContext();
     OpenGLContext.MakeCurrentContext();
 }
Example #34
0
 public static void InitGL_1_3(OpenGLContext ctx)
 {
     glActiveTexture = ctx.GetProc<ActiveTexture>("glActiveTexture");
     glSampleCoverage = ctx.GetProc<SampleCoverage>("glSampleCoverage");
     glCompressedTexImage3D = ctx.GetProc<CompressedTexImage3D>("glCompressedTexImage3D");
     glCompressedTexImage2D = ctx.GetProc<CompressedTexImage2D>("glCompressedTexImage2D");
     glCompressedTexImage1D = ctx.GetProc<CompressedTexImage1D>("glCompressedTexImage1D");
     glCompressedTexSubImage3D = ctx.GetProc<CompressedTexSubImage3D>("glCompressedTexSubImage3D");
     glCompressedTexSubImage2D = ctx.GetProc<CompressedTexSubImage2D>("glCompressedTexSubImage2D");
     glCompressedTexSubImage1D = ctx.GetProc<CompressedTexSubImage1D>("glCompressedTexSubImage1D");
     glGetCompressedTexImage = ctx.GetProc<GetCompressedTexImage>("glGetCompressedTexImage");
 }
Example #35
0
 public static void InitGL_3_2(OpenGLContext ctx)
 {
     glGetInteger64i_v = ctx.GetProc<GetInteger64i_v>("glGetInteger64i_v");
     glGetBufferParameteri64v = ctx.GetProc<GetBufferParameteri64v>("glGetBufferParameteri64v");
     glProgramParameteri = ctx.GetProc<ProgramParameteri>("glProgramParameteri");
     glFramebufferTexture = ctx.GetProc<FramebufferTexture>("glFramebufferTexture");
 }
Example #36
0
 public static void InitGL_1_5(OpenGLContext ctx)
 {
     glDeleteQueries = ctx.GetProc<DeleteQueries>("glDeleteQueries");
     glIsQuery = ctx.GetProc<IsQuery>("glIsQuery");
     glBeginQuery = ctx.GetProc<BeginQuery>("glBeginQuery");
     glEndQuery = ctx.GetProc<EndQuery>("glEndQuery");
     glGetQueryiv = ctx.GetProc<GetQueryiv>("glGetQueryiv");
     glGetQueryObjectiv = ctx.GetProc<GetQueryObjectiv>("glGetQueryObjectiv");
     glGetQueryObjectuiv = ctx.GetProc<GetQueryObjectuiv>("glGetQueryObjectuiv");
     glBindBuffer = ctx.GetProc<BindBuffer>("glBindBuffer");
     glDeleteBuffers = ctx.GetProc<DeleteBuffers>("glDeleteBuffers");
     glGenBuffers = ctx.GetProc<GenBuffers>("glGenBuffers");
     glIsBuffer = ctx.GetProc<IsBuffer>("glIsBuffer");
     glBufferData = ctx.GetProc<BufferData>("glBufferData");
     glBufferSubData = ctx.GetProc<BufferSubData>("glBufferSubData");
     glGetBufferSubData = ctx.GetProc<GetBufferSubData>("glGetBufferSubData");
     glMapBuffer = ctx.GetProc<MapBuffer>("glMapBuffer");
     glUnmapBuffer = ctx.GetProc<UnmapBuffer>("glUnmapBuffer");
     glGetBufferParameteriv = ctx.GetProc<GetBufferParameteriv>("glGetBufferParameteriv");
     glGetBufferPointerv = ctx.GetProc<GetBufferPointerv>("glGetBufferPointerv");
 }
Example #37
0
 public OpenGLDevice(OpenGLGraphics gp, OpenGLContext context)
 {
     m_OpenGL = gp;
     m_Context = context;
 }
Example #38
0
 public static void InitGL_1_2(OpenGLContext ctx)
 {
     glBlendColor = ctx.GetProc<BlendColor>("glBlendColor");
     glBlendEquation = ctx.GetProc<BlendEquation>("glBlendEquation");
     glDrawRangeElements = ctx.GetProc<DrawRangeElements>("glDrawRangeElements");
     glTexImage3D = ctx.GetProc<TexImage3D>("glTexImage3D");
     glTexSubImage3D = ctx.GetProc<TexSubImage3D>("glTexSubImage3D");
     glCopyTexSubImage3D = ctx.GetProc<CopyTexSubImage3D>("glCopyTexSubImage3D");
 }