From e0663bab7e418345061d826fcbdf77044981dd3b Mon Sep 17 00:00:00 2001 From: rachytski Date: Fri, 30 Nov 2012 11:23:19 +0300 Subject: [PATCH] setting Vertex structure through VertexDecl mechanism. --- graphics/opengl/vertex.cpp | 20 +++++++++++--------- graphics/opengl/vertex.hpp | 3 +++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/graphics/opengl/vertex.cpp b/graphics/opengl/vertex.cpp index f260265f4d..1ae39866d8 100644 --- a/graphics/opengl/vertex.cpp +++ b/graphics/opengl/vertex.cpp @@ -1,7 +1,8 @@ #include "vertex.hpp" - #include "opengl.hpp" +#include "../base/macros.hpp" + namespace graphics { namespace gl @@ -38,16 +39,17 @@ namespace graphics return *this; } - void Vertex::setupLayout(void * glPtr) + VertexDecl const * Vertex::getVertexDecl() { - OGLCHECK(glEnableClientStateFn(GL_VERTEX_ARRAY_MWM)); - OGLCHECK(glVertexPointerFn(3, GL_FLOAT, sizeof(Vertex), (void*)((char*)glPtr + Vertex::vertexOffset))); + static VertexAttrib attrs [] = + { + VertexAttrib("Position", vertexOffset, EFloat, 3, sizeof(Vertex)), + VertexAttrib("Normal", normalOffset, EFloat, 2, sizeof(Vertex)), + VertexAttrib("TexCoordIn", texCoordOffset, EFloat, 2, sizeof(Vertex)) + }; - OGLCHECK(glEnableClientStateFn(GL_NORMAL_ARRAY_MWM)); - OGLCHECK(glNormalPointerFn(2, GL_FLOAT, sizeof(Vertex), (void*)((char*)glPtr + Vertex::normalOffset))); - - OGLCHECK(glEnableClientStateFn(GL_TEXTURE_COORD_ARRAY_MWM)); - OGLCHECK(glTexCoordPointerFn(2, GL_FLOAT, sizeof(Vertex), (void*)((char*)glPtr + Vertex::texCoordOffset))); + static VertexDecl vd(attrs, ARRAY_SIZE(attrs)); + return &vd; } } } diff --git a/graphics/opengl/vertex.hpp b/graphics/opengl/vertex.hpp index ec14b8d303..2d9581f773 100644 --- a/graphics/opengl/vertex.hpp +++ b/graphics/opengl/vertex.hpp @@ -1,6 +1,7 @@ #pragma once #include "../color.hpp" +#include "../vertex_decl.hpp" #include "../../geometry/point2d.hpp" @@ -28,6 +29,8 @@ namespace graphics Vertex(Vertex const & v); Vertex const & operator=(Vertex const & v); + static VertexDecl const * getVertexDecl(); + static void setupLayout(void * glPtr); }; }