From 86157744ddb634f97794ae3c28dd12627669a9b0 Mon Sep 17 00:00:00 2001 From: Yili Zhao Date: Fri, 6 Sep 2019 16:07:17 -0700 Subject: [PATCH 1/4] Support ptex mesh - step 3: better naming -) rename the buffers on GPU side in PTexMeshData; -) rename variables in PTexMeshDrawable; --- src/esp/assets/PTexMeshData.cpp | 36 +++++++++++++++++--------------- src/esp/assets/PTexMeshData.h | 13 +++++++----- src/esp/gfx/PTexMeshDrawable.cpp | 11 +++++----- src/esp/gfx/PTexMeshDrawable.h | 4 ++-- src/esp/gfx/PTexMeshShader.h | 4 ++-- 5 files changed, 37 insertions(+), 31 deletions(-) diff --git a/src/esp/assets/PTexMeshData.cpp b/src/esp/assets/PTexMeshData.cpp index a4a0642533..6527144ac7 100644 --- a/src/esp/assets/PTexMeshData.cpp +++ b/src/esp/assets/PTexMeshData.cpp @@ -25,8 +25,6 @@ static constexpr int ROTATION_SHIFT = 30; static constexpr int FACE_MASK = 0x3FFFFFFF; -namespace Cr = Corrade; - namespace esp { namespace assets { @@ -502,8 +500,9 @@ void PTexMeshData::parsePLY(const std::string& filename, file.close(); - Cr::Containers::Array - mmappedData = Cr::Utility::Directory::mapRead(filename); + Corrade::Containers::Array + mmappedData = Corrade::Utility::Directory::mapRead(filename); const size_t fileSize = io::fileSize(filename); @@ -579,10 +578,10 @@ void PTexMeshData::uploadBuffersToGPU(bool forceReload) { std::make_unique()); auto& currentMesh = renderingBuffers_.back(); - currentMesh->vbo.setData(submeshes_[iMesh].vbo, - Magnum::GL::BufferUsage::StaticDraw); - currentMesh->ibo.setData(submeshes_[iMesh].ibo, - Magnum::GL::BufferUsage::StaticDraw); + currentMesh->vertexBuffer.setData(submeshes_[iMesh].vbo, + Magnum::GL::BufferUsage::StaticDraw); + currentMesh->indexBuffer.setData(submeshes_[iMesh].ibo, + Magnum::GL::BufferUsage::StaticDraw); } LOG(INFO) << "... done" << std::endl; @@ -598,10 +597,11 @@ void PTexMeshData::uploadBuffersToGPU(bool forceReload) { for (int iMesh = 0; iMesh < submeshes_.size(); ++iMesh) { auto& currentMesh = renderingBuffers_[iMesh]; - currentMesh->adjTex.setBuffer(Magnum::GL::BufferTextureFormat::R32UI, - currentMesh->abo); - currentMesh->abo.setData(adjFaces[iMesh], - Magnum::GL::BufferUsage::StaticDraw); + currentMesh->adjFacesBufferTexture.setBuffer( + Magnum::GL::BufferTextureFormat::R32UI, currentMesh->adjFacesBuffer); + currentMesh->adjFacesBuffer.setData(adjFaces[iMesh], + Magnum::GL::BufferUsage::StaticDraw); + GLintptr offset = 0; currentMesh->mesh .setPrimitive(Magnum::GL::MeshPrimitive::LinesAdjacency) // Warning: @@ -609,8 +609,9 @@ void PTexMeshData::uploadBuffersToGPU(bool forceReload) { // setCount because that returns the number of bytes of the buffer, NOT // the index counts .setCount(submeshes_[iMesh].ibo.size()) - .addVertexBuffer(currentMesh->vbo, 0, gfx::PTexMeshShader::Position{}) - .setIndexBuffer(currentMesh->ibo, 0, + .addVertexBuffer(currentMesh->vertexBuffer, offset, + gfx::PTexMeshShader::Position{}) + .setIndexBuffer(currentMesh->indexBuffer, offset, Magnum::GL::MeshIndexType::UnsignedInt); } @@ -624,12 +625,13 @@ void PTexMeshData::uploadBuffersToGPU(bool forceReload) { << renderingBuffers_.size() << "... "; LOG(INFO).flush(); - Cr::Containers::Array data = - Cr::Utility::Directory::mapRead(rgbFile); + Corrade::Containers::Array + data = Corrade::Utility::Directory::mapRead(rgbFile); const int dim = static_cast(std::sqrt(data.size() / 3)); // square Magnum::ImageView2D image(Magnum::PixelFormat::RGB8UI, {dim, dim}, data); renderingBuffers_[iMesh] - ->tex.setWrapping(Magnum::GL::SamplerWrapping::ClampToEdge) + ->atlasTexture.setWrapping(Magnum::GL::SamplerWrapping::ClampToEdge) .setMagnificationFilter(Magnum::GL::SamplerFilter::Linear) .setMinificationFilter(Magnum::GL::SamplerFilter::Linear) // .setStorage(1, GL::TextureFormat::RGB8UI, image.size()) diff --git a/src/esp/assets/PTexMeshData.h b/src/esp/assets/PTexMeshData.h index 20b1962960..4a0f46358c 100644 --- a/src/esp/assets/PTexMeshData.h +++ b/src/esp/assets/PTexMeshData.h @@ -30,11 +30,14 @@ class PTexMeshData : public BaseMesh { struct RenderingBuffer { Magnum::GL::Mesh mesh; - Magnum::GL::Texture2D tex; - Magnum::GL::Buffer vbo; - Magnum::GL::Buffer ibo; - Magnum::GL::Buffer abo; - Magnum::GL::BufferTexture adjTex; + Magnum::GL::Texture2D atlasTexture; + Magnum::GL::Buffer vertexBuffer; + Magnum::GL::Buffer indexBuffer; + Magnum::GL::Buffer adjFacesBuffer; + Magnum::GL::BufferTexture adjFacesBufferTexture; + + RenderingBuffer() + : adjFacesBuffer{Magnum::GL::Buffer::TargetHint::Texture} {} }; PTexMeshData() : BaseMesh(SupportedMeshType::PTEX_MESH) {} diff --git a/src/esp/gfx/PTexMeshDrawable.cpp b/src/esp/gfx/PTexMeshDrawable.cpp index 60b4a22929..a2a5f569e9 100644 --- a/src/esp/gfx/PTexMeshDrawable.cpp +++ b/src/esp/gfx/PTexMeshDrawable.cpp @@ -17,17 +17,18 @@ PTexMeshDrawable::PTexMeshDrawable( Magnum::SceneGraph::DrawableGroup3D* group /* = nullptr */) : Drawable{node, shader, ptexMeshData.getRenderingBuffer(submeshID)->mesh, group}, - tex_(ptexMeshData.getRenderingBuffer(submeshID)->tex), - adjTex_(ptexMeshData.getRenderingBuffer(submeshID)->adjTex), + atlasTexture_(ptexMeshData.getRenderingBuffer(submeshID)->atlasTexture), + adjFacesBufferTexture_( + ptexMeshData.getRenderingBuffer(submeshID)->adjFacesBufferTexture), tileSize_(ptexMeshData.tileSize()), exposure_(ptexMeshData.exposure()) {} void PTexMeshDrawable::draw(const Magnum::Matrix4& transformationMatrix, Magnum::SceneGraph::Camera3D& camera) { PTexMeshShader& ptexMeshShader = static_cast(shader_); - ptexMeshShader.setPTexUniforms(tex_, tileSize_, exposure_) - .bindAtlasTexture(tex_) - .bindAdjFacesBufferTexture(adjTex_) + ptexMeshShader.setPTexUniforms(atlasTexture_, tileSize_, exposure_) + .bindAtlasTexture(atlasTexture_) + .bindAdjFacesBufferTexture(adjFacesBufferTexture_) .setMVPMatrix(camera.projectionMatrix() * transformationMatrix); mesh_.draw(ptexMeshShader); } diff --git a/src/esp/gfx/PTexMeshDrawable.h b/src/esp/gfx/PTexMeshDrawable.h index a5d7c7d5ce..8ae0ac7d51 100644 --- a/src/esp/gfx/PTexMeshDrawable.h +++ b/src/esp/gfx/PTexMeshDrawable.h @@ -28,8 +28,8 @@ class PTexMeshDrawable : public Drawable { virtual void draw(const Magnum::Matrix4& transformationMatrix, Magnum::SceneGraph::Camera3D& camera) override; - Magnum::GL::Texture2D& tex_; - Magnum::GL::BufferTexture& adjTex_; + Magnum::GL::Texture2D& atlasTexture_; + Magnum::GL::BufferTexture& adjFacesBufferTexture_; uint32_t tileSize_; float exposure_; }; diff --git a/src/esp/gfx/PTexMeshShader.h b/src/esp/gfx/PTexMeshShader.h index 399c55701d..6889c9b165 100644 --- a/src/esp/gfx/PTexMeshShader.h +++ b/src/esp/gfx/PTexMeshShader.h @@ -41,8 +41,8 @@ class PTexMeshShader : public Magnum::GL::AbstractShaderProgram { int submeshID, uint32_t tileSize, float exposure) { - setPTexUniforms(ptexMeshData.getRenderingBuffer(submeshID)->tex, tileSize, - exposure); + setPTexUniforms(ptexMeshData.getRenderingBuffer(submeshID)->atlasTexture, + tileSize, exposure); return *this; } From 2a23bd1d0b90b91aab43d4332dac3e7b7be54c61 Mon Sep 17 00:00:00 2001 From: Yili Zhao Date: Fri, 6 Sep 2019 16:23:14 -0700 Subject: [PATCH 2/4] minor --- src/esp/assets/PTexMeshData.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/esp/assets/PTexMeshData.cpp b/src/esp/assets/PTexMeshData.cpp index 6527144ac7..4a04d732d3 100644 --- a/src/esp/assets/PTexMeshData.cpp +++ b/src/esp/assets/PTexMeshData.cpp @@ -629,6 +629,13 @@ void PTexMeshData::uploadBuffersToGPU(bool forceReload) { Corrade::Utility::Directory::MapDeleter> data = Corrade::Utility::Directory::mapRead(rgbFile); const int dim = static_cast(std::sqrt(data.size() / 3)); // square + + // TODO: + // To be fixed: + // -) the file format is obsolete. The .rgb file is replaced by .hdr file; + // -) the texture format is wrong. It should be RGB16F; + // -) the storage should be set; + // MUST fix it in other PR. Magnum::ImageView2D image(Magnum::PixelFormat::RGB8UI, {dim, dim}, data); renderingBuffers_[iMesh] ->atlasTexture.setWrapping(Magnum::GL::SamplerWrapping::ClampToEdge) From debf1d2b40016a15ff621b332e23f03c9b9ee6f1 Mon Sep 17 00:00:00 2001 From: Yili Zhao Date: Mon, 9 Sep 2019 09:54:34 -0700 Subject: [PATCH 3/4] minor --- src/esp/assets/PTexMeshData.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/esp/assets/PTexMeshData.cpp b/src/esp/assets/PTexMeshData.cpp index 4a04d732d3..adddda4c73 100644 --- a/src/esp/assets/PTexMeshData.cpp +++ b/src/esp/assets/PTexMeshData.cpp @@ -25,6 +25,8 @@ static constexpr int ROTATION_SHIFT = 30; static constexpr int FACE_MASK = 0x3FFFFFFF; +namespace Cr = Corrade; + namespace esp { namespace assets { @@ -625,17 +627,10 @@ void PTexMeshData::uploadBuffersToGPU(bool forceReload) { << renderingBuffers_.size() << "... "; LOG(INFO).flush(); - Corrade::Containers::Array - data = Corrade::Utility::Directory::mapRead(rgbFile); + Cr::Containers::Array data = + Cr::Utility::Directory::mapRead(rgbFile); const int dim = static_cast(std::sqrt(data.size() / 3)); // square - // TODO: - // To be fixed: - // -) the file format is obsolete. The .rgb file is replaced by .hdr file; - // -) the texture format is wrong. It should be RGB16F; - // -) the storage should be set; - // MUST fix it in other PR. Magnum::ImageView2D image(Magnum::PixelFormat::RGB8UI, {dim, dim}, data); renderingBuffers_[iMesh] ->atlasTexture.setWrapping(Magnum::GL::SamplerWrapping::ClampToEdge) From 1080728fdaa8b6b1f74e305c359f3556bbc94e67 Mon Sep 17 00:00:00 2001 From: Yili Zhao Date: Mon, 9 Sep 2019 09:58:24 -0700 Subject: [PATCH 4/4] minor --- src/esp/assets/PTexMeshData.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/esp/assets/PTexMeshData.cpp b/src/esp/assets/PTexMeshData.cpp index adddda4c73..3e548ca0db 100644 --- a/src/esp/assets/PTexMeshData.cpp +++ b/src/esp/assets/PTexMeshData.cpp @@ -502,9 +502,8 @@ void PTexMeshData::parsePLY(const std::string& filename, file.close(); - Corrade::Containers::Array - mmappedData = Corrade::Utility::Directory::mapRead(filename); + Cr::Containers::Array + mmappedData = Cr::Utility::Directory::mapRead(filename); const size_t fileSize = io::fileSize(filename);