Esempio n. 1
0
            public void Use()
            {
                DebugTools.Assert(ObjectHandle != 0);

                GL.BindBuffer(Type, ObjectHandle);
                _clyde.CheckGlError();
            }
Esempio n. 2
0
            public GLBuffer(Clyde clyde, BufferTarget type, BufferUsageHint usage, string?name = null)
            {
                _clyde    = clyde;
                Type      = type;
                Name      = name;
                UsageHint = usage;

                GL.GenBuffers(1, out uint handle);
                clyde.CheckGlError();
                ObjectHandle = handle;

                GL.BindBuffer(type, handle);
                clyde.CheckGlError();

                _clyde.ObjectLabelMaybe(ObjectLabelIdentifier.Buffer, ObjectHandle, name);
            }
Esempio n. 3
0
            private void Compile(ShaderType type, string shaderSource)
            {
                ObjectHandle = (uint)GL.CreateShader(type);
                Type         = type;
                GL.ShaderSource((int)ObjectHandle, shaderSource);
                _clyde.CheckGlError();
                GL.CompileShader(ObjectHandle);
                _clyde.CheckGlError();

                GL.GetShader(ObjectHandle, ShaderParameter.CompileStatus, out var compiled);
                _clyde.CheckGlError();
                if (compiled != 1)
                {
                    var message = GL.GetShaderInfoLog((int)ObjectHandle);
                    _clyde.CheckGlError();
                    Delete();
                    throw new ShaderCompilationException(message);
                }
            }
Esempio n. 4
0
            public override void BindWindowRenderTarget(WindowId rtWindowId)
            {
                var data   = _windowData[rtWindowId];
                var result = eglMakeCurrent(_eglDisplay, data.EglBackbuffer, data.EglBackbuffer, _eglContext);

                if (result == EGL_FALSE)
                {
                    throw new Exception("eglMakeCurrent failed.");
                }

                GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
                Clyde.CheckGlError();
            }
Esempio n. 5
0
            public override void BindWindowRenderTarget(WindowId rtWindowId)
            {
                var data = _windowData[rtWindowId];

                if (data.Reg.IsMainWindow)
                {
                    GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
                    Clyde.CheckGlError();
                }
                else
                {
                    var loaded = Clyde.RtToLoaded(data.RenderTexture !);
                    GL.BindFramebuffer(FramebufferTarget.Framebuffer, loaded.FramebufferHandle.Handle);
                }
            }
Esempio n. 6
0
            private void BlitThreadDoSecondaryWindowBlit(WindowData window)
            {
                var rt = window.RenderTexture !;

                if (Clyde._hasGLFenceSync)
                {
                    // 0xFFFFFFFFFFFFFFFFUL is GL_TIMEOUT_IGNORED
                    var sync = rt.LastGLSync;
                    GL.WaitSync(sync, WaitSyncFlags.None, unchecked ((long)0xFFFFFFFFFFFFFFFFUL));
                    Clyde.CheckGlError();
                }

                GL.Viewport(0, 0, window.Reg.FramebufferSize.X, window.Reg.FramebufferSize.Y);
                Clyde.CheckGlError();

                Clyde.SetTexture(TextureUnit.Texture0, window.RenderTexture !.Texture);

                GL.DrawArrays(PrimitiveType.TriangleStrip, 0, 4);
                Clyde.CheckGlError();

                window.BlitDoneEvent?.Set();
                Clyde._windowing !.WindowSwapBuffers(window.Reg);
            }