예제 #1
0
        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();
        }
예제 #2
0
    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();
    }
예제 #3
0
        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();
        }