summaryrefslogtreecommitdiff
path: root/Client/Source/Graphics/DefaultVertexLayout.h
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Source/Graphics/DefaultVertexLayout.h')
-rw-r--r--Client/Source/Graphics/DefaultVertexLayout.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/Client/Source/Graphics/DefaultVertexLayout.h b/Client/Source/Graphics/DefaultVertexLayout.h
new file mode 100644
index 0000000..2222ff1
--- /dev/null
+++ b/Client/Source/Graphics/DefaultVertexLayout.h
@@ -0,0 +1,55 @@
+#pragma once
+
+#include <vector>
+
+#include "../Utilities/Type.h"
+#include "../Utilities/UtilMacros.h"
+
+#include "OpenGL.h"
+#include "GPUDataBuffer.h"
+#include "VertexAttribute.h"
+
+// 默认的顶点布局,适用于Mesh导入的结果,以保持shader的一致性
+// 如果需要修改布局,比如编辑器UI中,用CustomVertexLayout
+
+// 默认的顶点属性以及顺序
+enum EVertexAttr
+{
+ VertexAttr_Position = 0,
+ VertexAttr_Normal,
+ VertexAttr_Tangent,
+ VertexAttr_Color,
+ VertexAttr_UV,
+ VertexAttr_UV2,
+ VertexAttr_UV3,
+ VertexAttr_UV4,
+
+ VertexAttr_Count
+};
+
+// GPU侧的默认顶点属性
+struct DefaultVertexLayout
+{
+ uint32 enableMask;
+ GLuint buffer; // vbo或者0(pinned memory)
+ VertexAttributeDescriptor attributes[VertexAttr_Count];
+};
+
+namespace VertexLayout
+{
+ // ibo无论是default还是custom布局都是short
+ uint GetDefaultIndexSize();
+ GLenum GetDefaultIndexFormat();
+
+ uint32 GetDynamicChunkStride(uint32 vertexAttrMask);
+ bool IsGLVertexAttrNeedNormalized(uint attr);
+ uint GetDefaultShaderChannelFormat(uint attr);
+ uint32 GetDefaultVertexAttrSize(int attr);
+ uint GetDefaultVertexAttrDimension(uint attr);
+ uint GetDefaultShaderChannelDimension(uint attr);
+ GLenum GetDefaultVertexAttrComponentType(uint attr);
+
+ void SetupDefaultVertexLayout(const DefaultVertexLayout& info);
+ void InvalidateVertexInputCache();
+
+}