-added multiple new function to allocate template and add entity -updated README.md (complete initial version) -empty components now don't take memory -fixedd small bug with TestRunner -added many new tests (HashMap, Vector, EntityMeta, ...) -added default hashing function to HashMap -fixed critical bug with adding entities -fixed small bug with adding entity with remplacement components -added asserts into code to better bug detection -small performance improvement for events -added ComponentRef structure which contain data pointer and componentID -remove EntityID from Event structure -now events are handled before removing entiteis -fixed GDC compilation -fixed rendering of rotated sprites -added weapons as separate entities to space ship and others -added Tower enemy to SpaceInvaders demo -added Boss to SpaceInvaders demo (boss has four tower attached to it) -Boss towers shoot multiple bullets upon death -fixed critical bug with demos switching -fixed critical bug related to adding/removing entities form inside onAdd/onRemove entity callback -added animation support -added particles sypport and particles for firing and explostions, and more -multithreaded rendering now has same rendering order as singlethreaded -application automaticallu detect host CPU threads count -added upgrades to SPaceInvaders demo -fixed texture memory freeing -improved documentation -improved multithreaded performance -improve shader code -fixed registration issue -some additional performance improvements -added depth and colors to rendering parameters -jobs now has names corresponding to their systems -change execute() -> willExecute() -added EntityMeta structure to speedup getting fetching components form entity -improved multithreading rendering -added possibility tio change number of threads runtime -added bullets collision detection in SpaceInvaders demo -some CI changes -added VBO batch rendering (current default, no render mode switch yet) -fixed camera positioning calculation -fixed buffer issue with WebGL -added viewport scalling (at least 300 pixels height). Pixels are scalled if screen is bigger. -center demos gameplay area -added fullpage html template for Emscripten build -added many new sprites to atlas -fixed critical bug with CPU usage in multithreaded mode -snake render tile coresponding to body part -snake is destroyed after collision and emit some particles -added some functionality to vectors -fixed documentation issue in Manager.d -more minor code changes and cleanup
102 lines
No EOL
2.6 KiB
D
102 lines
No EOL
2.6 KiB
D
module ecs_utils.gfx.config;
|
|
|
|
import bindbc.sdl;
|
|
|
|
import bubel.ecs.std;
|
|
|
|
import ecs_utils.gfx.material;
|
|
import ecs_utils.gfx.mesh;
|
|
import ecs_utils.gfx.texture;
|
|
|
|
//import mutils.serializer.json;
|
|
|
|
extern(C):
|
|
|
|
enum LayerType
|
|
{
|
|
normal,
|
|
sorted
|
|
}
|
|
|
|
import bubel.ecs.vector;
|
|
|
|
static struct GfxConfig
|
|
{
|
|
extern(C):
|
|
__gshared:
|
|
Vector!LayerType layers;
|
|
//Vector!Mesh meshes;
|
|
//Vector!Material materials;
|
|
Mesh[] meshes;
|
|
Material[] materials;
|
|
|
|
static bool load(const (char)[] path) nothrow
|
|
{
|
|
struct LoadData
|
|
{
|
|
struct Str
|
|
{
|
|
@("malloc") string str;
|
|
}
|
|
|
|
@("malloc") Str[] materials;
|
|
@("malloc") Str[] meshes;
|
|
int inter;
|
|
|
|
void dispose() nothrow
|
|
{
|
|
/*if(blend_mode)Mallocator.instance.dispose(cast(char[])blend_mode);
|
|
if(vertex)Mallocator.instance.dispose(cast(char[])vertex);
|
|
if(fragment)Mallocator.instance.dispose(cast(char[])fragment);*/
|
|
}
|
|
}
|
|
|
|
char[] cpath = (cast(char*)alloca(path.length+1))[0..path.length+1];
|
|
cpath[0..$-1] = path[0..$];
|
|
cpath[$-1] = 0;
|
|
|
|
SDL_RWops* file = SDL_RWFromFile(cpath.ptr,"r");
|
|
if(file)
|
|
{
|
|
size_t size = cast(size_t)SDL_RWsize(file);
|
|
char[] buffer = Mallocator.makeArray!char(size);
|
|
SDL_RWread(file,buffer.ptr,size,1);
|
|
|
|
LoadData load_data;
|
|
scope(exit)load_data.dispose();
|
|
|
|
/*JSONSerializer serializer = Mallocator.make!JSONSerializer;
|
|
scope(exit)Mallocator.dispose(serializer);
|
|
serializer.serialize!(Load.yes, true)(load_data,buffer);*/
|
|
|
|
//if(__ecs_used_backend == Backend.opengl)
|
|
{
|
|
meshes = Mallocator.makeArray!Mesh(load_data.meshes.length);
|
|
foreach(i,ref mesh; meshes)
|
|
{
|
|
mesh.load(load_data.meshes[i].str);
|
|
mesh.uploadData();
|
|
}
|
|
}
|
|
|
|
materials = Mallocator.makeArray!Material(load_data.materials.length);
|
|
foreach(i,ref material; materials)
|
|
{
|
|
material.create();
|
|
material.load(load_data.materials[i].str);
|
|
material.compile();
|
|
}
|
|
|
|
SDL_RWclose(file);
|
|
load_data.dispose();
|
|
return true;
|
|
}
|
|
else return false;
|
|
}
|
|
|
|
static int addLayer(LayerType type)
|
|
{
|
|
layers.add(type);
|
|
return cast(int)(layers.length-1);
|
|
}
|
|
} |