gl: fix ubo binding
This commit is contained in:
parent
3aee36a361
commit
83dc63ffe0
|
@ -177,14 +177,15 @@ impl FilterPass {
|
||||||
self.build_semantics(parent, mvp, frame_count, frame_direction, fb_size, viewport, original, source);
|
self.build_semantics(parent, mvp, frame_count, frame_direction, fb_size, viewport, original, source);
|
||||||
// shader_gl3:1514
|
// shader_gl3:1514
|
||||||
|
|
||||||
if !self.ubo_location.vertex == gl::INVALID_INDEX && !self.ubo_location.fragment == gl::INVALID_INDEX {
|
if self.ubo_location.vertex != gl::INVALID_INDEX && self.ubo_location.fragment != gl::INVALID_INDEX {
|
||||||
if let (Some(ubo), Some(ring)) = (&self.reflection.ubo, &mut self.ubo_ring) {
|
if let (Some(ubo), Some(ring)) = (&self.reflection.ubo, &mut self.ubo_ring) {
|
||||||
let size = ubo.size;
|
let size = ubo.size;
|
||||||
let buffer = ring.current();
|
let buffer = ring.current();
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
gl::BindBuffer(gl::UNIFORM_BUFFER, *buffer);
|
gl::BindBuffer(gl::UNIFORM_BUFFER, *buffer);
|
||||||
gl::BufferSubData(gl::UNIFORM_BUFFER, 0, size as GLsizeiptr, self.uniform_buffer.as_ptr().cast());
|
gl::BufferSubData(gl::UNIFORM_BUFFER, 0, size as GLsizeiptr,
|
||||||
|
self.uniform_buffer.as_ptr().cast());
|
||||||
gl::BindBuffer(gl::UNIFORM_BUFFER, 0);
|
gl::BindBuffer(gl::UNIFORM_BUFFER, 0);
|
||||||
|
|
||||||
if self.ubo_location.vertex != gl::INVALID_INDEX {
|
if self.ubo_location.vertex != gl::INVALID_INDEX {
|
||||||
|
@ -256,11 +257,12 @@ impl FilterPass {
|
||||||
-1.0, -1.0, 0.0, 1.0
|
-1.0, -1.0, 0.0, 1.0
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
let mvp_size = mvp.len() * std::mem::size_of::<f32>();
|
||||||
let (buffer, offset) = match variable.offset {
|
let (buffer, offset) = match variable.offset {
|
||||||
MemberOffset::Ubo(offset) => (&mut self.uniform_buffer, offset),
|
MemberOffset::Ubo(offset) => (&mut self.uniform_buffer, offset),
|
||||||
MemberOffset::PushConstant(offset) => (&mut self.push_buffer, offset)
|
MemberOffset::PushConstant(offset) => (&mut self.push_buffer, offset)
|
||||||
};
|
};
|
||||||
FilterPass::build_mvp(&mut buffer[offset..][..mvp.len() * std::mem::size_of::<f32>()], mvp)
|
FilterPass::build_mvp(&mut buffer[offset..][..mvp_size], mvp)
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(variable) = self.reflection.meta.variable_meta.get(&VariableSemantics::Output) {
|
if let Some(variable) = self.reflection.meta.variable_meta.get(&VariableSemantics::Output) {
|
||||||
|
|
|
@ -336,6 +336,7 @@ void main()
|
||||||
|
|
||||||
// eprintln!("[core] rendered texture is {rendered_texture}");
|
// eprintln!("[core] rendered texture is {rendered_texture}");
|
||||||
|
|
||||||
|
// do offscreen passes
|
||||||
unsafe {
|
unsafe {
|
||||||
filter.frame(0, &Viewport {
|
filter.frame(0, &Viewport {
|
||||||
x: 0,
|
x: 0,
|
||||||
|
@ -346,7 +347,7 @@ void main()
|
||||||
}
|
}
|
||||||
}, GlImage {
|
}, GlImage {
|
||||||
handle: rendered_texture,
|
handle: rendered_texture,
|
||||||
format: gl::RGBA,
|
format: gl::RGBA8,
|
||||||
size: Size {
|
size: Size {
|
||||||
width: WIDTH,
|
width: WIDTH,
|
||||||
height: HEIGHT
|
height: HEIGHT
|
||||||
|
|
|
@ -425,10 +425,10 @@ impl FilterChain {
|
||||||
// how much info do we actually need?
|
// how much info do we actually need?
|
||||||
pub fn frame(&mut self, count: u32, vp: &Viewport, input: GlImage, clear: bool) {
|
pub fn frame(&mut self, count: u32, vp: &Viewport, input: GlImage, clear: bool) {
|
||||||
//
|
//
|
||||||
// unsafe {
|
unsafe {
|
||||||
// gl::BindFramebuffer(gl::FRAMEBUFFER, 0);
|
gl::BindFramebuffer(gl::FRAMEBUFFER, 0);
|
||||||
// gl::BindVertexArray(self.quad_vao);
|
gl::BindVertexArray(self.quad_vao);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// todo: copy framebuffer
|
// todo: copy framebuffer
|
||||||
// shader_gl3: 2067
|
// shader_gl3: 2067
|
||||||
|
@ -450,10 +450,10 @@ impl FilterChain {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// unsafe {
|
unsafe {
|
||||||
// gl::BindFramebuffer(gl::FRAMEBUFFER, 0);
|
gl::BindFramebuffer(gl::FRAMEBUFFER, 0);
|
||||||
// gl::BindVertexArray(0);
|
gl::BindVertexArray(0);
|
||||||
// }
|
}
|
||||||
// todo: deal with the mess that is frame history
|
// todo: deal with the mess that is frame history
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue