Ejemplo n.º 1
0
        public static bool ExtractCacheData(EntityManager em, Entity spriteEntity, out SpriteMeshCacheData cacheData)
        {
            cacheData = default;

            if (!em.HasComponent <Sprite>(spriteEntity))
            {
                return(false);
            }
            var spriteData = em.GetComponentData <Sprite>(spriteEntity);

            if (!em.HasComponent <TextureBGFX>(spriteData.Texture))
            {
                return(false);
            }
            if (!em.HasComponent <SpriteMeshBuffers>(spriteEntity))
            {
                return(false);
            }

            var spriteMesh = em.GetComponentData <SpriteMeshBuffers>(spriteEntity);
            var texture    = em.GetComponentData <TextureBGFX>(spriteData.Texture);

            cacheData = new SpriteMeshCacheData
            {
                Hash               = new Hash128((uint)spriteEntity.Index, (uint)spriteEntity.Version, 0, 0),
                TextureHandle      = texture.handle,
                IndexBufferHandle  = spriteMesh.IndexBufferHandle,
                VertexBufferHandle = spriteMesh.VertexBufferHandle,
                IndexCount         = spriteMesh.IndexCount,
                VertexCount        = spriteMesh.VertexCount,
                VertexLayoutHandle = spriteMesh.VertexLayoutHandle,
            };

            return(true);
        }
Ejemplo n.º 2
0
        public static unsafe void SubmitDrawInstruction(bgfx.Encoder *encoder, float4 color,
                                                        SpriteDefaultShader defaultShader, ushort viewId,
                                                        SpriteMeshCacheData spriteMesh, uint depth,
                                                        ref float4x4 transform)
        {
            bgfx.encoder_set_state(encoder, k_RenderStates, 0);

            bgfx.encoder_set_index_buffer(encoder, new bgfx.IndexBufferHandle {
                idx = spriteMesh.IndexBufferHandle
            }, (uint)0, (uint)spriteMesh.IndexCount);
            bgfx.encoder_set_vertex_buffer(encoder, 0, new bgfx.VertexBufferHandle {
                idx = spriteMesh.VertexBufferHandle
            }, 0, (uint)spriteMesh.VertexCount, spriteMesh.VertexLayoutHandle);

            fixed(float4x4 *p = &transform)
            bgfx.encoder_set_transform(encoder, p, 1);

            bgfx.encoder_set_uniform(encoder, defaultShader.TintColorHandle, &color, 1);

            bgfx.encoder_set_texture(encoder, 0, defaultShader.TexColorSamplerHandle, spriteMesh.TextureHandle, System.UInt32.MaxValue);
            bgfx.encoder_submit(encoder, viewId, defaultShader.ProgramHandle, depth, (byte)bgfx.DiscardFlags.All);
        }