public void DrawTextured(object context, Coordinate cameraLocation, ShaderProgram program)
 {
     // Todo abstract this out a bit, repeated code all over the place
     _array.Bind(context, 0);
     foreach (var subset in _array.TextureSubsets)
     {
         var tex = subset.Instance;
         if (tex != null) tex.Bind();
         else TextureHelper.Unbind();
         program.Set("isTextured", tex != null);
         _array.Array.DrawElements(0, subset.Start, subset.Count);
     }
     _array.Bind(context, 1);
     foreach (var subset in _array.TransparentSubsets.OrderByDescending(x => (cameraLocation - x.Instance.Origin).LengthSquared()))
     {
         var tf = subset.Instance;
         if (tf.Texture != null) tf.Texture.Bind();
         else TextureHelper.Unbind();
         program.Set("isTextured", tf.Texture != null);
         _array.Array.DrawElements(0, subset.Start, subset.Count);
     }
     _array.Unbind();
     GL.Disable(EnableCap.CullFace);
     _decalArray.Bind(context, 0);
     foreach (var subset in _decalArray.TextureSubsets)
     {
         var tex = subset.Instance;
         if (tex != null) tex.Bind();
         else TextureHelper.Unbind();
         program.Set("isTextured", tex != null);
         _decalArray.Array.DrawElements(0, subset.Start, subset.Count);
     }
     _decalArray.Unbind();
     GL.Enable(EnableCap.CullFace);
 }
 public GridRenderable(Document document)
 {
     _program = new ShaderProgram(
         new Shader(ShaderType.VertexShader, VertexShader),
         new Shader(ShaderType.FragmentShader, FragmentShader));
     _document = document;
     _step = -1;
     _buffer = new VertexBuffer<float>(Specification, Modes, 0, sizeof(float), new float[0], new[] { new uint[0] });
     _array = new VertexArray<float>(_buffer);
     RebuildGrid(1);
 }
Exemple #3
0
        public MapObject2DShader()
        {
            Shader = new ShaderProgram(GetShader(ShaderType.VertexShader), GetShader(ShaderType.FragmentShader));

            Shader.Bind();

            Perspective = Camera = ModelView = SelectionTransform = Matrix4.Identity;
            SelectedOnly = UnselectedOnly = false;
            SelectedColour = new Vector4(1, 0, 0, 0.5f);

            Shader.Unbind();
        }
 public void DrawWireframe(object context, ShaderProgram program)
 {
     _array.Bind(context, 2);
     foreach (var subset in _array.WireframeSubsets)
     {
         _array.Array.DrawElements(1, subset.Start, subset.Count);
     }
     _array.Unbind();
     _decalArray.Bind(context, 1);
     foreach (var subset in _decalArray.WireframeSubsets)
     {
         _decalArray.Array.DrawElements(1, subset.Start, subset.Count);
     }
     _decalArray.Unbind();
 }
Exemple #5
0
        public MapObject3DShader()
        {
            Shader = new ShaderProgram(GetShader(ShaderType.VertexShader), GetShader(ShaderType.FragmentShader));

            Shader.Bind();

            Perspective = Camera = ModelView = SelectionTransform = Matrix4.Identity;
            IsTextured = true;
            IsLit = true;
            Show3DGrid = false;
            GridSpacing = 64;
            SelectionColourMultiplier = new Vector4(1, 0.5f, 0.5f, 1);
            Transformation = Matrix4.Identity;

            GL.ActiveTexture(TextureUnit.Texture0);
            Shader.Set("currentTexture", 0);

            Shader.Unbind();
        }
        public ArrayRendererGL3(Document document)
        {
            _document = document;
            _array = new ArrayManager(document.Map);
            Shader = new ShaderProgram(
                new Shader(ShaderType.VertexShader, VertexShader),
                new Shader(ShaderType.FragmentShader, FragmentShader));
            GridRenderables = ViewportManager.Viewports.OfType<Viewport2D>().ToDictionary(x => (ViewportBase)x, x => new GridRenderable(_document));

            // Set up default values
            Shader.Bind();
            Perspective = Camera = ModelView = SelectionTransform = Matrix4.Identity;
            IsTextured = IsWireframe = In3D = false;
            Show3DGrid = document.Map.Show3DGrid;
            GridSpacing = (float) document.Map.GridSpacing;
            WireframeColour = Vector4.Zero;
            SelectionColourMultiplier = new Vector4(1, 0.5f, 0.5f, 1);
            Shader.Unbind();
        }