#pragma once #include #include #include "IDrawable.h" #include "Vertex.h" #include using namespace DirectX; namespace eg3d { struct STLTriangle { XMFLOAT3 normal; XMFLOAT3 vertices[3]; uint16_t attributeByteCount; }; typedef int (ImportAdapter_fn)(XMFLOAT3&); // importáláskor a vertexek átalakítására szolgál class ImportAdapters { public: static int IAD_Default(XMFLOAT3& vertex); // alapértelmezett static int IAD_SwapYZ_RH(XMFLOAT3& vertex); // y-z tengelyek cseréje }; class Geometry : public IDrawable { private: std::vector mVertices; // vertexek std::vector mIndices; // indexek std::mutex mModifMtx; // ... // topológia D3D_PRIMITIVE_TOPOLOGY mTopology; // bufferek ComPtr mVertexBuffer; ComPtr mIndexBuffer; // leírók D3D12_VERTEX_BUFFER_VIEW mVertexBufferView; D3D12_INDEX_BUFFER_VIEW mIndexBufferView; protected: ComPtr device; // device public: explicit Geometry(ComPtr device); // konstr. Geometry(const Geometry& other); // másolókonstruktor void setVertices(const std::vector &vertices); // vertexek beállítása std::vector getVertices() const; // vertexek lekérése void setIndices(const std::vector &indices); // indexek beállítása std::vector getIndices() const; // indexek lekérése void setTopology(D3D_PRIMITIVE_TOPOLOGY topology); // topológia beállítása D3D_PRIMITIVE_TOPOLOGY getTopology() const; // topológia lekérése void setupInputAssembler(ComPtr commandList) const; // input assembler beállítása virtual void draw(ComPtr commandList) const override; // kirajzolás void merge(const Geometry& other); // két geometria egyesítése Geometry& operator+=(const Geometry& other); // két geometria egyesítése void loadBinarySTL(const std::string& fileName, ImportAdapter_fn * pIAD = nullptr); // bináris STL fájl betöltése ComPtr getDevice() const; // device elkérése }; // geometriatároló típusa using GeometryPool = std::vector>; }