| 195 | } |
| 196 | |
| 197 | void DrawNode3D::draw(Renderer* renderer, const Mat4& transform, uint32_t flags) |
| 198 | { |
| 199 | _customCommand.init(_globalZOrder); |
| 200 | // update mvp matrix |
| 201 | auto& matrixP = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION); |
| 202 | auto mvp = matrixP * transform; |
| 203 | _programState->setUniform(_locMVPMatrix, mvp.m, sizeof(mvp.m)); |
| 204 | |
| 205 | if (_customCommand.getVertexCapacity() < _buffer.size()) |
| 206 | { |
| 207 | auto s = _buffer.size(); |
| 208 | _customCommand.createVertexBuffer(sizeof(V3F_C4B), s + s / 2, CustomCommand::BufferUsage::DYNAMIC); |
| 209 | } |
| 210 | |
| 211 | if (_dirty && !_buffer.empty()) |
| 212 | { |
| 213 | _customCommand.updateVertexBuffer(_buffer.data(), (unsigned int)(_buffer.size() * sizeof(_buffer[0]))); |
| 214 | _customCommand.setVertexDrawInfo(0, _buffer.size()); |
| 215 | _dirty = false; |
| 216 | } |
| 217 | |
| 218 | setBlendFunc(_blendFunc); |
| 219 | |
| 220 | if (!_buffer.empty()) |
| 221 | { |
| 222 | renderer->addCommand(&_customCommand); |
| 223 | } |
| 224 | } |
| 225 | |
| 226 | void DrawNode3D::drawLine(const Vec3& from, const Vec3& to, const Color4F& color) |
| 227 | { |
nothing calls this directly
no test coverage detected