experimenting

This commit is contained in:
Seth Alves 2016-11-17 16:06:35 -08:00
parent 028be0f830
commit 8530156227
2 changed files with 24 additions and 12 deletions

View file

@ -600,21 +600,29 @@ void RenderablePolyVoxEntityItem::render(RenderArgs* args) {
_pipeline = gpu::Pipeline::create(program, state); _pipeline = gpu::Pipeline::create(program, state);
} }
if (!_vertexFormat) {
auto vf = std::make_shared<gpu::Stream::Format>();
vf->setAttribute(gpu::Stream::POSITION, 0, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ), 0);
vf->setAttribute(gpu::Stream::NORMAL, 0, gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ), 12);
_vertexFormat = vf;
}
gpu::Batch& batch = *args->_batch; gpu::Batch& batch = *args->_batch;
batch.setPipeline(_pipeline); batch.setPipeline(_pipeline);
Transform transform(voxelToWorldMatrix()); Transform transform(voxelToWorldMatrix());
batch.setModelTransform(transform); batch.setModelTransform(transform);
batch.setInputFormat(mesh->getVertexFormat()); // batch.setInputFormat(mesh->getVertexFormat());
batch.setInputFormat(_vertexFormat);
// batch.setInputStream(0, mesh->getVertexStream()); // batch.setInputStream(0, mesh->getVertexStream());
batch.setInputBuffer(gpu::Stream::POSITION, mesh->getVertexBuffer()._buffer, batch.setInputBuffer(gpu::Stream::POSITION, mesh->getVertexBuffer()._buffer,
0, 0,
sizeof(PolyVox::PositionMaterialNormal)); sizeof(PolyVox::PositionMaterialNormal));
batch.setInputBuffer(gpu::Stream::NORMAL, /* batch.setInputBuffer(gpu::Stream::NORMAL, mesh->getVertexBuffer()._buffer,
mesh->getVertexBuffer()._buffer,
sizeof(float) * 3, sizeof(float) * 3,
sizeof(PolyVox::PositionMaterialNormal)); sizeof(PolyVox::PositionMaterialNormal));*/
batch.setIndexBuffer(gpu::UINT32, mesh->getIndexBuffer()._buffer, 0); batch.setIndexBuffer(gpu::UINT32, mesh->getIndexBuffer()._buffer, 0);
@ -1102,7 +1110,6 @@ void RenderablePolyVoxEntityItem::getMesh() {
auto entity = std::static_pointer_cast<RenderablePolyVoxEntityItem>(getThisPointer()); auto entity = std::static_pointer_cast<RenderablePolyVoxEntityItem>(getThisPointer());
QtConcurrent::run([entity, voxelSurfaceStyle] { QtConcurrent::run([entity, voxelSurfaceStyle] {
model::MeshPointer mesh(new model::Mesh()); model::MeshPointer mesh(new model::Mesh());
@ -1152,20 +1159,24 @@ void RenderablePolyVoxEntityItem::getMesh() {
(gpu::Byte*)vecVertices.data()); (gpu::Byte*)vecVertices.data());
auto vertexBufferPtr = gpu::BufferPointer(vertexBuffer); auto vertexBufferPtr = gpu::BufferPointer(vertexBuffer);
gpu::Resource::Size vertexBufferSize = 0; gpu::Resource::Size vertexBufferSize = 0;
if (vertexBufferPtr->getSize() > sizeof(float) * 3) { gpu::Resource::Size normalBufferSize = sizeof(float) * 3;
vertexBufferSize = vertexBufferPtr->getSize() - sizeof(float) * 3; if (vertexBufferPtr->getSize() > sizeof(PolyVox::PositionMaterialNormal)) {
vertexBufferSize = vertexBufferPtr->getSize() - sizeof(float) * 4;
normalBufferSize = vertexBufferPtr->getSize() - sizeof(float);
} }
gpu::BufferView vertexBufferView(vertexBufferPtr, 0, vertexBufferSize, gpu::BufferView vertexBufferView(vertexBufferPtr, 0,
vertexBufferPtr->getSize(),
// vertexBufferSize,
sizeof(PolyVox::PositionMaterialNormal), sizeof(PolyVox::PositionMaterialNormal),
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RAW)); gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RAW));
mesh->setVertexBuffer(vertexBufferView); mesh->setVertexBuffer(vertexBufferView);
mesh->addAttribute(gpu::Stream::NORMAL, mesh->addAttribute(gpu::Stream::NORMAL,
gpu::BufferView(vertexBufferPtr, gpu::BufferView(vertexBufferPtr, sizeof(float) * 3,
sizeof(float) * 3, vertexBufferPtr->getSize() ,
vertexBufferPtr->getSize() - sizeof(float) * 3, // normalBufferSize,
sizeof(PolyVox::PositionMaterialNormal), sizeof(PolyVox::PositionMaterialNormal),
gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RAW))); gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RAW)));
entity->setMesh(mesh); entity->setMesh(mesh);
}); });
} }

View file

@ -149,6 +149,7 @@ private:
// may not match _voxelVolumeSize. // may not match _voxelVolumeSize.
model::MeshPointer _mesh; model::MeshPointer _mesh;
gpu::Stream::FormatPointer _vertexFormat;
bool _meshDirty { true }; // does collision-shape need to be recomputed? bool _meshDirty { true }; // does collision-shape need to be recomputed?
bool _meshInitialized { false }; bool _meshInitialized { false };