Make common draw system, moved some components to basic components and fixed bug with GUI for signed short integers
This commit is contained in:
parent
3a7a5b2a21
commit
d733bb514c
5 changed files with 326 additions and 86 deletions
178
demos/source/game_core/rendering.d
Normal file
178
demos/source/game_core/rendering.d
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
module game_core.rendering;
|
||||
|
||||
import bubel.ecs.core;
|
||||
import bubel.ecs.attributes;
|
||||
|
||||
import ecs_utils.math.vector;
|
||||
import ecs_utils.gfx.texture;
|
||||
|
||||
import game_core.basic;
|
||||
|
||||
struct CTexCoords
|
||||
{
|
||||
mixin ECS.Component;
|
||||
|
||||
alias value this;///use component as it value
|
||||
|
||||
vec4 value;
|
||||
}
|
||||
|
||||
struct CTexCoordsIndex
|
||||
{
|
||||
mixin ECS.Component;
|
||||
|
||||
ushort value;
|
||||
}
|
||||
|
||||
struct TexCoordsManager
|
||||
{
|
||||
import bubel.ecs.vector;
|
||||
import bubel.ecs.hash_map;
|
||||
|
||||
Vector!vec4 coords;
|
||||
HashMap!(vec4,ushort) coords_map;
|
||||
}
|
||||
|
||||
struct DrawSystem
|
||||
{
|
||||
mixin ECS.System!32;
|
||||
|
||||
import ecs_utils.gfx.renderer : Renderer;
|
||||
|
||||
struct EntitiesData
|
||||
{
|
||||
uint length;
|
||||
//uint thread_id;
|
||||
uint job_id;
|
||||
@readonly CLocation[] locations;
|
||||
@readonly CScale[] scale;
|
||||
@readonly CTexCoords[] texcoord;
|
||||
// @readonly @optional CTexCoords[] texcoord;
|
||||
// @readonly @optional CTexCoordsIndex[] texcoord_index;
|
||||
@readonly @optional CRotation[] rotation;
|
||||
@readonly @optional CDepth[] depth;
|
||||
@readonly @optional CColor[] color;
|
||||
}
|
||||
|
||||
Renderer.DrawData default_data;
|
||||
|
||||
void onUpdate(EntitiesData data)
|
||||
{
|
||||
import app : launcher;
|
||||
|
||||
if(launcher.renderer.prepared_items >= launcher.renderer.MaxObjects)return;//simple leave loop if max visible objects count was reached
|
||||
Renderer.DrawData draw_data = default_data;
|
||||
draw_data.thread_id = data.job_id;
|
||||
|
||||
if(!data.depth)
|
||||
{
|
||||
if(!data.color)
|
||||
{
|
||||
if(!data.rotation)
|
||||
{
|
||||
foreach(i; 0..data.length)
|
||||
{
|
||||
draw_data.coords = data.texcoord[i];
|
||||
draw_data.size = data.scale[i];
|
||||
draw_data.position = data.locations[i];
|
||||
launcher.renderer.draw(draw_data);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach(i; 0..data.length)
|
||||
{
|
||||
draw_data.angle = data.rotation[i];
|
||||
draw_data.coords = data.texcoord[i];
|
||||
draw_data.size = data.scale[i];
|
||||
draw_data.position = data.locations[i];
|
||||
launcher.renderer.draw(draw_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!data.rotation)
|
||||
{
|
||||
foreach(i; 0..data.length)
|
||||
{
|
||||
draw_data.color = data.color[i];
|
||||
draw_data.coords = data.texcoord[i];
|
||||
draw_data.size = data.scale[i];
|
||||
draw_data.position = data.locations[i];
|
||||
launcher.renderer.draw(draw_data);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach(i; 0..data.length)
|
||||
{
|
||||
draw_data.color = data.color[i];
|
||||
draw_data.angle = data.rotation[i];
|
||||
draw_data.coords = data.texcoord[i];
|
||||
draw_data.size = data.scale[i];
|
||||
draw_data.position = data.locations[i];
|
||||
launcher.renderer.draw(draw_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!data.color)
|
||||
{
|
||||
if(!data.rotation)
|
||||
{
|
||||
foreach(i; 0..data.length)
|
||||
{
|
||||
draw_data.depth = data.depth[i];
|
||||
draw_data.coords = data.texcoord[i];
|
||||
draw_data.size = data.scale[i];
|
||||
draw_data.position = data.locations[i];
|
||||
launcher.renderer.draw(draw_data);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach(i; 0..data.length)
|
||||
{
|
||||
draw_data.depth = data.depth[i];
|
||||
draw_data.angle = data.rotation[i];
|
||||
draw_data.coords = data.texcoord[i];
|
||||
draw_data.size = data.scale[i];
|
||||
draw_data.position = data.locations[i];
|
||||
launcher.renderer.draw(draw_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!data.rotation)
|
||||
{
|
||||
foreach(i; 0..data.length)
|
||||
{
|
||||
draw_data.depth = data.depth[i];
|
||||
draw_data.color = data.color[i];
|
||||
draw_data.coords = data.texcoord[i];
|
||||
draw_data.size = data.scale[i];
|
||||
draw_data.position = data.locations[i];
|
||||
launcher.renderer.draw(draw_data);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach(i; 0..data.length)
|
||||
{
|
||||
draw_data.depth = data.depth[i];
|
||||
draw_data.color = data.color[i];
|
||||
draw_data.angle = data.rotation[i];
|
||||
draw_data.coords = data.texcoord[i];
|
||||
draw_data.size = data.scale[i];
|
||||
draw_data.position = data.locations[i];
|
||||
launcher.renderer.draw(draw_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue