mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-08 12:18:30 +09:00
[Feat] (MG_Backend/DirectVulkan): refactor DrawElements to use payload as param
This commit is contained in:
@@ -79,8 +79,40 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
||||
return;
|
||||
}
|
||||
|
||||
const Uint8* src = indexData->data() + byteOffset;
|
||||
pVulkanRenderer->DrawElements(type, count, src, requiredBytes);
|
||||
DrawElementPayload payload{};
|
||||
payload.drawArray.mode = mode;
|
||||
payload.drawArray.first = 0;
|
||||
payload.drawArray.count = count;
|
||||
payload.drawArray.vertexArray = vao.get();
|
||||
payload.indexType = type;
|
||||
payload.indexData = indexData->data() + byteOffset;
|
||||
payload.indexDataSizeBytes = requiredBytes;
|
||||
|
||||
const auto& attr0 = vao->GetAttribute(0);
|
||||
if (attr0.Enabled && attr0.Buffer) {
|
||||
const auto positionData = attr0.Buffer->GetDataReadOnly();
|
||||
if (positionData && !positionData->empty()) {
|
||||
payload.drawArray.hasPositionStream = true;
|
||||
payload.drawArray.positionData = positionData->data();
|
||||
payload.drawArray.positionDataSizeBytes = attr0.Buffer->GetSize();
|
||||
payload.drawArray.positionOffsetBytes = attr0.Offset;
|
||||
payload.drawArray.positionStrideBytes = attr0.Stride > 0 ? static_cast<SizeT>(attr0.Stride) : 0;
|
||||
payload.drawArray.positionSize = attr0.Size;
|
||||
payload.drawArray.positionNormalized = attr0.Normalized;
|
||||
|
||||
switch (attr0.Type) {
|
||||
case DataType::Float32:
|
||||
payload.drawArray.positionType = GL_FLOAT;
|
||||
break;
|
||||
default:
|
||||
payload.drawArray.positionType = GL_FLOAT;
|
||||
payload.drawArray.hasPositionStream = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pVulkanRenderer->DrawElements(payload);
|
||||
}
|
||||
|
||||
void DrawArrays(GLenum mode, GLint first, GLsizei count) {
|
||||
|
||||
Reference in New Issue
Block a user