// INTERNAL INCLUDES
#include <dali/internal/common/buffer-index.h>
-#include <dali/internal/render/gl-resources/context.h>
-#include <dali/internal/render/gl-resources/gpu-buffer.h>
#include <dali/internal/render/renderers/render-vertex-buffer.h>
#include <dali/internal/render/shaders/program.h>
Geometry::~Geometry() = default;
-void Geometry::GlContextCreated(Context& context)
-{
-}
-
-void Geometry::GlContextDestroyed()
-{
-}
-
void Geometry::AddVertexBuffer(Render::VertexBuffer* vertexBuffer)
{
mVertexBuffers.PushBack(vertexBuffer);
}
}
-void Geometry::Draw(
+bool Geometry::Draw(
Graphics::Controller& graphicsController,
Graphics::CommandBuffer& commandBuffer,
uint32_t elementBufferOffset,
uint32_t elementBufferCount)
{
//Bind buffers to attribute locations
- const uint32_t vertexBufferCount = static_cast<uint32_t>(mVertexBuffers.Count());
+ const auto vertexBufferCount = static_cast<uint32_t>(mVertexBuffers.Count());
std::vector<const Graphics::Buffer*> buffers;
std::vector<uint32_t> offsets;
for(uint32_t i = 0; i < vertexBufferCount; ++i)
{
- Graphics::Buffer* buffer = mVertexBuffers[i]->GetGpuBuffer().GetGraphicsObject();
-
- if(buffer)
+ const GpuBuffer* gpuBuffer = mVertexBuffers[i]->GetGpuBuffer();
+ if(gpuBuffer)
{
- buffers.push_back(buffer);
- offsets.push_back(0u);
+ const Graphics::Buffer* buffer = gpuBuffer->GetGraphicsObject();
+
+ if(buffer)
+ {
+ buffers.push_back(buffer);
+ offsets.push_back(0u);
+ }
}
+ //@todo Figure out why this is being drawn without geometry having been uploaded
}
+ if(buffers.empty())
+ {
+ return false;
+ }
+
commandBuffer.BindVertexBuffers(0, buffers, offsets);
uint32_t numIndices(0u);
if(elementBufferOffset != 0u)
{
elementBufferOffset = (elementBufferOffset >= numIndices) ? numIndices - 1 : elementBufferOffset;
- firstIndexOffset = elementBufferOffset * sizeof(GLushort);
+ firstIndexOffset = intptr_t(elementBufferOffset * sizeof(uint16_t));
numIndices -= elementBufferOffset;
}
if(mIndexBuffer && mGeometryType != Dali::Geometry::POINTS)
{
//Indexed draw call
- Graphics::Buffer* ibo = mIndexBuffer->GetGraphicsObject();
+ const Graphics::Buffer* ibo = mIndexBuffer->GetGraphicsObject();
if(ibo)
{
commandBuffer.BindIndexBuffer(*ibo, 0, Graphics::Format::R16_UINT);
}
else
{
- //Unindex draw call
- GLsizei numVertices(0u);
+ // Un-indexed draw call
+ uint32_t numVertices(0u);
if(vertexBufferCount > 0)
{
// truncated, no value loss happening in practice
- numVertices = static_cast<GLsizei>(mVertexBuffers[0]->GetElementCount());
+ numVertices = static_cast<uint32_t>(mVertexBuffers[0]->GetElementCount());
}
commandBuffer.Draw(numVertices, 1, 0, 0);
}
+ return true;
}
Graphics::PrimitiveTopology Geometry::GetTopology() const