浏览代码

Update terrain sample

Daniele Bartolini 12 年之前
父节点
当前提交
1c1ff4337c
共有 3 个文件被更改,包括 25 次插入7 次删除
  1. 13 6
      samples/terrain/Terrain.cpp
  2. 6 0
      samples/terrain/Terrain.h
  3. 6 1
      samples/terrain/terrain.cpp

+ 13 - 6
samples/terrain/Terrain.cpp

@@ -148,6 +148,11 @@ void Terrain::CreateTerrain(uint32_t xSize, uint32_t zSize, uint32_t tilePerMete
 			iIndex += 6;
 			iIndex += 6;
 		}
 		}
 	}
 	}
+
+	m_vertex_buffer = device()->renderer()->create_dynamic_vertex_buffer(mVertices, mVertexCount, VF_XYZ_FLOAT_32);
+	m_normal_buffer = device()->renderer()->create_dynamic_vertex_buffer(mNormals, mNormalCount, VF_XYZ_NORMAL_FLOAT_32);
+	m_tex_coord_buffer = device()->renderer()->create_vertex_buffer(mTexCoords, mTexCoordCount, VF_UV_FLOAT_32);
+	m_index_buffer = device()->renderer()->create_index_buffer(mIndices, mIndexCount);
 }
 }
 
 
 void Terrain::UpdateVertexBuffer(bool recomputeNormals)
 void Terrain::UpdateVertexBuffer(bool recomputeNormals)
@@ -160,6 +165,8 @@ void Terrain::UpdateVertexBuffer(bool recomputeNormals)
 			mVertices[vIndex].y = mHeights[vIndex];
 			mVertices[vIndex].y = mHeights[vIndex];
 			vIndex++;
 			vIndex++;
 		}
 		}
+
+		device()->renderer()->update_vertex_buffer(m_vertex_buffer, mVertices, mVertexCount, 0);
 	}
 	}
 
 
 	if (recomputeNormals)
 	if (recomputeNormals)
@@ -179,6 +186,8 @@ void Terrain::UpdateVertexBuffer(bool recomputeNormals)
 			mNormals[mIndices[i + 1]] = normal;
 			mNormals[mIndices[i + 1]] = normal;
 			mNormals[mIndices[i + 2]] = normal;
 			mNormals[mIndices[i + 2]] = normal;
 		}
 		}
+
+		device()->renderer()->update_vertex_buffer(m_normal_buffer, mNormals, mNormalCount, 0);
 	}
 	}
 }
 }
 
 
@@ -278,12 +287,10 @@ void Terrain::Render()
 {
 {
 	Renderer* renderer = device()->renderer();
 	Renderer* renderer = device()->renderer();
 
 
-	renderer->draw_triangles(
-				mVertices[0].to_float_ptr(),
-				mNormals[0].to_float_ptr(),
-				mTexCoords[0].to_float_ptr(),
-				mIndices,
-				mTilesInSizeX * mTilesInSizeZ * 6);
+	renderer->bind_vertex_buffer(m_vertex_buffer);
+	renderer->bind_vertex_buffer(m_normal_buffer);
+	renderer->bind_vertex_buffer(m_tex_coord_buffer);
+	renderer->draw_triangles(m_index_buffer);
 }
 }
 
 
 float Terrain::GaussDist(float x, float y, float sigma)
 float Terrain::GaussDist(float x, float y, float sigma)

+ 6 - 0
samples/terrain/Terrain.h

@@ -29,6 +29,7 @@ OTHER DEALINGS IN THE SOFTWARE.
 #include "Triangle.h"
 #include "Triangle.h"
 #include "Intersection.h"
 #include "Intersection.h"
 #include "Ray.h"
 #include "Ray.h"
+#include "Renderer.h"
 
 
 #define MAX_BRUSH_SIZE 256
 #define MAX_BRUSH_SIZE 256
 
 
@@ -97,6 +98,11 @@ private:
 	uint32_t		mIndexCount;
 	uint32_t		mIndexCount;
 	uint16_t*		mIndices;
 	uint16_t*		mIndices;
 
 
+	VertexBufferId	m_vertex_buffer;
+	VertexBufferId	m_normal_buffer;
+	VertexBufferId	m_tex_coord_buffer;
+	IndexBufferId	m_index_buffer;
+
 	uint32_t		mBrushWidth;
 	uint32_t		mBrushWidth;
 	uint32_t		mBrushHeight;
 	uint32_t		mBrushHeight;
 	float			mBrush[MAX_BRUSH_SIZE * MAX_BRUSH_SIZE];
 	float			mBrush[MAX_BRUSH_SIZE * MAX_BRUSH_SIZE];

+ 6 - 1
samples/terrain/terrain.cpp

@@ -129,6 +129,8 @@ public:
 
 
 		TextureResource* grass_texture = (TextureResource*)device()->data(grass);
 		TextureResource* grass_texture = (TextureResource*)device()->data(grass);
 		grass_id = device()->renderer()->load_texture(grass_texture);
 		grass_id = device()->renderer()->load_texture(grass_texture);
+
+		//rb_id = device()->renderer()->create_render_buffer(200, 200, PF_RGBA_8);
 	}
 	}
 
 
 	void on_unload()
 	void on_unload()
@@ -140,6 +142,8 @@ public:
 		device()->unload(red_west);
 		device()->unload(red_west);
 		device()->unload(red_up);
 		device()->unload(red_up);
 		device()->unload(red_down);
 		device()->unload(red_down);
+
+		//device()->renderer()->destroy_render_buffer(rb_id);
 	}
 	}
 
 
 	void update(float dt)
 	void update(float dt)
@@ -183,7 +187,7 @@ public:
 		if (device()->is_loaded(grass))
 		if (device()->is_loaded(grass))
 		{
 		{
 			renderer->set_texturing(0, true);
 			renderer->set_texturing(0, true);
-			renderer->set_texture(0, grass_id);
+			renderer->bind_texture(0, grass_id);
 		}
 		}
 		
 		
 		//glColor3f(1, 1, 1);
 		//glColor3f(1, 1, 1);
@@ -228,6 +232,7 @@ private:
 	ResourceId red_up;
 	ResourceId red_up;
 	ResourceId red_down;
 	ResourceId red_down;
 	TextureId grass_id;
 	TextureId grass_id;
+	RenderBufferId rb_id;
 
 
 	bool optShowSkybox;
 	bool optShowSkybox;
 	bool optShowCrate;
 	bool optShowCrate;