GetAttribLocation() private method

private GetAttribLocation ( VertexElementUsage usage, int index ) : int
usage VertexElementUsage
index int
return int
Ejemplo n.º 1
0
        internal void Apply(Shader shader, IntPtr offset, int divisor = 0)
        {
            List <Element> attrInfo;
            int            shaderHash = shader.GetHashCode();

            if (!shaderAttributeInfo.TryGetValue(shaderHash, out attrInfo))
            {
                // Get the vertex attribute info and cache it
                attrInfo = new List <Element>(16);                // 16, per XNA4 HiDef spec

                foreach (VertexElement ve in elements)
                {
                    int attributeLocation = shader.GetAttribLocation(ve.VertexElementUsage, ve.UsageIndex);

                    // XNA appears to ignore usages it can't find a match for, so we will do the same
                    if (attributeLocation >= 0)
                    {
                        attrInfo.Add(new Element()
                        {
                            Offset                  = ve.Offset,
                            AttributeLocation       = attributeLocation,
                            NumberOfElements        = GetNumberOfElements(ve.VertexElementFormat),
                            VertexAttribPointerType = ve.VertexElementFormat,
                            Normalized              = GetVertexAttribNormalized(ve),
                        });
                    }
                }

                shaderAttributeInfo.Add(shaderHash, attrInfo);
            }

            // Apply the vertex attribute info
            foreach (Element element in attrInfo)
            {
                GraphicsDevice.GLDevice.AttributeEnabled[element.AttributeLocation]   = true;
                GraphicsDevice.GLDevice.Attributes[element.AttributeLocation].Divisor = divisor;
                GraphicsDevice.GLDevice.VertexAttribPointer(
                    element.AttributeLocation,
                    element.NumberOfElements,
                    element.VertexAttribPointerType,
                    element.Normalized,
                    VertexStride,
#if JSIL
                    (IntPtr)(offset.ToInt32() + element.Offset)
#else
                    (IntPtr)(offset.ToInt64() + element.Offset)
#endif
                    );
            }
        }
Ejemplo n.º 2
0
        internal void Apply(Shader shader, IntPtr offset, int divisor = 0)
        {
            VertexDeclarationAttributeInfo attrInfo;
            int shaderHash = shader.GetHashCode();

            if (!shaderAttributeInfo.TryGetValue(shaderHash, out attrInfo))
            {
                // Get the vertex attribute info and cache it
                attrInfo = new VertexDeclarationAttributeInfo(OpenGLDevice.Instance.MaxVertexAttributes);

                foreach (VertexElement ve in elements)
                {
                    int attributeLocation = shader.GetAttribLocation(ve.VertexElementUsage, ve.UsageIndex);

                    // XNA appears to ignore usages it can't find a match for, so we will do the same
                    if (attributeLocation >= 0)
                    {
                        attrInfo.Elements.Add(new VertexDeclarationAttributeInfo.Element()
                        {
                            Offset                  = ve.Offset,
                            AttributeLocation       = attributeLocation,
                            NumberOfElements        = OpenGLNumberOfElements(ve.VertexElementFormat),
                            VertexAttribPointerType = OpenGLVertexAttribPointerType(ve.VertexElementFormat),
                            Normalized              = OpenGLVertexAttribNormalized(ve),
                        });
                        attrInfo.EnabledAttributes[attributeLocation] = true;
                    }
                }

                shaderAttributeInfo.Add(shaderHash, attrInfo);
            }

            // Apply the vertex attribute info
            foreach (VertexDeclarationAttributeInfo.Element element in attrInfo.Elements)
            {
                OpenGLDevice.Instance.AttributeEnabled[element.AttributeLocation] = true;
                OpenGLDevice.Instance.Attributes[element.AttributeLocation].Divisor.Set(divisor);
                OpenGLDevice.Instance.VertexAttribPointer(
                    element.AttributeLocation,
                    element.NumberOfElements,
                    element.VertexAttribPointerType,
                    element.Normalized,
                    VertexStride,
                    (IntPtr)(offset.ToInt64() + element.Offset)
                    );
            }
        }
Ejemplo n.º 3
0
        internal void Apply(Shader shader, IntPtr offset)
        {
            VertexDeclarationAttributeInfo attrInfo;
            int shaderHash = shader.GetHashCode();

            if (!shaderAttributeInfo.TryGetValue(shaderHash, out attrInfo))
            {
                // Get the vertex attribute info and cache it
                attrInfo = new VertexDeclarationAttributeInfo(GraphicsDevice.MaxVertexAttributes);

                foreach (var ve in _elements)
                {
                    var attributeLocation = shader.GetAttribLocation(ve.VertexElementUsage, ve.UsageIndex);
                    // XNA appears to ignore usages it can't find a match for, so we will do the same
                    if (attributeLocation >= 0)
                    {
                        attrInfo.Elements.Add(new VertexDeclarationAttributeInfo.Element()
                        {
                            Offset                  = ve.Offset,
                            AttributeLocation       = attributeLocation,
                            NumberOfElements        = ve.VertexElementFormat.OpenGLNumberOfElements(),
                            VertexAttribPointerType = ve.VertexElementFormat.OpenGLVertexAttribPointerType(),
                            Normalized              = ve.OpenGLVertexAttribNormalized(),
                        });
                        attrInfo.EnabledAttributes[attributeLocation] = true;
                    }
                }

                shaderAttributeInfo.Add(shaderHash, attrInfo);
            }

            // Apply the vertex attribute info
            foreach (var element in attrInfo.Elements)
            {
                GL.VertexAttribPointer(element.AttributeLocation,
                                       element.NumberOfElements,
                                       element.VertexAttribPointerType,
                                       element.Normalized,
                                       this.VertexStride,
                                       (IntPtr)(offset.ToInt64() + element.Offset));
                GraphicsExtensions.CheckGLError();
            }
            GraphicsDevice.SetVertexAttributeArray(attrInfo.EnabledAttributes);
        }
		internal void Apply(Shader shader, IntPtr offset)
		{
            VertexDeclarationAttributeInfo attrInfo;
            int shaderHash = shader.GetHashCode();
            if (!shaderAttributeInfo.TryGetValue(shaderHash, out attrInfo))
            {
                // Get the vertex attribute info and cache it
                attrInfo = new VertexDeclarationAttributeInfo(GraphicsDevice.MaxVertexAttributes);

                foreach (var ve in _elements)
                {
                    var attributeLocation = shader.GetAttribLocation(ve.VertexElementUsage, ve.UsageIndex);
                    // XNA appears to ignore usages it can't find a match for, so we will do the same
                    if (attributeLocation >= 0)
                    {
                        attrInfo.Elements.Add(new VertexDeclarationAttributeInfo.Element()
                        {
                            Offset = ve.Offset,
                            AttributeLocation = attributeLocation,
                            NumberOfElements = ve.VertexElementFormat.OpenGLNumberOfElements(),
                            VertexAttribPointerType = ve.VertexElementFormat.OpenGLVertexAttribPointerType(),
                            Normalized = ve.OpenGLVertexAttribNormalized(),
                        });
                        attrInfo.EnabledAttributes[attributeLocation] = true;
                    }
                }

                shaderAttributeInfo.Add(shaderHash, attrInfo);
            }

            // Apply the vertex attribute info
            foreach (var element in attrInfo.Elements)
            {
                GL.VertexAttribPointer(element.AttributeLocation,
                    element.NumberOfElements,
                    element.VertexAttribPointerType,
                    element.Normalized,
                    this.VertexStride,
                    (IntPtr)(offset.ToInt64() + element.Offset));
                GraphicsExtensions.CheckGLError();
            }
            GraphicsDevice.SetVertexAttributeArray(attrInfo.EnabledAttributes);
		}
Ejemplo n.º 5
0
 internal void Apply(Shader shader, IntPtr offset)
 {
   int hashCode = shader.GetHashCode();
   VertexDeclaration.VertexDeclarationAttributeInfo declarationAttributeInfo;
   if (!this.shaderAttributeInfo.TryGetValue(hashCode, out declarationAttributeInfo))
   {
     declarationAttributeInfo = new VertexDeclaration.VertexDeclarationAttributeInfo(this.GraphicsDevice.MaxVertexAttributes);
     foreach (VertexElement element in this._elements)
     {
       int attribLocation = shader.GetAttribLocation(element.VertexElementUsage, element.UsageIndex);
       if (attribLocation >= 0)
       {
         declarationAttributeInfo.Elements.Add(new VertexDeclaration.VertexDeclarationAttributeInfo.Element()
         {
           Offset = element.Offset,
           AttributeLocation = attribLocation,
           NumberOfElements = GraphicsExtensions.OpenGLNumberOfElements(element.VertexElementFormat),
           VertexAttribPointerType = GraphicsExtensions.OpenGLVertexAttribPointerType(element.VertexElementFormat),
           Normalized = GraphicsExtensions.OpenGLVertexAttribNormalized(element)
         });
         declarationAttributeInfo.EnabledAttributes[attribLocation] = true;
       }
     }
     this.shaderAttributeInfo.Add(hashCode, declarationAttributeInfo);
   }
   foreach (VertexDeclaration.VertexDeclarationAttributeInfo.Element element in declarationAttributeInfo.Elements)
     GL.VertexAttribPointer(element.AttributeLocation, element.NumberOfElements, element.VertexAttribPointerType, element.Normalized, this.VertexStride, (IntPtr) (offset.ToInt64() + (long) element.Offset));
   this.GraphicsDevice.SetVertexAttributeArray(declarationAttributeInfo.EnabledAttributes);
 }
Ejemplo n.º 6
0
        internal void Apply(Shader shader, IntPtr offset, int divisor = 0)
        {
            List<Element> attrInfo;
            int shaderHash = shader.GetHashCode();
            if (!shaderAttributeInfo.TryGetValue(shaderHash, out attrInfo))
            {
                // Get the vertex attribute info and cache it
                attrInfo = new List<Element>(16); // 16, per XNA4 HiDef spec

                foreach (VertexElement ve in elements)
                {
                    int attributeLocation = shader.GetAttribLocation(ve.VertexElementUsage, ve.UsageIndex);

                    // XNA appears to ignore usages it can't find a match for, so we will do the same
                    if (attributeLocation >= 0)
                    {
                        attrInfo.Add(new Element()
                        {
                            Offset = ve.Offset,
                            AttributeLocation = attributeLocation,
                            NumberOfElements = GetNumberOfElements(ve.VertexElementFormat),
                            VertexAttribPointerType = ve.VertexElementFormat,
                            Normalized = GetVertexAttribNormalized(ve),
                        });
                    }
                }

                shaderAttributeInfo.Add(shaderHash, attrInfo);
            }

            // Apply the vertex attribute info
            foreach (Element element in attrInfo)
            {
                GraphicsDevice.GLDevice.AttributeEnabled[element.AttributeLocation] = true;
                GraphicsDevice.GLDevice.Attributes[element.AttributeLocation].Divisor = divisor;
                GraphicsDevice.GLDevice.VertexAttribPointer(
                    element.AttributeLocation,
                    element.NumberOfElements,
                    element.VertexAttribPointerType,
                    element.Normalized,
                    VertexStride,
                    (IntPtr) (offset.ToInt64() + element.Offset)
                );
            }
        }