From f41fa279e803c1ea3f6912b15ea2869478625f1f Mon Sep 17 00:00:00 2001 From: skyjake Date: Sun, 28 Apr 2013 21:56:05 +0300 Subject: [PATCH] libgui|GLBuffer: Added a 3D vertex format --- doomsday/libgui/include/de/gui/glbuffer.h | 16 ++++++++++++++++ doomsday/libgui/src/glbuffer.cpp | 18 ++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/doomsday/libgui/include/de/gui/glbuffer.h b/doomsday/libgui/include/de/gui/glbuffer.h index 19493b88c6..eed97eba73 100644 --- a/doomsday/libgui/include/de/gui/glbuffer.h +++ b/doomsday/libgui/include/de/gui/glbuffer.h @@ -75,6 +75,22 @@ struct LIBGUI_PUBLIC Vertex2TexRgba static internal::AttribSpec const _spec[3]; }; +/** + * Vertex format with 3D coordinates, one set of texture coordinates, and an + * RGBA color. + */ +struct LIBGUI_PUBLIC Vertex3TexRgba +{ + Vector3f pos; + Vector2f texCoord; + Vector4f rgba; + + static internal::AttribSpecs formatSpec(); + +private: + static internal::AttribSpec const _spec[3]; +}; + namespace gl { enum Usage { diff --git a/doomsday/libgui/src/glbuffer.cpp b/doomsday/libgui/src/glbuffer.cpp index 245f868e72..45c46af3f1 100644 --- a/doomsday/libgui/src/glbuffer.cpp +++ b/doomsday/libgui/src/glbuffer.cpp @@ -23,18 +23,32 @@ namespace de { using namespace internal; using namespace gl; +// Vertex Formats ------------------------------------------------------------ + AttribSpec const Vertex2TexRgba::_spec[3] = { { AttribSpec::Position, 2, GL_FLOAT, false, sizeof(Vertex2TexRgba), 0 }, { AttribSpec::TexCoord0, 2, GL_FLOAT, false, sizeof(Vertex2TexRgba), 2 * sizeof(float) }, { AttribSpec::Color, 4, GL_FLOAT, false, sizeof(Vertex2TexRgba), 4 * sizeof(float) } }; -AttribSpecs Vertex2TexRgba::formatSpec() -{ +AttribSpecs Vertex2TexRgba::formatSpec() { DENG2_ASSERT(sizeof(Vertex2TexRgba) == 8 * sizeof(float)); // sanity check return AttribSpecs(_spec, sizeof(_spec)/sizeof(_spec[0])); } +AttribSpec const Vertex3TexRgba::_spec[3] = { + { AttribSpec::Position, 3, GL_FLOAT, false, sizeof(Vertex3TexRgba), 0 }, + { AttribSpec::TexCoord0, 2, GL_FLOAT, false, sizeof(Vertex3TexRgba), 3 * sizeof(float) }, + { AttribSpec::Color, 4, GL_FLOAT, false, sizeof(Vertex3TexRgba), 5 * sizeof(float) } +}; + +AttribSpecs Vertex3TexRgba::formatSpec() { + DENG2_ASSERT(sizeof(Vertex3TexRgba) == 9 * sizeof(float)); // sanity check + return AttribSpecs(_spec, sizeof(_spec)/sizeof(_spec[0])); +} + +// --------------------------------------------------------------------------- + DENG2_PIMPL(GLBuffer) { GLuint name;