Browse Source

tutorial: use an interleaved vertex/color buffer.

legacy
Sam Hocevar sam 13 years ago
parent
commit
bfb0ad1e61
1 changed files with 19 additions and 34 deletions
  1. +19
    -34
      test/tutorial/tut02.cpp

+ 19
- 34
test/tutorial/tut02.cpp View File

@@ -47,25 +47,16 @@ public:
{ {
m_angle = 0; m_angle = 0;


/* Front */
m_vertices[0] = vec3(-1.0, -1.0, 1.0);
m_vertices[1] = vec3( 1.0, -1.0, 1.0);
m_vertices[2] = vec3( 1.0, 1.0, 1.0);
m_vertices[3] = vec3(-1.0, 1.0, 1.0);
/* Front vertices/colors */
m_mesh[0] = vec3(-1.0, -1.0, 1.0); m_mesh[1] = vec3(1.0, 0.0, 1.0);
m_mesh[2] = vec3( 1.0, -1.0, 1.0); m_mesh[3] = vec3(0.0, 1.0, 0.0);
m_mesh[4] = vec3( 1.0, 1.0, 1.0); m_mesh[5] = vec3(1.0, 0.5, 0.0);
m_mesh[6] = vec3(-1.0, 1.0, 1.0); m_mesh[7] = vec3(1.0, 1.0, 0.0);
/* Back */ /* Back */
m_vertices[4] = vec3(-1.0, -1.0, -1.0);
m_vertices[5] = vec3( 1.0, -1.0, -1.0);
m_vertices[6] = vec3( 1.0, 1.0, -1.0);
m_vertices[7] = vec3(-1.0, 1.0, -1.0);

m_colors[0] = vec3(1.0, 0.0, 0.0);
m_colors[1] = vec3(0.0, 1.0, 0.0);
m_colors[2] = vec3(0.0, 0.0, 1.0);
m_colors[3] = vec3(1.0, 1.0, 1.0);
m_colors[4] = vec3(1.0, 0.0, 0.0);
m_colors[5] = vec3(0.0, 1.0, 0.0);
m_colors[6] = vec3(0.0, 0.0, 1.0);
m_colors[7] = vec3(1.0, 1.0, 1.0);
m_mesh[8] = vec3(-1.0, -1.0, -1.0); m_mesh[9] = vec3(1.0, 0.0, 0.0);
m_mesh[10] = vec3( 1.0, -1.0, -1.0); m_mesh[11] = vec3(0.0, 0.5, 0.0);
m_mesh[12] = vec3( 1.0, 1.0, -1.0); m_mesh[13] = vec3(0.0, 0.5, 1.0);
m_mesh[14] = vec3(-1.0, 1.0, -1.0); m_mesh[15] = vec3(0.0, 0.0, 1.0);


m_indices[0] = i16vec3(0, 1, 2); m_indices[0] = i16vec3(0, 1, 2);
m_indices[1] = i16vec3(2, 3, 0); m_indices[1] = i16vec3(2, 3, 0);
@@ -145,19 +136,14 @@ public:
VertexUsage::Color, 0); VertexUsage::Color, 0);


m_vdecl = m_vdecl =
new VertexDeclaration(VertexStream<vec3>(VertexUsage::Position),
VertexStream<vec3>(VertexUsage::Color));
new VertexDeclaration(VertexStream<vec3,vec3>(VertexUsage::Position,
VertexUsage::Color));


m_vbo = new VertexBuffer(sizeof(m_vertices));
void *vertices = m_vbo->Lock(0, 0);
memcpy(vertices, m_vertices, sizeof(m_vertices));
m_vbo = new VertexBuffer(sizeof(m_mesh));
void *mesh = m_vbo->Lock(0, 0);
memcpy(mesh, m_mesh, sizeof(m_mesh));
m_vbo->Unlock(); m_vbo->Unlock();


m_cbo = new VertexBuffer(sizeof(m_colors));
void *colors = m_cbo->Lock(0, 0);
memcpy(colors, m_colors, sizeof(m_colors));
m_cbo->Unlock();

#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ && !defined _XBOX && !defined USE_D3D9 #if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ && !defined _XBOX && !defined USE_D3D9
/* Method 1: store vertex buffer on the GPU memory */ /* Method 1: store vertex buffer on the GPU memory */
glGenBuffers(1, &m_ibo); glGenBuffers(1, &m_ibo);
@@ -180,12 +166,11 @@ public:
m_ready = true; m_ready = true;
} }


Video::SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));
Video::SetClearColor(vec4(0.0f, 0.0f, 0.0f, 1.0f));


m_shader->Bind(); m_shader->Bind();
m_shader->SetUniform(m_mvp, m_matrix); m_shader->SetUniform(m_mvp, m_matrix);
m_vdecl->SetStream(m_vbo, m_coord);
m_vdecl->SetStream(m_cbo, m_color);
m_vdecl->SetStream(m_vbo, m_coord, m_color);
m_vdecl->Bind(); m_vdecl->Bind();


#if defined _XBOX || defined USE_D3D9 #if defined _XBOX || defined USE_D3D9
@@ -205,6 +190,7 @@ public:


glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0);
#else #else
/* FIXME */
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, m_vertices); glVertexPointer(3, GL_FLOAT, 0, m_vertices);
glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_VERTEX_ARRAY);
@@ -215,14 +201,13 @@ public:
private: private:
float m_angle; float m_angle;
mat4 m_matrix; mat4 m_matrix;
vec3 m_vertices[8];
vec3 m_colors[8];
vec3 m_mesh[16];
i16vec3 m_indices[12]; i16vec3 m_indices[12];
Shader *m_shader; Shader *m_shader;
ShaderAttrib m_coord, m_color; ShaderAttrib m_coord, m_color;
ShaderUniform m_mvp; ShaderUniform m_mvp;
VertexDeclaration *m_vdecl; VertexDeclaration *m_vdecl;
VertexBuffer *m_vbo, *m_cbo;
VertexBuffer *m_vbo;
#if defined USE_D3D9 #if defined USE_D3D9
IDirect3DIndexBuffer9 *m_ibo; IDirect3DIndexBuffer9 *m_ibo;
#elif defined _XBOX #elif defined _XBOX


Loading…
Cancel
Save