mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 19:12:43 +00:00 
			
		
		
		
	 bd08b1815f
			
		
	
	
		bd08b1815f
		
	
	
	
	
		
			
			It is implemented in the way identical to how it works in CPU painter: 1. SampleUnderCorners command saves pixels within corners into a texture. 2. BlitCornerClipping command uses the texture prepared earlier to restore pixels within corners.
		
			
				
	
	
		
			121 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2023, Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/Vector.h>
 | |
| #ifdef AK_OS_MACOS
 | |
| #    define GL_SILENCE_DEPRECATION
 | |
| #    include <OpenGL/OpenGL.h>
 | |
| #    include <OpenGL/gl3.h>
 | |
| #else
 | |
| #    include <GL/gl.h>
 | |
| #endif
 | |
| #include <LibGfx/Forward.h>
 | |
| #include <LibGfx/Rect.h>
 | |
| 
 | |
| namespace AccelGfx::GL {
 | |
| 
 | |
| enum class ShaderType {
 | |
|     Vertex,
 | |
|     Fragment,
 | |
| };
 | |
| 
 | |
| struct Shader {
 | |
|     GLuint id;
 | |
| };
 | |
| 
 | |
| struct Program {
 | |
|     GLuint id;
 | |
| };
 | |
| 
 | |
| struct VertexAttribute {
 | |
|     GLint id;
 | |
| };
 | |
| 
 | |
| struct Uniform {
 | |
|     GLint id;
 | |
| };
 | |
| 
 | |
| struct Texture {
 | |
|     GLuint id;
 | |
|     Optional<Gfx::IntSize> size;
 | |
| };
 | |
| 
 | |
| struct Buffer {
 | |
|     GLuint id;
 | |
| };
 | |
| 
 | |
| struct VertexArray {
 | |
|     GLuint id;
 | |
| };
 | |
| 
 | |
| struct Framebuffer {
 | |
|     GLuint fbo_id;
 | |
|     GL::Texture texture;
 | |
| };
 | |
| 
 | |
| void set_viewport(Gfx::IntRect);
 | |
| 
 | |
| enum class BlendFactor {
 | |
|     Zero,
 | |
|     One,
 | |
|     OneMinusSrcAlpha,
 | |
|     SrcAlpha,
 | |
| };
 | |
| void enable_blending(BlendFactor source, BlendFactor destination, BlendFactor source_alpha, BlendFactor destination_alpha);
 | |
| 
 | |
| void read_pixels(Gfx::IntRect, Gfx::Bitmap&);
 | |
| 
 | |
| Shader create_shader(ShaderType type, char const* source);
 | |
| Program create_program(Shader const& vertex_shader, Shader const& fragment_shader);
 | |
| void use_program(Program const&);
 | |
| VertexAttribute get_attribute_location(Program const&, char const* name);
 | |
| Uniform get_uniform_location(Program const&, char const* name);
 | |
| void delete_program(Program const&);
 | |
| 
 | |
| Texture create_texture();
 | |
| void bind_texture(Texture const&);
 | |
| void upload_texture_data(Texture& texture, Gfx::Bitmap const& bitmap);
 | |
| void delete_texture(Texture const&);
 | |
| 
 | |
| void set_uniform(Uniform const& uniform, int);
 | |
| void set_uniform(Uniform const& uniform, float, float);
 | |
| void set_uniform(Uniform const& uniform, float, float, float, float);
 | |
| void set_vertex_attribute(VertexAttribute const& attribute, u32 offset, int number_of_components);
 | |
| 
 | |
| enum class ScalingMode {
 | |
|     Nearest,
 | |
|     Linear,
 | |
| };
 | |
| void set_texture_scale_mode(ScalingMode);
 | |
| 
 | |
| void clear_color(Gfx::Color const&);
 | |
| 
 | |
| enum class DrawPrimitive {
 | |
|     Triangles,
 | |
|     TriangleFan,
 | |
| };
 | |
| 
 | |
| void draw_arrays(DrawPrimitive, size_t count);
 | |
| 
 | |
| Buffer create_buffer();
 | |
| void bind_buffer(Buffer const&);
 | |
| void upload_to_buffer(Buffer const&, Span<float> values);
 | |
| void delete_buffer(Buffer const&);
 | |
| 
 | |
| VertexArray create_vertex_array();
 | |
| void bind_vertex_array(VertexArray const&);
 | |
| void delete_vertex_array(VertexArray const&);
 | |
| 
 | |
| Framebuffer create_framebuffer(Gfx::IntSize);
 | |
| void bind_framebuffer(Framebuffer const& framebuffer);
 | |
| void delete_framebuffer(Framebuffer const& framebuffer);
 | |
| 
 | |
| void enable_scissor_test(Gfx::IntRect);
 | |
| void disable_scissor_test();
 | |
| 
 | |
| }
 |