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; }
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; }