Code Search for Developers
 
 
  

TextureCell.h from NeoEngineNG at Krugle


Show TextureCell.h syntax highlighted

// Demeter Terrain Visualization Library by Clay Fowler
// Copyright (C) 2002 Clay Fowler

// $ID$

/*
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Library General Public License for more details.

You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA  02111-1307, USA.
*/

#ifndef _TEXTURE_CELL_DEMETER_H_
#define _TEXTURE_CELL_DEMETER_H_

#include "Demeter/Globals.h"
#include "Demeter/DetailTexture.h"
#include "Demeter/Texture.h"
#include "Demeter/Terrain.h"
#include <vector>

/// \brief The Demeter Terrain Engine.
namespace Demeter
{
	/// \brief Represents a square region on a Terrain surface that is textured.

	/// A Terrain's surface is divided into a grid of square regions. Each of these regions, a TextureCell,
	/// contains a texture which is part of the overall terrain texture (usually an RGB texture), and any number
	/// of detail textures (possibly zero.) Each DetailTexture is blending according to its alpha mask with the
	/// overall texture underneath it (and with any other DetailTextures underneath it.) The number
	/// texture cells in a Terrain is set in one of two ways: (the size of the overall terrain texture / 256) ^ 2, OR by
	/// what you specify in a call to Terrain::AllocateTextureCells(). The latter option is only useful if you are
	/// managing the overall terrain texture for yourself rather than letting Demeter do it automatically.
	/// There is virtually no reason to create instances of this class for yourself unless you are overriding the way
	/// Terrain manages its cells. Generally, you will use the instances of this class that are provided for you by the
	/// managing Terrain object.
	class TERRAIN_API TextureCell
	{
	public:
		/// \brief Constructs an empty TextureCell.
		TextureCell();
		/// \brief Constructs a TextureCell that fits in the specified slot on the managing Terrain.
		/// \param index Specifies where in the Terrain's grid of TextureCells this cell should be placed.
		TextureCell(int index);
		 ~TextureCell();
		/// \brief Sets the overall Texture for this cell.
		void SetTexture(Texture * pTexture);
		void SetLightTexture(Texture * pTexture);
		/// \brief Adds a new detail texture layer to this cell.

		/// Any number of layers can be added. Layers will be rendered in the same order they were added.
		void AddDetail(DetailTexture * pDetailTexture);
		/// \brief Binds the overall texture to an OpenGL texture object.
		GLuint BindTexture();
		GLuint BindLightTexture();
		/// \brief Gets the number of DetailTexture layers that have been added.
		int GetNumberOfDetails();
		/// \brief Binds the mask of the specified DetailTexture layer.
		GLuint BindMask(int index);
		/// \brief Binds the detail texture of the specified DetailTexture layer.
		GLuint BindDetail(int index);
		/// \brief Unbinds the overall texture and all DetailTexture masks and detail textures.
		void UnbindAll();
		/// \brief Gets the specified DetailTexture layer.
		DetailTexture *GetDetail(int index);
		/// \brief Gets the specified DetailTexture layer.
		DetailTexture *GetDetail(Texture * pTexture);
		/// \brief Gets the overall texture.
		Texture* GetTexture();
		Texture* GetLightTexture();
		/// \brief Writes the entire cell (including all of its layers) to a binary file which can later be recreated by calling Read().
		void Write(FILE * file, Terrain * pTerrain);
		/// \brief Reads the entire cell (including all of its layers) from a binary file generated from a prior call to Write().
		void Read(FILE * file, Terrain * pTerrain);
		/// \brief Performs Texture::FlipHorizontal on the overall texture and all DetailTexture layers.
		void FlipHorizontal();
		/// \brief Performs Texture::FlipVertical on the overall texture and all DetailTexture layers.
		void FlipVertical();
		/// \brief Gets the standard filename that should be used to write this TextureCell to disk in a format matching that used by the Demeter Texture Editor.
		void GetDetailTextureImageFilename(int detailIndex, char *szFilename, int bufferSize);
		/// \brief Gets the standard filename that should be used to write this TextureCell to disk in a format matching that used by the Demeter Texture Editor.
		void GetDetailMaskFilename(int detailIndex, char *szFilename, int bufferSize);
		/// \brief Gets the width of the specified detail texture in pixels.
		int GetDetailTextureImageWidth(int detailIndex);
		/// \brief Gets the height of the specified detail texture in pixels.
		int GetDetailTextureImageHeight(int detailIndex);
		/// \brief Gets the color depth of the specified detail texture.
		int GetDetailTextureImageBitsPerPixel(int detailIndex);
		/// \brief Gets the width of the specified detail texture mask in pixels.
		int GetDetailMaskImageWidth(int detailIndex);
		/// \brief Gets the height of the specified detail texture mask in pixels.
		int GetDetailMaskImageHeight(int detailIndex);
		/// \brief Gets the color depth of the specified detail texture mask.
		int GetDetailMaskImageBitsPerPixel(int detailIndex);
		/// \brief Gets the standard filename that should be used to write this TextureCell to disk in a format matching that used by the Demeter Texture Editor.
		void GetBaseTextureImageFilename(char *szFilename, int bufferSize);
		/// \brief Gets the width of the overall texture in pixels.
		int GetBaseTextureImageWidth();
		/// \brief Gets the height of the overall texture in pixels.
		int GetBaseTextureImageHeight();
		/// \brief Gets the color depth of the overall texture.
		int GetBaseTextureImageBitsPerPixel();
		void AddBlock(TerrainBlock* pBlock);
		void SetupForRender(Terrain* pTerrain);
		void Render();
		void GetTriangleVertexIndices(GLuint** ppIndices,GLuint& numIndices);
		void GetFanVertexIndices(GLuint** ppIndices,GLuint& numIndices);
	private:
		std::vector<TerrainBlock*> m_Blocks;
		Texture* m_pTexture;
		Texture* m_pLightTexture;
		std::vector <DetailTexture*> m_DetailTextures;
		int m_Index;

		GLuint* m_pTriangleVertices;
		Uint32 m_NumTriangleVertices;
		Uint32 m_NumTriangleVerticesAllocated;

		GLuint* m_pFanVertices;
		Uint32 m_NumFanVertices;
		Uint32 m_NumFanVerticesAllocated;

		friend class TerrainBlock;
		friend class Terrain;
	};
}

#endif




See more files for this project here

NeoEngineNG

NeoenEngine NG (Next Generation) is the evolution of neoengine one,it\'s a different development from NeoEngine2, it\'s a direct inherits from NeoEngine one.\n

Project homepage: http://sourceforge.net/projects/neoengineng
Programming language(s): C,C++
License: other

  BitArray.h
  Box.h
  Brush.h
  Demeter.h
  DemeterConfig.h
  DemeterConfig.h.in
  DemeterDrawable.h
  DemeterException.h
  DetailTexture.h
  GDALElevationLoader.h
  Globals.h
  ImageLoader.h
  Loader.h
  OGLSL.h
  Plane.h
  Ray.h
  SDLTextureLoader.h
  Settings.h
  Shader.h
  SkyBox.h
  SkyBoxDrawable.h
  StdAfx.h
  Terrain.h
  TerrainBlock.h
  TerrainLattice.h
  TerrainLoadListener.h
  TerrainVertex.h
  Texture.h
  TextureCell.h
  TextureSet.h
  Triangle.h
  Vector.h
  config.h