| 100 | } |
| 101 | |
| 102 | void GLVertexArrayObject::bindToGpu(GLRenderSystemCommon* rs, |
| 103 | VertexBufferBinding* vertexBufferBinding, |
| 104 | size_t vertexStart) |
| 105 | { |
| 106 | mAttribsBound.clear(); |
| 107 | mInstanceAttribsBound.clear(); |
| 108 | |
| 109 | for (const auto& elem : mElementList) |
| 110 | { |
| 111 | uint16 source = elem.getSource(); |
| 112 | |
| 113 | if (!vertexBufferBinding->isBufferBound(source)) |
| 114 | continue; // Skip unbound elements |
| 115 | |
| 116 | VertexElementSemantic sem = elem.getSemantic(); |
| 117 | unsigned short elemIndex = elem.getIndex(); |
| 118 | |
| 119 | uint32 attrib = (uint32)GLSLProgramCommon::getFixedAttributeIndex(sem, elemIndex); |
| 120 | |
| 121 | const HardwareVertexBufferSharedPtr& vertexBuffer = vertexBufferBinding->getBuffer(source); |
| 122 | |
| 123 | mAttribsBound.push_back(std::make_pair(attrib, vertexBuffer.get())); |
| 124 | |
| 125 | rs->bindVertexElementToGpu(elem, vertexBuffer, vertexStart); |
| 126 | |
| 127 | if (vertexBuffer->isInstanceData()) |
| 128 | mInstanceAttribsBound.push_back(attrib); |
| 129 | } |
| 130 | |
| 131 | mVertexStart = vertexStart; |
| 132 | mNeedsUpdate = false; |
| 133 | } |
| 134 | } |
no test coverage detected