#pragma once
#include <stdint.h>
namespace M3D
{
/**
 * Список ограничений на которые будет ориентироваться движок. Невозможно создать объектов больше указанного кол-ва.
 * @param texture_size максимальный размер текстуры по большей стороне в пикселях
 * @param vertices_count максимальное кол-во вершин в одном меше
 * @author Denis A. Biryukov
 */
struct EngineLimits
{
	EngineLimits() : model_count( 0 ), texture_count( 0 ), mesh_count( 0 ), camera_count( 0 ), shader_count( 0 ), vertices_count( 0 ), texture_size( 0 ), indeces_count( 0 ), material_count( 0 ), light_count( 0 ) {};
	int model_count;
	int texture_count;
	int mesh_count;
	int camera_count;
	int shader_count;
	int vertices_count;
	int texture_size;
	int indeces_count;
        int material_count;
	int light_count;
};
/**
 * Информация об использовании памяти движком
 * @param ram_vram_allocated суммарное кол-во памяти запрошенное движком/
 * @param ram_used кол-во озу использованное. Учитывается только память которая 100% находится в озу
 * @param ram_vram_used кол-во использованной памяти, которая может быть как в озу так и в vram
 * @author Denis A. Biryukov
 */
class EngineMemInfo
{
	public:
		void alloc( uint32_t size ) {ram_vram_allocated += size;}
		void use_ram( uint32_t size ) {ram_used += size;}
		void free_ram( uint32_t size ) {ram_used -= size;}
		void use_ram_vram( uint32_t size ) {ram_vram_used += size;}
		void free_ram_vram( uint32_t size ) {ram_vram_used -= size;}
		
		EngineMemInfo() : ram_vram_allocated( 0 ), ram_used( 0 ), ram_vram_used( 0 ) {};
		uint32_t ram_vram_allocated;
		uint32_t ram_used;
		uint32_t ram_vram_used;

};
enum DRAW_MODE
{
	DRAW_TEXTURE = 0,
	DRAW_WIREFRAME
};
}

