void WebGLVertexArrayObjectBase::setVertexAttribState(
    GLuint index, GLsizei bytesPerElement, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset, WebGLBuffer* buffer)
{
    GLsizei validatedStride = stride ? stride : bytesPerElement;
    VertexAttribState* state = getVertexAttribState(index);

    if (buffer)
        buffer->onAttached();
    if (state->bufferBinding)
        state->bufferBinding->onDetached(context()->webContext());

    state->bufferBinding = buffer;
    state->bytesPerElement = bytesPerElement;
    state->size = size;
    state->type = type;
    state->normalized = normalized;
    state->stride = validatedStride;
    state->originalStride = stride;
    state->offset = offset;
}
Exemplo n.º 2
0
bool State::hasMappedBuffer(GLenum target) const
{
    if (target == GL_ARRAY_BUFFER)
    {
        for (size_t attribIndex = 0; attribIndex < mVertexAttribCurrentValues.size(); attribIndex++)
        {
            const gl::VertexAttribute &vertexAttrib = getVertexAttribState(static_cast<unsigned int>(attribIndex));
            gl::Buffer *boundBuffer = vertexAttrib.buffer.get();
            if (vertexAttrib.enabled && boundBuffer && boundBuffer->isMapped())
            {
                return true;
            }
        }

        return false;
    }
    else
    {
        Buffer *buffer = getTargetBuffer(target);
        return (buffer && buffer->isMapped());
    }
}
void WebGLVertexArrayObjectBase::setVertexAttribDivisor(GLuint index, GLuint divisor)
{
    VertexAttribState* state = getVertexAttribState(index);
    state->divisor = divisor;
}