Browse Source

添加VertexBuffer类

master
blobt 4 years ago
parent
commit
e07e3cbe61
  1. 2
      renderFramework.vcxproj
  2. 6
      renderFramework.vcxproj.filters
  3. 55
      vertexbuffer.cpp
  4. 25
      vertexbuffer.h

2
renderFramework.vcxproj

@ -129,11 +129,13 @@
<ClCompile Include="main.cpp" />
<ClCompile Include="scene.cpp" />
<ClCompile Include="utils.cpp" />
<ClCompile Include="vertexbuffer.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="ggl.h" />
<ClInclude Include="scene.h" />
<ClInclude Include="utils.h" />
<ClInclude Include="vertexbuffer.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

6
renderFramework.vcxproj.filters

@ -24,6 +24,9 @@
<ClCompile Include="utils.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="vertexbuffer.cpp">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="ggl.h">
@ -35,5 +38,8 @@
<ClInclude Include="utils.h">
<Filter>源文件</Filter>
</ClInclude>
<ClInclude Include="vertexbuffer.h">
<Filter>源文件</Filter>
</ClInclude>
</ItemGroup>
</Project>

55
vertexbuffer.cpp

@ -0,0 +1,55 @@
#include "vertexbuffer.h"
GLuint VertexBuffer::CreateBufferObject(GLenum bufferType, GLsizeiptr size, GLenum usage, void * data)
{
GLuint object;
glGenBuffers(1, &object);
glBindBuffer(bufferType, object);
glBufferData(bufferType, size, data, usage);
glBindBuffer(bufferType, 0);
return object;
}
void VertexBuffer::SetSize(int vertexCount)
{
mVertexCount = vertexCount;
mVertexes = new Vertex[mVertexCount];
memset(mVertexes, 0, sizeof(Vertex)*mVertexCount);
mVBO = CreateBufferObject(GL_ARRAY_BUFFER, sizeof(Vertex)*mVertexCount, GL_STATIC_DRAW, nullptr);
}
void VertexBuffer::SetPosition(int index, float x, float y, float z, float w) {
mVertexes[index].Position[0] = x;
mVertexes[index].Position[1] = y;
mVertexes[index].Position[2] = z;
mVertexes[index].Position[3] = w;
}
void VertexBuffer::SetColor(int index, float r, float g, float b, float a) {
mVertexes[index].Color[0] = r;
mVertexes[index].Color[1] = g;
mVertexes[index].Color[2] = b;
mVertexes[index].Color[3] = a;
}
void VertexBuffer::SetTexcoord(int index, float x, float y) {
mVertexes[index].Texcoord[0] = x;
mVertexes[index].Texcoord[1] = y;
}
void VertexBuffer::SetNormal(int index, float x, float y, float z) {
mVertexes[index].Normal[0] = x;
mVertexes[index].Normal[1] = y;
mVertexes[index].Normal[2] = z;
mVertexes[index].Normal[3] = 1.0;
}
void VertexBuffer::Bind() {
glBindBuffer(GL_ARRAY_BUFFER, mVBO);
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(Vertex)*mVertexCount, mVertexes);
}
void VertexBuffer::Unbind() {
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
Vertex& VertexBuffer::Get(int index) {
return mVertexes[index];
}

25
vertexbuffer.h

@ -0,0 +1,25 @@
#pragma once
#include "ggl.h"
struct Vertex {
float Position[4];
float Color[4];
float Texcoord[4];
float Normal[4];
};
class VertexBuffer {
public :
static GLuint CreateBufferObject(GLenum bufferType, GLsizeiptr size, GLenum usage, void* data = nullptr);
public:
Vertex *mVertexes;
int mVertexCount;
GLuint mVBO;
void SetSize(int vertexCount);
void SetPosition(int index, float x, float y, float z, float w = 1.0f);
void SetColor(int index, float r, float g, float b, float a = 1.0);
void SetTexcoord(int index, float x, float y);
void SetNormal(int index, float x, float y, float z);
void Bind();
void Unbind();
Vertex& Get(int index);
};
Loading…
Cancel
Save