Edit

kc3-lang/angle/src/libANGLE/VertexAttribute.h

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2017-05-30 16:19:23
    Hash : 9ab5b822
    Message : Validate that vertex shader input matches the vertex attribute types. BUG=angleproject:2012 TEST=conformance2/rendering/attrib-type-match Change-Id: Ic282e0933a5c3c377322dd484534fcc1dfcb3840 Reviewed-on: https://chromium-review.googlesource.com/517974 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: Frank Henigman <fjhenigman@chromium.org>

  • src/libANGLE/VertexAttribute.h
  • //
    // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // Helper structures about Generic Vertex Attribute.
    //
    
    #ifndef LIBANGLE_VERTEXATTRIBUTE_H_
    #define LIBANGLE_VERTEXATTRIBUTE_H_
    
    #include "libANGLE/Buffer.h"
    
    namespace gl
    {
    class VertexArray;
    
    //
    // Implementation of Generic Vertex Attribute Bindings for ES3.1
    //
    struct VertexBinding final : private angle::NonCopyable
    {
        VertexBinding();
        explicit VertexBinding(VertexBinding &&binding);
        VertexBinding &operator=(VertexBinding &&binding);
    
        GLuint stride;
        GLuint divisor;
        GLintptr offset;
    
        BindingPointer<Buffer> buffer;
    };
    
    //
    // Implementation of Generic Vertex Attributes for ES3.1
    //
    struct VertexAttribute final : private angle::NonCopyable
    {
        explicit VertexAttribute(GLuint bindingIndex);
        explicit VertexAttribute(VertexAttribute &&attrib);
        VertexAttribute &operator=(VertexAttribute &&attrib);
    
        bool enabled;  // For glEnable/DisableVertexAttribArray
        GLenum type;
        GLuint size;
        bool normalized;
        bool pureInteger;
    
        const void *pointer;
        GLintptr relativeOffset;
    
        GLuint vertexAttribArrayStride;  // ONLY for queries of VERTEX_ATTRIB_ARRAY_STRIDE
        GLuint bindingIndex;
    };
    
    size_t ComputeVertexAttributeTypeSize(const VertexAttribute &attrib);
    
    // Warning: you should ensure binding really matches attrib.bindingIndex before using this function.
    size_t ComputeVertexAttributeStride(const VertexAttribute &attrib, const VertexBinding &binding);
    
    // Warning: you should ensure binding really matches attrib.bindingIndex before using this function.
    GLintptr ComputeVertexAttributeOffset(const VertexAttribute &attrib, const VertexBinding &binding);
    
    size_t ComputeVertexBindingElementCount(const VertexBinding &binding,
                                            size_t drawCount,
                                            size_t instanceCount);
    
    GLenum GetVertexAttributeBaseType(const VertexAttribute &attrib);
    
    struct VertexAttribCurrentValueData
    {
        union {
            GLfloat FloatValues[4];
            GLint IntValues[4];
            GLuint UnsignedIntValues[4];
        };
        GLenum Type;
    
        VertexAttribCurrentValueData();
    
        void setFloatValues(const GLfloat floatValues[4]);
        void setIntValues(const GLint intValues[4]);
        void setUnsignedIntValues(const GLuint unsignedIntValues[4]);
    };
    
    bool operator==(const VertexAttribCurrentValueData &a, const VertexAttribCurrentValueData &b);
    bool operator!=(const VertexAttribCurrentValueData &a, const VertexAttribCurrentValueData &b);
    
    }  // namespace gl
    
    #include "VertexAttribute.inl"
    
    #endif  // LIBANGLE_VERTEXATTRIBUTE_H_