Make TexImage2D and TexSubImage2D struct variants

This commit is contained in:
Anthony Ramine 2018-11-15 10:32:20 +01:00
parent da43e35ab2
commit 65d1b11929
3 changed files with 70 additions and 47 deletions

View file

@ -1042,47 +1042,51 @@ impl WebGLImpl {
WebGLCommand::SetViewport(x, y, width, height) => { WebGLCommand::SetViewport(x, y, width, height) => {
ctx.gl().viewport(x, y, width, height); ctx.gl().viewport(x, y, width, height);
}, },
WebGLCommand::TexImage2D( WebGLCommand::TexImage2D {
target, target,
level, level,
internal, internal_format,
width, width,
height, height,
format, format,
data_type, data_type,
ref chan, ref receiver,
) => ctx.gl().tex_image_2d( } => {
ctx.gl().tex_image_2d(
target,
level as i32,
internal_format as i32,
width as i32,
height as i32,
0,
format,
data_type,
Some(&receiver.recv().unwrap()),
);
},
WebGLCommand::TexSubImage2D {
target, target,
level, level,
internal, xoffset,
yoffset,
width, width,
height, height,
0,
format, format,
data_type, data_type,
Some(&chan.recv().unwrap()), ref receiver,
), } => {
WebGLCommand::TexSubImage2D( ctx.gl().tex_sub_image_2d(
target, target,
level, level as i32,
xoffset, xoffset,
yoffset, yoffset,
x, width as i32,
y, height as i32,
width, format,
height, data_type,
ref chan, &receiver.recv().unwrap(),
) => ctx.gl().tex_sub_image_2d( );
target, },
level,
xoffset,
yoffset,
x,
y,
width,
height,
&chan.recv().unwrap(),
),
WebGLCommand::DrawingBufferWidth(ref sender) => sender WebGLCommand::DrawingBufferWidth(ref sender) => sender
.send(ctx.borrow_draw_buffer().unwrap().size().width) .send(ctx.borrow_draw_buffer().unwrap().size().width)
.unwrap(), .unwrap(),

View file

@ -272,8 +272,27 @@ pub enum WebGLCommand {
VertexAttribPointer(u32, i32, u32, bool, i32, u32), VertexAttribPointer(u32, i32, u32, bool, i32, u32),
VertexAttribPointer2f(u32, i32, bool, i32, u32), VertexAttribPointer2f(u32, i32, bool, i32, u32),
SetViewport(i32, i32, i32, i32), SetViewport(i32, i32, i32, i32),
TexImage2D(u32, i32, i32, i32, i32, u32, u32, IpcBytesReceiver), TexImage2D {
TexSubImage2D(u32, i32, i32, i32, i32, i32, u32, u32, IpcBytesReceiver), target: u32,
level: u32,
internal_format: u32,
width: u32,
height: u32,
format: u32,
data_type: u32,
receiver: IpcBytesReceiver,
},
TexSubImage2D {
target: u32,
level: u32,
xoffset: i32,
yoffset: i32,
width: u32,
height: u32,
format: u32,
data_type: u32,
receiver: IpcBytesReceiver,
},
DrawingBufferWidth(WebGLSender<i32>), DrawingBufferWidth(WebGLSender<i32>),
DrawingBufferHeight(WebGLSender<i32>), DrawingBufferHeight(WebGLSender<i32>),
Finish(WebGLSender<()>), Finish(WebGLSender<()>),

View file

@ -739,16 +739,16 @@ impl WebGLRenderingContext {
// TODO(emilio): convert colorspace if requested // TODO(emilio): convert colorspace if requested
let (sender, receiver) = ipc::bytes_channel().unwrap(); let (sender, receiver) = ipc::bytes_channel().unwrap();
self.send_command(WebGLCommand::TexImage2D( self.send_command(WebGLCommand::TexImage2D {
target.as_gl_constant(), target: target.as_gl_constant(),
level as i32, level,
internal_format as i32, internal_format,
width as i32, width,
height as i32, height,
format, format,
self.extension_manager.effective_type(data_type), data_type: self.extension_manager.effective_type(data_type),
receiver, receiver,
)); });
sender.send(&pixels).unwrap(); sender.send(&pixels).unwrap();
if let Some(fb) = self.bound_framebuffer.get() { if let Some(fb) = self.bound_framebuffer.get() {
@ -817,17 +817,17 @@ impl WebGLRenderingContext {
// TODO(emilio): convert colorspace if requested // TODO(emilio): convert colorspace if requested
let (sender, receiver) = ipc::bytes_channel().unwrap(); let (sender, receiver) = ipc::bytes_channel().unwrap();
self.send_command(WebGLCommand::TexSubImage2D( self.send_command(WebGLCommand::TexSubImage2D {
target.as_gl_constant(), target: target.as_gl_constant(),
level as i32, level,
xoffset, xoffset,
yoffset, yoffset,
width as i32, width,
height as i32, height,
format.as_gl_constant(), format: format.as_gl_constant(),
data_type.as_gl_constant(), data_type: data_type.as_gl_constant(),
receiver, receiver,
)); });
sender.send(&pixels).unwrap(); sender.send(&pixels).unwrap();
} }