Skip to content

Commit

Permalink
Add uniform_matrix_CxR_f32_slice
Browse files Browse the repository at this point in the history
  • Loading branch information
cwfitzgerald authored and grovesNL committed Nov 1, 2023
1 parent 551c5ca commit 29ff917
Show file tree
Hide file tree
Showing 3 changed files with 240 additions and 0 deletions.
42 changes: 42 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -816,13 +816,55 @@ pub trait HasContext {
v: &[f32],
);

unsafe fn uniform_matrix_2x3_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
);

unsafe fn uniform_matrix_2x4_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
);

unsafe fn uniform_matrix_3x2_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
);

unsafe fn uniform_matrix_3_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
);

unsafe fn uniform_matrix_3x4_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
);

unsafe fn uniform_matrix_4x2_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
);

unsafe fn uniform_matrix_4x3_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
);

unsafe fn uniform_matrix_4_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
Expand Down
102 changes: 102 additions & 0 deletions src/native.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1893,6 +1893,57 @@ impl HasContext for Context {
}
}

unsafe fn uniform_matrix_2x3_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
let gl = &self.raw;
if let Some(loc) = location {
gl.UniformMatrix2x3fv(
loc.0 as i32,
v.len() as i32 / 6,
transpose as u8,
v.as_ptr(),
);
}
}

unsafe fn uniform_matrix_2x4_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
let gl = &self.raw;
if let Some(loc) = location {
gl.UniformMatrix2x4fv(
loc.0 as i32,
v.len() as i32 / 8,
transpose as u8,
v.as_ptr(),
);
}
}

unsafe fn uniform_matrix_3x2_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
let gl = &self.raw;
if let Some(loc) = location {
gl.UniformMatrix3x2fv(
loc.0 as i32,
v.len() as i32 / 6,
transpose as u8,
v.as_ptr(),
);
}
}

unsafe fn uniform_matrix_3_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
Expand All @@ -1910,6 +1961,57 @@ impl HasContext for Context {
}
}

unsafe fn uniform_matrix_3x4_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
let gl = &self.raw;
if let Some(loc) = location {
gl.UniformMatrix3x4fv(
loc.0 as i32,
v.len() as i32 / 12,
transpose as u8,
v.as_ptr(),
);
}
}

unsafe fn uniform_matrix_4x2_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
let gl = &self.raw;
if let Some(loc) = location {
gl.UniformMatrix4x2fv(
loc.0 as i32,
v.len() as i32 / 8,
transpose as u8,
v.as_ptr(),
);
}
}

unsafe fn uniform_matrix_4x3_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
let gl = &self.raw;
if let Some(loc) = location {
gl.UniformMatrix4x3fv(
loc.0 as i32,
v.len() as i32 / 12,
transpose as u8,
v.as_ptr(),
);
}
}

unsafe fn uniform_matrix_4_f32_slice(
&self,
location: Option<&Self::UniformLocation>,
Expand Down
96 changes: 96 additions & 0 deletions src/web_sys.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3535,6 +3535,54 @@ impl HasContext for Context {
}
}

unsafe fn uniform_matrix_2x3_f32_slice(
&self,
uniform_location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
match self.raw {
RawRenderingContext::WebGl1(ref gl) => {
panic!("2x3 matrices not supported in uniforms");
}
RawRenderingContext::WebGl2(ref gl) => {
gl.uniform_matrix2x3fv_with_f32_array(uniform_location, transpose, v)
}
}
}

unsafe fn uniform_matrix_2x4_f32_slice(
&self,
uniform_location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
match self.raw {
RawRenderingContext::WebGl1(ref gl) => {
panic!("2x4 matrices not supported in uniforms");
}
RawRenderingContext::WebGl2(ref gl) => {
gl.uniform_matrix2x4fv_with_f32_array(uniform_location, transpose, v)
}
}
}

unsafe fn uniform_matrix_3x2_f32_slice(
&self,
uniform_location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
match self.raw {
RawRenderingContext::WebGl1(ref gl) => {
panic!("3x2 matrices not supported in uniforms");
}
RawRenderingContext::WebGl2(ref gl) => {
gl.uniform_matrix3x2fv_with_f32_array(uniform_location, transpose, v)
}
}
}

unsafe fn uniform_matrix_3_f32_slice(
&self,
uniform_location: Option<&Self::UniformLocation>,
Expand All @@ -3551,6 +3599,54 @@ impl HasContext for Context {
}
}

unsafe fn uniform_matrix_3x4_f32_slice(
&self,
uniform_location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
match self.raw {
RawRenderingContext::WebGl1(ref gl) => {
panic!("3x4 matrices not supported in uniforms");
}
RawRenderingContext::WebGl2(ref gl) => {
gl.uniform_matrix3x4fv_with_f32_array(uniform_location, transpose, v)
}
}
}

unsafe fn uniform_matrix_4x2_f32_slice(
&self,
uniform_location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
match self.raw {
RawRenderingContext::WebGl1(ref gl) => {
panic!("4x2 matrices not supported in uniforms");
}
RawRenderingContext::WebGl2(ref gl) => {
gl.uniform_matrix4x2fv_with_f32_array(uniform_location, transpose, v)
}
}
}

unsafe fn uniform_matrix_4x3_f32_slice(
&self,
uniform_location: Option<&Self::UniformLocation>,
transpose: bool,
v: &[f32],
) {
match self.raw {
RawRenderingContext::WebGl1(ref gl) => {
panic!("4x3 matrices not supported in uniforms");
}
RawRenderingContext::WebGl2(ref gl) => {
gl.uniform_matrix4x3fv_with_f32_array(uniform_location, transpose, v)
}
}
}

unsafe fn uniform_matrix_4_f32_slice(
&self,
uniform_location: Option<&Self::UniformLocation>,
Expand Down

0 comments on commit 29ff917

Please sign in to comment.