-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
removed class Attribute and use BaseGeometry::Attribute to reduce del…
…ta between opengl and scenegraph
- Loading branch information
m0dB
authored and
m0dB
committed
Sep 24, 2024
1 parent
34ad7d7
commit 9abe440
Showing
19 changed files
with
177 additions
and
179 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
#pragma once | ||
|
||
#include "rendergraph/types.h" | ||
|
||
namespace rendergraph { | ||
struct AttributeInit; | ||
} | ||
|
||
struct rendergraph::AttributeInit { | ||
int m_tupleSize; | ||
PrimitiveType m_primitiveType; | ||
|
||
template<typename T> | ||
static AttributeInit create() { | ||
return AttributeInit{tupleSizeOf<T>(), primitiveTypeOf<T>()}; | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,20 @@ | ||
#pragma once | ||
|
||
#include "backend/baseattributeset.h" | ||
#include "rendergraph/attributeinit.h" | ||
|
||
namespace rendergraph { | ||
class AttributeSet; | ||
} | ||
|
||
class rendergraph::AttributeSet : public rendergraph::BaseAttributeSet { | ||
public: | ||
AttributeSet(std::initializer_list<Attribute> list, const std::vector<QString>& names); | ||
const std::vector<Attribute>& attributes() const; | ||
AttributeSet(std::initializer_list<AttributeInit> list, const std::vector<QString>& names); | ||
}; | ||
|
||
namespace rendergraph { | ||
template<typename... T> | ||
AttributeSet makeAttributeSet(const std::vector<QString>& names) { | ||
return AttributeSet({(Attribute::create<T>())...}, names); | ||
return AttributeSet({(AttributeInit::create<T>())...}, names); | ||
} | ||
} // namespace rendergraph |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#include "rendergraph/attributeset.h" | ||
|
||
using namespace rendergraph; | ||
|
||
AttributeSet::AttributeSet(std::initializer_list<AttributeInit> list, | ||
const std::vector<QString>& names) | ||
: BaseAttributeSet(list, names) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,41 +1,21 @@ | ||
#include "backend/basegeometry.h" | ||
|
||
#include "backend/baseattributeset.h" | ||
#include "rendergraph/geometry.h" | ||
|
||
using namespace rendergraph; | ||
|
||
BaseGeometry::BaseGeometry( | ||
const AttributeSet& attributeSet, int vertexCount) | ||
: m_drawingMode(static_cast<int>(Geometry::DrawingMode:: | ||
TriangleStrip)) // to mimic sg default | ||
, | ||
m_vertexCount(vertexCount) { | ||
int offset = 0; | ||
for (const auto& attribute : attributeSet.attributes()) { | ||
m_offsets.push_back(offset); | ||
offset += attribute.m_tupleSize; | ||
m_tupleSizes.push_back(attribute.m_tupleSize); | ||
} | ||
m_stride = offset * sizeof(float); | ||
m_data.resize(offset * vertexCount); | ||
} | ||
|
||
int BaseGeometry::attributeCount() const { | ||
return m_tupleSizes.size(); | ||
} | ||
|
||
int BaseGeometry::vertexCount() const { | ||
return m_vertexCount; | ||
} | ||
namespace { | ||
// to mimic sg default | ||
constexpr int defaultDrawingMode = static_cast<int>(Geometry::DrawingMode::TriangleStrip); | ||
} // namespace | ||
|
||
int BaseGeometry::offset(int attributeIndex) const { | ||
return m_offsets[attributeIndex]; | ||
} | ||
|
||
int BaseGeometry::tupleSize(int attributeIndex) const { | ||
return m_tupleSizes[attributeIndex]; | ||
} | ||
|
||
int BaseGeometry::stride() const { | ||
return m_stride; | ||
BaseGeometry::BaseGeometry( | ||
const BaseAttributeSet& attributeSet, int vertexCount) | ||
: m_pAttributes(attributeSet.attributes().data()), | ||
m_attributeCount(attributeSet.attributes().size()), | ||
m_sizeOfVertex(attributeSet.sizeOfVertex()), | ||
m_drawingMode(defaultDrawingMode), | ||
m_vertexCount(vertexCount), | ||
m_vertexData(m_vertexCount * m_sizeOfVertex / sizeof(float)) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,29 +1,56 @@ | ||
#pragma once | ||
|
||
#include <QString> | ||
#include <vector> | ||
|
||
#include "rendergraph/attributeset.h" | ||
#include "rendergraph/types.h" | ||
|
||
namespace rendergraph { | ||
class BaseAttributeSet; // fwd decl to avoid circular dependency | ||
class BaseGeometry; | ||
} | ||
|
||
// TODO this assumes all vertices consist of floats | ||
class rendergraph::BaseGeometry { | ||
protected: | ||
BaseGeometry(const AttributeSet& attributeSet, int vertexCount); | ||
BaseGeometry(const BaseAttributeSet& attributeSet, int vertexCount); | ||
|
||
public: | ||
int attributeCount() const; | ||
int vertexCount() const; | ||
int offset(int attributeIndex) const; | ||
int tupleSize(int attributeIndex) const; | ||
int stride() const; | ||
struct Attribute { | ||
const int m_offset; | ||
const int m_tupleSize; | ||
const PrimitiveType m_primitiveType; | ||
const QString m_name; | ||
}; | ||
|
||
float* vertexData() { | ||
return m_vertexData.data(); | ||
} | ||
const float* vertexData() const { | ||
return m_vertexData.data(); | ||
} | ||
const Attribute* attributes() const { | ||
return m_pAttributes; | ||
} | ||
int attributeCount() const { | ||
return m_attributeCount; | ||
} | ||
int vertexCount() const { | ||
return m_vertexCount; | ||
} | ||
int sizeOfVertex() const { // in bytes | ||
return m_sizeOfVertex; | ||
} | ||
void allocate(int vertexCount) { | ||
m_vertexCount = vertexCount; | ||
m_vertexData.resize(m_vertexCount * sizeOfVertex() / sizeof(float)); | ||
} | ||
|
||
protected: | ||
const Attribute* m_pAttributes; | ||
const int m_attributeCount; | ||
const int m_sizeOfVertex; | ||
int m_drawingMode; | ||
int m_vertexCount; | ||
std::vector<int> m_tupleSizes; | ||
std::vector<int> m_offsets; | ||
int m_stride; | ||
std::vector<float> m_data; | ||
std::vector<float> m_vertexData; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.