CVertexBuffer CGUIFontTTFDX::CreateVertexBuffer(const std::vector<SVertex> &vertices) const { CD3DBuffer* buffer = nullptr; if (!vertices.empty()) // do not create empty buffers, leave buffer as nullptr, it will be ignored on drawing stage { buffer = new CD3DBuffer(); if (!buffer->Create(D3D11_BIND_VERTEX_BUFFER, vertices.size(), sizeof(SVertex), DXGI_FORMAT_UNKNOWN, D3D11_USAGE_IMMUTABLE, &vertices[0])) CLog::Log(LOGERROR, "%s - Failed to create vertex buffer.", __FUNCTION__); else AddReference((CGUIFontTTFDX*)this, buffer); } return CVertexBuffer(reinterpret_cast<void*>(buffer), vertices.size() / 4, this); }
CVertexBuffer CGUIFontTTFGL::CreateVertexBuffer(const std::vector<SVertex> &vertices) const { // Generate a unique buffer object name and put it in bufferHandle GLuint bufferHandle; glGenBuffers(1, &bufferHandle); // Bind the buffer to the OpenGL context's GL_ARRAY_BUFFER binding point glBindBuffer(GL_ARRAY_BUFFER, bufferHandle); // Create a data store for the buffer object bound to the GL_ARRAY_BUFFER // binding point (i.e. our buffer object) and initialise it from the // specified client-side pointer glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof (SVertex), &vertices[0], GL_STATIC_DRAW); // Unbind GL_ARRAY_BUFFER glBindBuffer(GL_ARRAY_BUFFER, 0); return CVertexBuffer((void *) bufferHandle, vertices.size() / 4, this); }