public void CreateTextureRender(GLContext control, EventHandler thumbnailUpdate, int width = 50, int height = 50) { var shader = GlobalShaders.GetShader("SCREEN"); Framebuffer frameBuffer = new Framebuffer(FramebufferTarget.Framebuffer, width, height); frameBuffer.Bind(); GL.ClearColor(0, 0, 0, 0); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.Viewport(0, 0, width, height); GL.Disable(EnableCap.Blend); shader.Enable(); //Draw the texture onto the framebuffer ScreenQuadRender.Draw(shader, RenderableTex.ID); //Disable shader and textures GL.UseProgram(0); GL.BindTexture(TextureTarget.Texture2D, 0); var thumbnail = frameBuffer.ReadImagePixels(true); thumbnail.RotateFlip(System.Drawing.RotateFlipType.RotateNoneFlipY); //Dispose frame buffer frameBuffer.Dispoe(); frameBuffer.DisposeRenderBuffer(); this.Thumbnail = thumbnail; thumbnailUpdate?.Invoke(this, EventArgs.Empty); }
private void GenerateRender(GLContext control, EventHandler thumbnailUpdate) { Framebuffer frameBuffer = new Framebuffer(FramebufferTarget.Framebuffer, Width, Height); frameBuffer.Bind(); GL.ClearColor(0, 0, 0, 0); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.Viewport(0, 0, control.Width, control.Height); var camMtx = Camera.ViewMatrix; var projMtx = Camera.ProjectionMatrix; //Draw all the models into the current camera screen // scene.Draw(control, Pass.OPAQUE); // scene.Draw(control, Pass.TRANSPARENT); //Disable shader and textures GL.UseProgram(0); GL.BindTexture(TextureTarget.Texture2D, 0); RenderedScreen = (GLTexture2D)frameBuffer.Attachments[1]; var thumbnail = frameBuffer.ReadImagePixels(true); //Dispose frame buffer frameBuffer.Dispoe(); frameBuffer.DisposeRenderBuffer(); this.Thumbnail = thumbnail; thumbnailUpdate?.Invoke(this, EventArgs.Empty); }
public void CreateMaterialRender(GLContext control, GenericPickableMesh mesh, RenderObject renderObject, EventHandler thumbnailUpdated, int width = 50, int height = 50) { ShaderProgram shader = this.GetShader(); if (shader == null) { return; } Framebuffer frameBuffer = new Framebuffer(FramebufferTarget.Framebuffer, width, height); frameBuffer.Bind(); //Create a simple mvp matrix to render the material data Matrix4 modelMatrix = Matrix4.CreateTranslation(0, 0, -12); Matrix4 viewMatrix = Matrix4.Identity; Matrix4 mtxProj = Matrix4.CreatePerspectiveFieldOfView(MathHelper.DegreesToRadians(90), 1.0f, 1.0f, 1000f); Matrix4 viewProj = mtxProj * viewMatrix; GL.UseProgram(shader.program); shader.SetMatrix4x4("mtxCam", ref viewProj); shader.SetMatrix4x4("mtxMdl", ref modelMatrix); shader.SetVector3("camPosition", control.Camera.TargetPosition); shader.SetVector2("iResolution", new Vector2(control.Width, control.Height)); shader.SetInt("materialRenderDisplay", 1); GL.ClearColor(0, 0, 0, 0); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); GL.Viewport(0, 0, width, height); //Render material data onto a textured sphere Render(control, shader, mesh); GL.Enable(EnableCap.Blend); GL.BlendFuncSeparate( BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha, BlendingFactorSrc.One, BlendingFactorDest.OneMinusSrcAlpha); //Draw the model to render onto switch (renderObject) { case RenderObject.Sphere: DrawSphere(control); break; case RenderObject.Plane: DrawPlane(control); break; } //Disable the uniform data shader.SetInt("materialRenderDisplay", 0); //Disable shader and textures GL.UseProgram(0); GL.BindTexture(TextureTarget.Texture2D, 0); var thumbnail = frameBuffer.ReadImagePixels(true); //Dispose frame buffer frameBuffer.Dispoe(); frameBuffer.DisposeRenderBuffer(); this.Thumbnail = thumbnail; thumbnailUpdated?.Invoke(this, EventArgs.Empty); }