void GeometryObject::toVertexArray(VertexArray& varray) const { VertexFormat::Attribute position_attribute; VertexFormat::Attribute color_attribute; position_attribute.hint = VertexFormat::Position; color_attribute.hint = VertexFormat::Color; position_attribute.numComponents = 3; position_attribute.size = sizeof(float); color_attribute.numComponents = 4; color_attribute.size = sizeof(float); varray.format.attributes.push_back(position_attribute); varray.format.attributes.push_back(color_attribute ); // Two channels of data need to be copied now varray.allocateData(vertices.size()); struct vertex_format_struct { vec3 p; vec4 c; }; vertex_format_struct* vertex_data = reinterpret_cast<vertex_format_struct*>(&varray._data[0]); for(std::size_t i = 0; i < vertices.size(); ++i) { vertex_data[i].p = vertices[i]; vertex_data[i].c.x = (float)colors[i].r / 255.f; vertex_data[i].c.y = (float)colors[i].g / 255.f; vertex_data[i].c.z = (float)colors[i].b / 255.f; vertex_data[i].c.w = (float)colors[i].a / 255.f; } }
/// Callback to render itself, renders children void UIView::draw(GraphicsDevice* renderer, mat4 transform) { VertexArray va; va.addAttribute(sizeof(float), 2, VertexFormat::Position); va.addAttribute(sizeof(float), 4, VertexFormat::Color); va.allocateData(6); struct vertex_f { vec2 p; vec4 c; }; vertex_f* va_raw = reinterpret_cast<vertex_f*>(&va.data[0]); va_raw[0].p = vec2(size.x, 0.f); va_raw[1].p = vec2(size.x, size.y); va_raw[2].p = vec2(0.f, size.y); va_raw[3].p = vec2(size.x, 0.f); va_raw[4].p = vec2(0.f, size.y); va_raw[5].p = vec2(0.f, 0.f); va_raw[0].c = vec4(float(col.r) / 255.f, float(col.g) / 255.f, float(col.b) / 255.f, 1.f); va_raw[1].c = vec4(float(col.r) / 255.f, float(col.g) / 255.f, float(col.b) / 255.f, 1.f); va_raw[2].c = vec4(float(col.r) / 255.f, float(col.g) / 255.f, float(col.b) / 255.f, 1.f); va_raw[3].c = vec4(float(col.r) / 255.f, float(col.g) / 255.f, float(col.b) / 255.f, 1.f); va_raw[4].c = vec4(float(col.r) / 255.f, float(col.g) / 255.f, float(col.b) / 255.f, 1.f); va_raw[5].c = vec4(float(col.r) / 255.f, float(col.g) / 255.f, float(col.b) / 255.f, 1.f); renderer->enableVertexAttribArray(0); renderer->enableVertexAttribArray(1); renderer->setVertexAttribPointer(0, 2, GL_FLOAT, false, va.getVertexSize(), &va.data[0] + va.getAttributeOffset(0)); renderer->setVertexAttribPointer(1, 4, GL_FLOAT, false, va.getVertexSize(), &va.data[0] + va.getAttributeOffset(1)); renderer->setModelMatrix(transform); renderer->setDefaultTexture(); renderer->drawArrays(Render::Primitive::Triangles, 0, 6); renderer->disableVertexAttribArray(0); renderer->disableVertexAttribArray(1); // back /*if(components.size() == 0) { RectangleShape backgroundRect; backgroundRect.setColor(Color::Grass); backgroundRect.setRect(getBounds()); renderer->draw(backgroundRect); }*/ /* if(m_children.size() > 0) { RectangleShape scrollBarBackground; scrollBarBackground.setSize(17.f, getSize().y); scrollBarBackground.setPosition(getPosition().x + getSize().y - 17.f, getPosition().y); scrollBarBackground.setColor(Color::Blue); renderer->draw(scrollBarBackground); float lowestY = m_children[0]->getPosition().y; float highestY = m_children[0]->getPosition().y + m_children[0]->getSize().y; for(std::size_t i = 0; i < m_children.size(); ++i) { if(m_children[i]->getPosition().y < lowestY) { lowestY = m_children[i]->getPosition().y; } if(m_children[i]->getPosition().y + m_children[i]->getSize().y > highestY) { highestY = m_children[i]->getPosition().y + m_children[i]->getSize().y; } } Log("Window %f to %f, Content %f to %f", getPosition().y, getPosition().y + getSize().y, lowestY, highestY); float beginPercent = (getPosition().y - lowestY) / (highestY - lowestY); float endPercent = (getPosition().y + getSize().y - lowestY) / (highestY - lowestY); Log("You are viewing %f pc of the content", beginPercent); RectangleShape scrollBarPaddle; scrollBarPaddle.setSize(17.f, getSize().y * (endPercent-beginPercent)); scrollBarPaddle.setPosition(getPosition().x + getSize().y - 17.f, getPosition().y + getSize().y * beginPercent); scrollBarPaddle.setColor(Color::Red); renderer->draw(scrollBarPaddle); }*/ }