mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-08 19:11:29 +00:00
cleanup; pink was due to missing "layout(location=10)"
This commit is contained in:
1 parent
adb6f45fd3
commit
7352f3f6d2
1 file changed
+18
-49
@@ -62,8 +62,8 @@ pub static POINT_CLOUD_VERTEX_SHADER : &'static str = "\
|
||||
#version 430
|
||||
|
||||
// NB: It appears that locations need to be wide enough apart, or the colors bleed across locations.
|
||||
in vec4 inColor0;
|
||||
in vec4 inColor1;
|
||||
layout(location=0) in vec4 inColor0;
|
||||
layout(location=10) in vec4 inColor1;
|
||||
|
||||
out vec4 vertexColor;
|
||||
|
||||
@@ -515,9 +515,9 @@ impl PointCloudRenderer {
|
||||
gl::UseProgram(self.shader_program_id);
|
||||
}
|
||||
|
||||
for j in 0 .. color_images.len() {
|
||||
let color_image = color_images.get(j).unwrap();
|
||||
let point_cloud_texture = point_cloud_textures.get(j).unwrap();
|
||||
for i in 0 .. self.num_cameras {
|
||||
let color_image = color_images.get(i).unwrap();
|
||||
let point_cloud_texture = point_cloud_textures.get(i).unwrap();
|
||||
|
||||
// NB: This experiment demonstrates that only one set of texture (colors) seem to be updated.
|
||||
// let i = if seconds % 10 > 4 {
|
||||
@@ -532,7 +532,6 @@ impl PointCloudRenderer {
|
||||
//let i = 1 - j; //geometry2, cameratexture2 (below is i=j)
|
||||
//let i = j; // geometry2, cameratexture1, (below is i=1-j)
|
||||
//let i = 1 - j; //geometry1, cameratexture2 (below is i=1-j)
|
||||
let i = j;
|
||||
//let i = if swap { j } else { 1 - j }; // swaps which image data is used
|
||||
|
||||
let vertex_array_object = self.vertex_array_objects.get(i).unwrap();
|
||||
@@ -577,8 +576,6 @@ impl PointCloudRenderer {
|
||||
|
||||
let color_src = color_image.get_buffer();
|
||||
let typed_color_src = color_src as *const u8;
|
||||
//let mut typed_color_src = color_src as *const BgraPixel;
|
||||
//let length = color_image.get_width_pixels() * color_image.get_height_pixels();
|
||||
|
||||
let result = unsafe {
|
||||
if i == 9 {
|
||||
@@ -604,50 +601,23 @@ impl PointCloudRenderer {
|
||||
// a single index, only one of the camera geometries gets shaded.
|
||||
//let i = j; // (SEE TABLE ABOVE)
|
||||
//let i = 1 - j; // (SEE TABLE ABOVE)
|
||||
let i = j;
|
||||
//let i = if !swap { j } else { 1 - j }; // (in isolation) PUTS THE IMAGES ON BOTH POINTCLOUD GEOS!?
|
||||
|
||||
|
||||
unsafe {
|
||||
if !do_break {
|
||||
//let i = 1 - j; // face image -> room geo
|
||||
let vertex_attrib_location = self.vertex_attrib_locations.get(i).unwrap();
|
||||
let vertex_attrib_location = self.vertex_attrib_locations.get(i).unwrap();
|
||||
|
||||
// NB: Controling these indices change where the color bytes are uploaded
|
||||
gl::EnableVertexAttribArray(*vertex_attrib_location as u32);
|
||||
// NB: Controling these indices change where the color bytes are uploaded
|
||||
gl::EnableVertexAttribArray(*vertex_attrib_location as u32);
|
||||
|
||||
//let location = i;
|
||||
gl::VertexAttribPointer(
|
||||
*vertex_attrib_location as u32,
|
||||
//location as u32, // TODO: Does this matter?
|
||||
gl::BGRA as i32,
|
||||
gl::UNSIGNED_BYTE,
|
||||
gl::TRUE,
|
||||
//get_stride::<f32>(0),
|
||||
//get_pointer_offset::<f32>(0),
|
||||
0 as i32,
|
||||
0 as *const c_void,
|
||||
);
|
||||
} else {
|
||||
//let i = 1 - j; // face image -> room geo
|
||||
let vertex_attrib_location = self.vertex_attrib_locations.get(i).unwrap();
|
||||
|
||||
// NB: Controling these indices change where the color bytes are uploaded
|
||||
gl::EnableVertexAttribArray(*vertex_attrib_location as u32);
|
||||
|
||||
//let location = i;
|
||||
gl::VertexAttribPointer(
|
||||
*vertex_attrib_location as u32,
|
||||
//location as u32, // TODO: Does this matter?
|
||||
gl::BGRA as i32,
|
||||
gl::UNSIGNED_BYTE,
|
||||
gl::TRUE,
|
||||
//get_stride::<f32>(0),
|
||||
//get_pointer_offset::<f32>(0),
|
||||
0 as i32,
|
||||
0 as *const c_void,
|
||||
);
|
||||
}
|
||||
//let location = i;
|
||||
gl::VertexAttribPointer(
|
||||
*vertex_attrib_location as u32,
|
||||
gl::BGRA as i32,
|
||||
gl::UNSIGNED_BYTE,
|
||||
gl::TRUE,
|
||||
0 as i32,
|
||||
0 as *const c_void,
|
||||
);
|
||||
|
||||
// NB: I believe these point cloud textures are the geometry itself. Not the color data.
|
||||
// I think the code here is *fine* because the point cloud structures are in-tact.
|
||||
@@ -658,7 +628,6 @@ impl PointCloudRenderer {
|
||||
//if i == 1 { continue }
|
||||
//let i = 1 - j;
|
||||
//let i = if swap { j } else { 1 - j }; // swaps physical location of the geometry
|
||||
let i = j;
|
||||
|
||||
// // NB: it's okay to copy an i32, but this sucks
|
||||
// let point_cloud_texture_index = self.point_cloud_texture_indices.get(i).unwrap().clone();
|
||||
@@ -671,7 +640,7 @@ impl PointCloudRenderer {
|
||||
gl::BindTexture(gl::TEXTURE_2D, point_cloud_texture.id());
|
||||
gl::BindImageTexture(
|
||||
// https://www.khronos.org/opengl/wiki/Sampler_(GLSL) ?
|
||||
i as GLuint, // image unit (zero-indexed)
|
||||
i as GLuint, // image unit (zero-indexed) // TODO - why? why does it work this way?
|
||||
point_cloud_texture.id(), // texture
|
||||
0, // level
|
||||
gl::FALSE, // layered
|
||||
|
||||
Reference in new issue
Block a user