Kaynağa Gözat

tutorial: use an interleaved vertex/color buffer.

legacy
Sam Hocevar sam 12 yıl önce
ebeveyn
işleme
bfb0ad1e61
1 değiştirilmiş dosya ile 19 ekleme ve 34 silme
  1. +19
    -34
      test/tutorial/tut02.cpp

+ 19
- 34
test/tutorial/tut02.cpp Dosyayı Görüntüle

@@ -47,25 +47,16 @@ public:
{
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 */
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[1] = i16vec3(2, 3, 0);
@@ -145,19 +136,14 @@ public:
VertexUsage::Color, 0);

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_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
/* Method 1: store vertex buffer on the GPU memory */
glGenBuffers(1, &m_ibo);
@@ -180,12 +166,11 @@ public:
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->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();

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

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


Yükleniyor…
İptal
Kaydet