Como eu expliquei no tutorial passado a classe Cache será responsável por carregar e armazenar na memória todas as imagens que serão usadas (e provavelmente outros arquivos no futuro).
Dentro da pasta Global, crie uma nova classe chamada Cache.
Antes de começar eu preciso explicar algumas coisas, pesquisei algumas alternativas para o List, pois a mesma é muito lenta e seria prejudicial para o projeto utiliza-la, então a opção mais eficaz que encontrei foi o HashSet, porém o mesmo não tem muitos métodos internos pra ajudar o desenvolvedor (isso não é um grande problema).
A classe terá apenas métodos e variáveis estáticos, primeiro vamos criar um HashSet para armazenar as imagens:
Agora precisamos criar um método de "busca" para encontrar a imagem desejada a partir de seu nome. Esse método se chamará GetImage, terá apenas um argumento que será string name. Seu retorno é de um Structures.GameImage (a struct que criamos no tutorial passado).
Esse método usará consulta LINQ para obter a imagem de retorno, mais informações sobre esse tipo de consulta pode ser encontrado aqui.
O método final ficou dessa forma:
Agora precisamos criar um método para carregar na memória a imagem, para isso usaremos o seguinte código:
Não irei falar muito sobre esse método aqui no tópico pois comentei todas as linhas praticamente, então basta ler para saber do que se trata.
Agora que já temos o Cache e Graphics prontos, no próximo tutorial irei dar início a criação de um joguinho simples.
Dentro da pasta Global, crie uma nova classe chamada Cache.
Antes de começar eu preciso explicar algumas coisas, pesquisei algumas alternativas para o List, pois a mesma é muito lenta e seria prejudicial para o projeto utiliza-la, então a opção mais eficaz que encontrei foi o HashSet, porém o mesmo não tem muitos métodos internos pra ajudar o desenvolvedor (isso não é um grande problema).
A classe terá apenas métodos e variáveis estáticos, primeiro vamos criar um HashSet para armazenar as imagens:
- Código:
private static HashSet<Structures.GameImage> images = new HashSet<Structures.GameImage>();
Agora precisamos criar um método de "busca" para encontrar a imagem desejada a partir de seu nome. Esse método se chamará GetImage, terá apenas um argumento que será string name. Seu retorno é de um Structures.GameImage (a struct que criamos no tutorial passado).
Esse método usará consulta LINQ para obter a imagem de retorno, mais informações sobre esse tipo de consulta pode ser encontrado aqui.
O método final ficou dessa forma:
- Código:
public static Structures.GameImage GetImage(string name)
{
var img = from image in images
where image.Name == name
select image;
return img.First();
}
Agora precisamos criar um método para carregar na memória a imagem, para isso usaremos o seguinte código:
- Código:
public static int LoadTexture(string name, string path)
{
// Verifica se o arquivo existe
if (String.IsNullOrEmpty(path))
throw new ArgumentException(path);
// Gera o id e vincula a textura
int id = GL.GenTexture();
GL.BindTexture(TextureTarget.Texture2D, id);
// Define os parâmetros de renderização da textura
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
// Carrega a imagem na memória
Bitmap bmp = new Bitmap(path);
// Armazena os atributos de um bitmap, o lockbit bloqueia o bitmap na memória
BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
// Especifica os parâmetros da textura
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, bmp_data.Width, bmp_data.Height, 0,
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bmp_data.Scan0);
bmp.UnlockBits(bmp_data);
// Cria um objeto para ser armazenado no cache
Structures.GameImage image = new Structures.GameImage();
image.Id = id;
image.Name = name;
image.Path = path;
images.Add(image);
return id;
}
Não irei falar muito sobre esse método aqui no tópico pois comentei todas as linhas praticamente, então basta ler para saber do que se trata.
Agora que já temos o Cache e Graphics prontos, no próximo tutorial irei dar início a criação de um joguinho simples.




Portal







