mirror of
https://github.com/servo/servo.git
synced 2025-08-07 14:35:33 +01:00
Add support for WebGL2 FramebufferTextureLayer
Adds support for `FramebufferTextureLayer` WebGL2 call. See: https://www.khronos.org/registry/webgl/specs/latest/2.0/#3.7.4
This commit is contained in:
parent
61cf25c98a
commit
8389189d94
9 changed files with 145 additions and 39 deletions
|
@ -35,7 +35,7 @@ raqote = {git = "https://github.com/jrmuizel/raqote"}
|
|||
time = { version = "0.1.0", optional = true }
|
||||
pixels = {path = "../pixels"}
|
||||
servo_config = {path = "../config"}
|
||||
sparkle = "0.1.19"
|
||||
sparkle = "0.1.20"
|
||||
webrender = {git = "https://github.com/servo/webrender"}
|
||||
webrender_api = {git = "https://github.com/servo/webrender"}
|
||||
webrender_traits = {path = "../webrender_traits"}
|
||||
|
|
|
@ -79,6 +79,8 @@ impl GLLimitsDetect for GLLimits {
|
|||
max_vertex_uniform_components,
|
||||
max_fragment_uniform_blocks,
|
||||
max_fragment_uniform_components,
|
||||
max_3d_texture_size,
|
||||
max_array_texture_layers,
|
||||
uniform_buffer_offset_alignment,
|
||||
);
|
||||
if webgl_version == WebGLVersion::WebGL2 {
|
||||
|
@ -102,6 +104,8 @@ impl GLLimitsDetect for GLLimits {
|
|||
max_fragment_uniform_blocks = gl.get_integer(gl::MAX_FRAGMENT_UNIFORM_BLOCKS);
|
||||
max_fragment_uniform_components = gl.get_integer(gl::MAX_FRAGMENT_UNIFORM_COMPONENTS);
|
||||
uniform_buffer_offset_alignment = gl.get_integer(gl::UNIFORM_BUFFER_OFFSET_ALIGNMENT);
|
||||
max_3d_texture_size = gl.get_integer(gl::MAX_3D_TEXTURE_SIZE);
|
||||
max_array_texture_layers = gl.get_integer(gl::MAX_ARRAY_TEXTURE_LAYERS)
|
||||
} else {
|
||||
max_uniform_block_size = 0;
|
||||
max_uniform_buffer_bindings = 0;
|
||||
|
@ -118,6 +122,8 @@ impl GLLimitsDetect for GLLimits {
|
|||
max_fragment_uniform_blocks = 0;
|
||||
max_fragment_uniform_components = 0;
|
||||
uniform_buffer_offset_alignment = 0;
|
||||
max_3d_texture_size = 0;
|
||||
max_array_texture_layers = 0;
|
||||
}
|
||||
|
||||
GLLimits {
|
||||
|
@ -148,6 +154,8 @@ impl GLLimitsDetect for GLLimits {
|
|||
max_vertex_uniform_components,
|
||||
max_fragment_uniform_blocks,
|
||||
max_fragment_uniform_components,
|
||||
max_3d_texture_size,
|
||||
max_array_texture_layers,
|
||||
uniform_buffer_offset_alignment,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1974,6 +1974,19 @@ impl WebGLImpl {
|
|||
WebGLCommand::InvalidateSubFramebuffer(target, ref attachments, x, y, w, h) => {
|
||||
gl.invalidate_sub_framebuffer(target, attachments, x, y, w, h)
|
||||
},
|
||||
WebGLCommand::FramebufferTextureLayer(target, attachment, tex_id, level, layer) => {
|
||||
let tex_id = tex_id.map_or(0, WebGLTextureId::get);
|
||||
let attach = |attachment| {
|
||||
gl.framebuffer_texture_layer(target, attachment, tex_id, level, layer)
|
||||
};
|
||||
|
||||
if attachment == gl::DEPTH_STENCIL_ATTACHMENT {
|
||||
attach(gl::DEPTH_ATTACHMENT);
|
||||
attach(gl::STENCIL_ATTACHMENT);
|
||||
} else {
|
||||
attach(attachment)
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
// If debug asertions are enabled, then check the error state.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue