|
From: Yoda-JM <yo...@us...> - 2011-02-25 01:24:37
|
Author: Vincent Le Ligeour <yo...@us...>
Date: Fri Feb 25 02:24:16 2011 +0100
Added VBO code (not used for the moment, not working)
---
game/glshader.cc | 31 +++++++++++++++++++++++++++++--
1 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/game/glshader.cc b/game/glshader.cc
index 78e18ad..e11dad7 100644
--- a/game/glshader.cc
+++ b/game/glshader.cc
@@ -140,14 +140,15 @@ GLint Shader::operator[](const std::string& uniform) {
void VertexArray::Draw(GLint mode) {
if (empty()) return;
+ unsigned stride = sizeof(VertexInfo);
+ glmath::Vec4 const* ptr = &m_vertices[0].position;
+#if 1
GLint program;
glGetIntegerv(GL_CURRENT_PROGRAM, &program);
GLint vertPos = glGetAttribLocation(program, "vertPos");
GLint vertTexCoord = glGetAttribLocation(program, "vertTexCoord");
GLint vertNormal = glGetAttribLocation(program, "vertNormal");
GLint vertColor = glGetAttribLocation(program, "vertColor");
- glmath::Vec4 const* ptr = &m_vertices[0].position;
- unsigned stride = sizeof(VertexInfo);
if (vertPos != -1) {
glEnableVertexAttribArray(vertPos);
glVertexAttribPointer(vertPos, 4, GL_FLOAT, GL_FALSE, stride, ptr);
@@ -170,5 +171,31 @@ void VertexArray::Draw(GLint mode) {
if (vertTexCoord != -1) glDisableVertexAttribArray(vertTexCoord);
if (vertNormal != -1) glDisableVertexAttribArray(vertNormal);
if (vertColor != -1) glDisableVertexAttribArray(vertColor);
+#else
+ // VBO
+ glmath::Vec4 const* ptr_ = NULL;
+ GLuint bufferName;
+ glGenBuffers(1, &bufferName);
+ glBindBuffer(GL_ARRAY_BUFFER, bufferName);
+ glBufferData(GL_ARRAY_BUFFER, size(), ptr, GL_STREAM_DRAW);
+
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ glEnableClientState(GL_NORMAL_ARRAY);
+ glEnableClientState(GL_COLOR_ARRAY);
+
+ glVertexPointer(4, GL_FLOAT, stride, ptr_);
+ glTexCoordPointer(4, GL_FLOAT, stride, ptr_ + 1);
+ glNormalPointer(GL_FLOAT, stride, ptr_ + 2);
+ glColorPointer(4, GL_FLOAT, stride, ptr_ + 3);
+ glDrawArrays(mode, 0, size());
+
+ glDisableClientState(GL_COLOR_ARRAY);
+ glDisableClientState(GL_NORMAL_ARRAY);
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ glDisableClientState(GL_VERTEX_ARRAY);
+
+ glBindBuffer(GL_ARRAY_BUFFER, bufferName);
+#endif
}
|