Add custom vertex color to instance data

This commit is contained in:
Benau 2022-09-12 11:07:22 +08:00
parent 48730d1db4
commit 23470bbde2
7 changed files with 27 additions and 8 deletions

View File

@ -15,7 +15,7 @@ void main()
u_object_buffer.m_objects[gl_InstanceIndex].m_translation + offset *
v_color.r,
u_object_buffer.m_objects[gl_InstanceIndex].m_rotation,
u_object_buffer.m_objects[gl_InstanceIndex].m_scale.xyz, v_position);
u_object_buffer.m_objects[gl_InstanceIndex].m_scale, v_position);
gl_Position = u_camera.m_projection_view_matrix * v_world_position;
f_vertex_color = vec4(1.0);
f_uv = v_uv;

View File

@ -1,4 +1,5 @@
#include "utils/spm_layout.h"
#include "utils/get_vertex_color.h"
#include "../utils/get_world_location.vert"
void main()
@ -6,9 +7,10 @@ void main()
vec4 v_world_position = getWorldPosition(
u_object_buffer.m_objects[gl_InstanceIndex].m_translation,
u_object_buffer.m_objects[gl_InstanceIndex].m_rotation,
u_object_buffer.m_objects[gl_InstanceIndex].m_scale.xyz, v_position);
u_object_buffer.m_objects[gl_InstanceIndex].m_scale, v_position);
gl_Position = u_camera.m_projection_view_matrix * v_world_position;
f_vertex_color = v_color.zyxw;
f_vertex_color = v_color.zyxw * getVertexColor(
u_object_buffer.m_objects[gl_InstanceIndex].m_custom_vertex_color);
f_uv = v_uv + u_object_buffer.m_objects[gl_InstanceIndex].m_texture_trans;
f_uv_two = v_uv_two;
f_material_id = u_object_buffer.m_objects[gl_InstanceIndex].m_material_id;

View File

@ -1,4 +1,5 @@
#include "utils/spm_layout.h"
#include "utils/get_vertex_color.h"
#include "../utils/get_world_location.vert"
void main()
@ -13,10 +14,11 @@ void main()
vec4 v_world_position = getWorldPosition(
u_object_buffer.m_objects[gl_InstanceIndex].m_translation,
u_object_buffer.m_objects[gl_InstanceIndex].m_rotation,
u_object_buffer.m_objects[gl_InstanceIndex].m_scale.xyz,
u_object_buffer.m_objects[gl_InstanceIndex].m_scale,
v_skinning_position.xyz);
gl_Position = u_camera.m_projection_view_matrix * v_world_position;
f_vertex_color = v_color.zyxw;
f_vertex_color = v_color.zyxw * getVertexColor(
u_object_buffer.m_objects[gl_InstanceIndex].m_custom_vertex_color);
f_uv = v_uv + u_object_buffer.m_objects[gl_InstanceIndex].m_texture_trans;
f_uv_two = v_uv_two;
f_material_id = u_object_buffer.m_objects[gl_InstanceIndex].m_material_id;

View File

@ -0,0 +1,9 @@
vec4 getVertexColor(uint packed)
{
vec4 vertex_color;
vertex_color.a = float(packed >> 24) / 255.0;
vertex_color.r = float((packed >> 16) & 0xff) / 255.0;
vertex_color.g = float((packed >> 8) & 0xff) / 255.0;
vertex_color.b = float(packed & 0xff) / 255.0;
return vertex_color;
}

View File

@ -13,7 +13,8 @@ struct ObjectData
vec3 m_translation;
float m_hue_change;
vec4 m_rotation;
vec4 m_scale;
vec3 m_scale;
uint m_custom_vertex_color;
int m_skinning_offest;
int m_material_id;
vec2 m_texture_trans;

View File

@ -51,7 +51,7 @@ ObjectData::ObjectData(irr::scene::ISceneNode* node, int material_id,
}
memcpy(&m_translation_x, translation, sizeof(translation));
memcpy(m_rotation, &rotation, sizeof(irr::core::quaternion));
memcpy(m_scale, &scale, sizeof(irr::core::vector3df));
memcpy(&m_scale_x, &scale, sizeof(irr::core::vector3df));
m_skinning_offset = skinning_offset;
m_material_id = material_id;
const irr::core::matrix4& texture_matrix =
@ -63,6 +63,7 @@ ObjectData::ObjectData(irr::scene::ISceneNode* node, int material_id,
m_hue_change = ri->getHue();
else
m_hue_change = 0.0f;
m_custom_vertex_color = irr::video::SColor((uint32_t)-1);
} // ObjectData
// ----------------------------------------------------------------------------

View File

@ -10,6 +10,7 @@
#include "vulkan_wrapper.h"
#include "matrix4.h"
#include "SColor.h"
namespace irr
{
@ -33,7 +34,10 @@ struct ObjectData
float m_translation_z;
float m_hue_change;
float m_rotation[4];
float m_scale[4];
float m_scale_x;
float m_scale_y;
float m_scale_z;
irr::video::SColor m_custom_vertex_color;
int m_skinning_offset;
int m_material_id;
float m_texture_trans[2];