Exemplo n.º 1
0
        protected virtual void DrawTileLayers(RendererBase <ToyWorld> renderer, ToyWorld world)
        {
            var gridView  = GridView;
            int tileCount = gridView.Size.Size();

            // Draw tile layers
            int i = 0;

            foreach (var tileLayer in GetTileLayersToRender())
            {
                // Set up transformation to screen space for tiles
                // Model transform -- scale from (-1,1) to viewSize/2, center on origin
                Matrix transform = Matrix.CreateScale(new Vector3(gridView.Size, tileLayer.Thickness) * 0.5f);
                // World transform -- move center to view center
                if (Settings.Use3D)
                {
                    transform *= Matrix.CreateTranslation(new Vector3(gridView.Center, tileLayer.SpanIntervalFrom));
                }
                else
                {
                    transform *= Matrix.CreateTranslation(new Vector3(gridView.Center, tileLayer.SpanIntervalFrom + tileLayer.Thickness / 2));
                }
                // View and projection transforms
                transform *= Owner.ViewProjectionMatrix;
                Effect.ModelViewProjectionUniform(ref transform);
                Effect.TileTypesIdxOffsetUniform(i++ *tileCount);

                // Using the tileTypes texture should block until the data is fully copied from the pbos (onPreDraw)
                Grid.Draw();
            }
        }
Exemplo n.º 2
0
        protected void DrawAvatarTool(RendererBase <ToyWorld> renderer, IAvatar avatar, Vector2 size, Vector2 position, ToolBackgroundType type = ToolBackgroundType.BrownBorder)
        {
            GameObjectPainter goPainter = Owner.GameObjectPainter;

            GL.Enable(EnableCap.Blend);
            Owner.SetDefaultBlending();

            // Bind stuff to GL (used in overrides)
            renderer.TextureManager.Bind(goPainter.TilesetTexture);
            renderer.EffectManager.Use(goPainter.Effect);
            goPainter.Effect.TextureUniform(0);


            if (Owner.FlipYAxis)
            {
                size.Y     = -size.Y;
                position.Y = -position.Y;
            }

            Matrix transform = Matrix.CreateScale(size);

            transform *= Matrix.CreateTranslation(position.X, position.Y, 0.01f);


            // Draw the inventory background
            renderer.TextureManager.Bind(m_overlayTexture, Owner.GetTextureUnit(RenderRequestBase.TextureBindPosition.Ui));
            renderer.EffectManager.Use(m_overlayEffect);
            m_overlayEffect.TextureUniform((int)RenderRequestBase.TextureBindPosition.Ui);
            m_overlayEffect.TileTypesTextureUniform((int)RenderRequestBase.TextureBindPosition.TileTypes);
            m_overlayEffect.TileTypesIdxOffsetUniform(0);
            m_overlayEffect.ModelViewProjectionUniform(ref transform);

            goPainter.LocalTileTypesBuffer[0] = (ushort)type;
            if (avatar.Tool != null)
            {
                goPainter.LocalTileTypesBuffer[1] = (ushort)avatar.Tool.TilesetId;
            }

            GL.BindBuffer(BufferTarget.PixelUnpackBuffer, 0);
            goPainter.TileTypesTexure.Update1D(2, dataType: PixelType.UnsignedShort, data: goPainter.LocalTileTypesBuffer);
            QuadOffset.Draw();


            // Draw the inventory Tool
            if (avatar.Tool != null)
            {
                renderer.TextureManager.Bind(goPainter.TilesetTexture);
                renderer.EffectManager.Use(goPainter.Effect);
                goPainter.Effect.DiffuseUniform(new Vector4(1, 1, 1, 1));
                goPainter.Effect.TileTypesIdxOffsetUniform(1);

                Matrix toolTransform = Matrix.CreateScale(0.7f) * transform;
                goPainter.Effect.ModelViewProjectionUniform(ref toolTransform);

                QuadOffset.Draw();
            }
        }