public void ResetGPUData() { ReleaseGPUData(); m_instance_data.Resize(m_max_instances); if (m_instance_buffer != null) { m_instance_buffer.Allocate(m_max_instances); } BatchRendererUtil.CreateVertexBuffer(m_mesh, ref m_vertex_buffer, ref m_vertex_count); { Material m = m_material; if (m_enable_rotation) { m.EnableKeyword("ENABLE_INSTANCE_ROTATION"); } if (m_enable_scale) { m.EnableKeyword("ENABLE_INSTANCE_SCALE"); } if (m_enable_emission) { m.EnableKeyword("ENABLE_INSTANCE_EMISSION"); } if (m_enable_color) { m.EnableKeyword("ENABLE_INSTANCE_COLOR"); } if (m_enable_uv_offset) { m.EnableKeyword("ENABLE_INSTANCE_UVOFFSET"); } if (m_instance_buffer != null) { m.SetBuffer("g_vertices", m_vertex_buffer); m.SetBuffer("g_instance_buffer_t", m_instance_buffer.translation); m.SetBuffer("g_instance_buffer_r", m_instance_buffer.rotation); m.SetBuffer("g_instance_buffer_s", m_instance_buffer.scale); m.SetBuffer("g_instance_buffer_color", m_instance_buffer.color); m.SetBuffer("g_instance_buffer_emission", m_instance_buffer.emission); m.SetBuffer("g_instance_buffer_uv", m_instance_buffer.uv_offset); } } { m_cb = new CommandBuffer(); m_cb.name = "ProceduralGBuffer"; m_cb.DrawProcedural(Matrix4x4.identity, m_material, 0, MeshTopology.Triangles, m_vertex_count, m_max_instances); m_camera.AddCommandBuffer(CameraEvent.AfterGBuffer, m_cb); } // set default values UpdateGPUResources(); }
public void ResetGPUData() { ReleaseGPUData(); m_instance_data.Resize(m_max_instances); if (m_instance_buffer != null) { m_instance_buffer.Allocate(m_max_instances); } BatchRendererUtil.CreateVertexBuffer(m_mesh, ref m_vertex_buffer, ref m_vertex_count); { Material m = m_material; m.SetInt("g_flag_rotation", m_enable_rotation ? 1 : 0); m.SetInt("g_flag_scale", m_enable_scale ? 1 : 0); m.SetInt("g_flag_color", m_enable_color ? 1 : 0); m.SetInt("g_flag_emission", m_enable_emission ? 1 : 0); m.SetInt("g_flag_uvoffset", m_enable_uv_offset ? 1 : 0); if (m_instance_buffer != null) { m.SetBuffer("g_vertices", m_vertex_buffer); m.SetBuffer("g_instance_buffer_t", m_instance_buffer.translation); m.SetBuffer("g_instance_buffer_r", m_instance_buffer.rotation); m.SetBuffer("g_instance_buffer_s", m_instance_buffer.scale); m.SetBuffer("g_instance_buffer_color", m_instance_buffer.color); m.SetBuffer("g_instance_buffer_emission", m_instance_buffer.emission); m.SetBuffer("g_instance_buffer_uv", m_instance_buffer.uv_offset); } } { m_cb = new CommandBuffer(); m_cb.name = "ProceduralGBuffer"; m_cb.DrawProcedural(Matrix4x4.identity, m_material, 0, MeshTopology.Triangles, m_vertex_count, m_max_instances); m_camera.AddCommandBuffer(CameraEvent.AfterGBuffer, m_cb); } // set default values UpdateGPUResources(); }
public void ResetGPUData() { ReleaseGPUData(); m_instance_data.Resize(m_max_instances); if (m_instance_buffer != null) { m_instance_buffer.Allocate(m_max_instances); } if (m_instance_texture != null) { m_instance_texture.Allocate(m_max_instances); m_instance_texel_size = new Vector4( 1.0f / m_instance_texture.translation.width, 1.0f / m_instance_texture.translation.height, m_instance_texture.translation.width, m_instance_texture.translation.height); } // set default values UpdateGPUResources(); }