Esempio n. 1
0
        internal int GetStride(ShaderAttributeIds attribute)
        {
            switch (attribute)
            {
            case ShaderAttributeIds.Position:
            case ShaderAttributeIds.Normal:
                return(4 * 3);

            case ShaderAttributeIds.Color0:
            case ShaderAttributeIds.Color1:
                return(4 * 4);

            case ShaderAttributeIds.Tex0:
            case ShaderAttributeIds.Tex1:
            case ShaderAttributeIds.Tex2:
            case ShaderAttributeIds.Tex3:
            case ShaderAttributeIds.Tex4:
            case ShaderAttributeIds.Tex5:
            case ShaderAttributeIds.Tex6:
            case ShaderAttributeIds.Tex7:
                return(4 * 2);

            default:
                WLog.Warning(LogCategory.Rendering, this, "Unsupported ShaderAttributeId: {0}", attribute);
                return(0);
            }
        }
Esempio n. 2
0
        private static string GetVertexAttributeType(ShaderAttributeIds id)
        {
            switch (id)
            {
            case ShaderAttributeIds.Position:
            case ShaderAttributeIds.Normal:
            case ShaderAttributeIds.Tex0:
            case ShaderAttributeIds.Tex1:
            case ShaderAttributeIds.Tex2:
            case ShaderAttributeIds.Tex3:
            case ShaderAttributeIds.Tex4:
            case ShaderAttributeIds.Tex5:
            case ShaderAttributeIds.Tex6:
            case ShaderAttributeIds.Tex7:
                return("vec3");

            case ShaderAttributeIds.Color0:
            case ShaderAttributeIds.Color1:
            case ShaderAttributeIds.SkinIndices:
            case ShaderAttributeIds.SkinWeights:
                return("vec4");

            default:
                return("");
            }
        }
Esempio n. 3
0
        public int GetStride(ShaderAttributeIds attribute)
        {
            switch (attribute)
            {
            case ShaderAttributeIds.Position:
            case ShaderAttributeIds.Normal:
            case ShaderAttributeIds.Binormal:
                return(4 * 3);

            case ShaderAttributeIds.Color0:
            case ShaderAttributeIds.Color1:
                return(4 * 4);

            case ShaderAttributeIds.Tex0:
            case ShaderAttributeIds.Tex1:
            case ShaderAttributeIds.Tex2:
            case ShaderAttributeIds.Tex3:
            case ShaderAttributeIds.Tex4:
            case ShaderAttributeIds.Tex5:
            case ShaderAttributeIds.Tex6:
            case ShaderAttributeIds.Tex7:
                return(4 * 2);

            case ShaderAttributeIds.PosMtxIndex:
                return(4 * 1);

            default:
                Console.WriteLine("Unsupported ShaderAttributeId: {0}", attribute);
                return(0);
            }
        }
Esempio n. 4
0
        public int GetAttributeSize(ShaderAttributeIds attribute)
        {
            switch (attribute)
            {
            case ShaderAttributeIds.Position:
            case ShaderAttributeIds.Normal:
                return(3);

            case ShaderAttributeIds.Color0:
            case ShaderAttributeIds.Color1:
                return(4);

            case ShaderAttributeIds.Tex0:
            case ShaderAttributeIds.Tex1:
            case ShaderAttributeIds.Tex2:
            case ShaderAttributeIds.Tex3:
            case ShaderAttributeIds.Tex4:
            case ShaderAttributeIds.Tex5:
            case ShaderAttributeIds.Tex6:
            case ShaderAttributeIds.Tex7:
                return(2);

            case ShaderAttributeIds.PosMtxIndex:
                return(1);

            default:
                Console.WriteLine($"Unsupported attribute: {attribute} in GetAttributeSize!");
                return(0);
            }
        }
Esempio n. 5
0
        public VertexAttribPointerType GetAttributePointerType(ShaderAttributeIds attribute)
        {
            switch (attribute)
            {
            case ShaderAttributeIds.Position:
            case ShaderAttributeIds.Normal:
            case ShaderAttributeIds.Binormal:
            case ShaderAttributeIds.Color0:
            case ShaderAttributeIds.Color1:
            case ShaderAttributeIds.Tex0:
            case ShaderAttributeIds.Tex1:
            case ShaderAttributeIds.Tex2:
            case ShaderAttributeIds.Tex3:
            case ShaderAttributeIds.Tex4:
            case ShaderAttributeIds.Tex5:
            case ShaderAttributeIds.Tex6:
            case ShaderAttributeIds.Tex7:
                return(VertexAttribPointerType.Float);

            case ShaderAttributeIds.PosMtxIndex:
                return(VertexAttribPointerType.Int);

            default:
                Console.WriteLine("Unsupported ShaderAttributeId: {0}", attribute);
                return(VertexAttribPointerType.Float);
            }
        }
Esempio n. 6
0
        public void EnableAttribute(ShaderAttributeIds attribute)
        {
            m_BufferIds[(int)attribute] = GL.GenBuffer();
            EnabledAttributes.Add(attribute);

            string debug_name = attribute.ToString();

            GL.ObjectLabel(ObjectLabelIdentifier.Buffer, m_BufferIds[(int)attribute], debug_name.Length, debug_name);
        }
Esempio n. 7
0
        public int GetAttributeBufferId(ShaderAttributeIds attribute)
        {
            if (!AttributeIsEnabled(attribute))
            {
                return(-1);
            }

            return(m_BufferIds[(int)attribute]);
        }
Esempio n. 8
0
        private void UploadBufferToGPU <T>(ShaderAttributeIds attribute, T[] data) where T : struct
        {
            // See if this attribute is already enabled. If it's not already enabled, we need to generate a buffer for it.
            if (!VertexDescription.AttributeIsEnabled(attribute))
            {
                VertexDescription.EnableAttribute(attribute);
            }

            // Bind the buffer before updating the data.
            GL.BindBuffer(BufferTarget.ArrayBuffer, VertexDescription.GetAttributeBufferId(attribute));

            // Finally, update the data.
            int stride = VertexDescription.GetStride(attribute);

            GL.BufferData <T>(BufferTarget.ArrayBuffer, (IntPtr)(data.Length * stride), data, BufferUsageHint.StaticDraw);
        }
Esempio n. 9
0
            public void Bind()
            {
                for (int i = 0; i < m_glBufferIndexes.Length; i++)
                {
                    ShaderAttributeIds id = (ShaderAttributeIds)i;
                    if (VertexDescription.AttributeIsEnabled(id))
                    {
                        GL.BindBuffer(BufferTarget.ArrayBuffer, m_glBufferIndexes[i]);
                        GL.EnableVertexAttribArray(i);
                        GL.VertexAttribPointer(i, VertexDescription.GetAttributeSize(id), VertexDescription.GetAttributePointerType(id), false, VertexDescription.GetStride(id), 0);
                    }
                }

                // Bind the Element Array Buffer as well
                GL.BindBuffer(BufferTarget.ElementArrayBuffer, m_glIndexBuffer);
            }
Esempio n. 10
0
        public void Bind()
        {
            for (int i = 0; i < m_maxBufferCount; i++)
            {
                ShaderAttributeIds attribute = (ShaderAttributeIds)i;
                if (m_vertexDescription.AttributeIsEnabled(attribute))
                {
                    GL.BindBuffer(BufferTarget.ArrayBuffer, m_attributeBuffers[(int)attribute]);
                    GL.EnableVertexAttribArray((int)attribute);
                    GL.VertexAttribPointer((int)attribute, m_vertexDescription.GetAttributeSize(attribute), m_vertexDescription.GetAttributePointerType(attribute), false, m_vertexDescription.GetStride(attribute), 0);
                }
            }

            // Then Bind our Element Array Buffer so we can actually draw.
            GL.BindBuffer(BufferTarget.ElementArrayBuffer, m_elementArrayBuffer);
        }
Esempio n. 11
0
        internal int GetAttributeSize(ShaderAttributeIds attribute)
        {
            switch (attribute)
            {
            case ShaderAttributeIds.Position:
            case ShaderAttributeIds.Normal:
                return(3);

            case ShaderAttributeIds.Color0:
            case ShaderAttributeIds.Color1:
                return(4);

            case ShaderAttributeIds.Tex0:
            case ShaderAttributeIds.Tex1:
                return(2);

            default:
                return(0);
            }
        }
Esempio n. 12
0
        internal VertexAttribPointerType GetAttributePointerType(ShaderAttributeIds attribute)
        {
            switch (attribute)
            {
            case ShaderAttributeIds.Position:
            case ShaderAttributeIds.Normal:
            case ShaderAttributeIds.Color0:
            case ShaderAttributeIds.Color1:
            case ShaderAttributeIds.Tex0:
            case ShaderAttributeIds.Tex1:
            case ShaderAttributeIds.Tex2:
            case ShaderAttributeIds.Tex3:
            case ShaderAttributeIds.Tex4:
            case ShaderAttributeIds.Tex5:
            case ShaderAttributeIds.Tex6:
            case ShaderAttributeIds.Tex7:
                return(VertexAttribPointerType.Float);

            default:
                WLog.Warning(LogCategory.Rendering, this, "Unsupported ShaderAttributeId: {0}", attribute);
                return(VertexAttribPointerType.Float);
            }
        }
Esempio n. 13
0
 internal void EnableAttribute(ShaderAttributeIds attribute)
 {
     m_enabledAttributes.Add(attribute);
 }
Esempio n. 14
0
 internal bool AttributeIsEnabled(ShaderAttributeIds attribute)
 {
     return(m_enabledAttributes.Contains(attribute));
 }
Esempio n. 15
0
 public void EnableAttribute(ShaderAttributeIds attribute)
 {
     m_enabledAttributes.Add(attribute);
 }
Esempio n. 16
0
 public bool AttributeIsEnabled(ShaderAttributeIds attribute)
 {
     return(EnabledAttributes.Contains(attribute));
 }