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); } }
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(""); } }
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); } }
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); } }
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); } }
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); }
public int GetAttributeBufferId(ShaderAttributeIds attribute) { if (!AttributeIsEnabled(attribute)) { return(-1); } return(m_BufferIds[(int)attribute]); }
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); }
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); }
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); }
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); } }
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); } }
internal void EnableAttribute(ShaderAttributeIds attribute) { m_enabledAttributes.Add(attribute); }
internal bool AttributeIsEnabled(ShaderAttributeIds attribute) { return(m_enabledAttributes.Contains(attribute)); }
public void EnableAttribute(ShaderAttributeIds attribute) { m_enabledAttributes.Add(attribute); }
public bool AttributeIsEnabled(ShaderAttributeIds attribute) { return(EnabledAttributes.Contains(attribute)); }