Slightly changed rendering code

-renderer draw function now takes struct instead of multiple parameters
This commit is contained in:
Mergul 2020-06-12 14:53:59 +02:00
parent 8cba2626be
commit 3a7a5b2a21
5 changed files with 199 additions and 72 deletions

View file

@ -134,19 +134,30 @@ struct DrawSystem
void onUpdate(EntitiesData data)
{
if(launcher.renderer.prepared_items >= launcher.renderer.MaxObjects)return;//simple leave loop if max visible objects count was reached
import ecs_utils.gfx.renderer;
Renderer.DrawData draw_data;
draw_data.size = vec2(2,2);
draw_data.coords = vec4(246,64,2,2)*px;
draw_data.color = 0x80808080;
draw_data.material_id = 2;
draw_data.thread_id = data.job_id;
draw_data.texture = particles_demo.texture;
if(!data.color)
{
foreach(i; 0..data.length)
{
launcher.renderer.draw(particles_demo.texture, data.locations[i], vec2(2,2), vec4(246,64,2,2)*px, 0, 0x80808080, 0, 2, 0, data.job_id);
draw_data.position = data.locations[i];
launcher.renderer.draw(draw_data);//particles_demo.texture, data.locations[i], vec2(2,2), vec4(246,64,2,2)*px, 0, 0x80808080, 0, 2, 0, data.job_id);
}
}
else
{
foreach(i; 0..data.length)
{
launcher.renderer.draw(particles_demo.texture, data.locations[i], vec2(2,2), vec4(246,64,2,2)*px, 0, data.color[i].value, 0, 2, 0, data.job_id);
draw_data.position = data.locations[i];
draw_data.color = data.color[i].value;
launcher.renderer.draw(draw_data);//particles_demo.texture, data.locations[i], vec2(2,2), vec4(246,64,2,2)*px, 0, data.color[i].value, 0, 2, 0, data.job_id);
}
}

View file

@ -52,9 +52,21 @@ struct DrawSystem
void onUpdate(EntitiesData data)
{
if(launcher.renderer.prepared_items >= launcher.renderer.MaxObjects)return;//simple leave loop if max visible objects count was reached
import ecs_utils.gfx.renderer;
Renderer.DrawData draw_data;
draw_data.size = vec2(16,16);
draw_data.coords = vec4(0,0,1,1);
draw_data.color = 0x80808080;
draw_data.material_id = 0;
draw_data.thread_id = data.job_id;
draw_data.texture = simple.texture;
foreach(i; 0..data.length)
{
launcher.renderer.draw(simple.texture, data.locations[i], vec2(16,16), vec4(0,0,1,1), cast(ushort)(data.locations[i].y), 0x80808080, 0, 0, 0, data.job_id);
draw_data.position = data.locations[i];
draw_data.depth = cast(ushort)(data.locations[i].y);
launcher.renderer.draw(draw_data);
//launcher.renderer.draw(simple.texture, data.locations[i], vec2(16,16), vec4(0,0,1,1), cast(ushort)(data.locations[i].y), 0x80808080, 0, 0, 0, data.job_id);
// launcher.renderer.draw(data.textures[i].tex, data.locations[i].location, vec2(16,16), vec4(0,0,1,1), 0, 0x80808080, 0, 0, 0, data.job_id);
//draw(renderer, data.textures[i].tex, data.locations[i], vec2(32,32), vec4(0,0,1,1));
}

View file

@ -348,9 +348,21 @@ struct AnimationRenderSystem
void onUpdate(EntitiesData data)
{
import ecs_utils.gfx.renderer;
Renderer.DrawData draw_data;
draw_data.size = vec2(16,16);
//draw_data.coords = vec4(0,0,1,1)*px;
draw_data.color = 0x80808080;
draw_data.material_id = 0;
draw_data.thread_id = 0;
draw_data.texture = snake.texture;
draw_data.depth = -1;
foreach(i;0..data.length)
{
launcher.renderer.draw(snake.texture, cast(vec2)cast(ivec2)data.location[i], vec2(16,16), data.animation[i].frames[cast(int)(data.animation[i].time)], -1, 0x80808080);
draw_data.position = data.location[i];
draw_data.coords = data.animation[i].frames[cast(int)(data.animation[i].time)];
launcher.renderer.draw(draw_data);
//launcher.renderer.draw(snake.texture, cast(vec2)cast(ivec2)data.location[i], vec2(16,16), data.animation[i].frames[cast(int)(data.animation[i].time)], -1, 0x80808080);
}
}
}
@ -649,9 +661,19 @@ struct DrawAppleSystem
void onUpdate(EntitiesData data)
{
import ecs_utils.gfx.renderer;
Renderer.DrawData draw_data;
draw_data.size = vec2(16,16);
draw_data.coords = vec4(0,32*px,16*px,16*px);
draw_data.color = 0x80808080;
draw_data.material_id = 0;
draw_data.thread_id = 0;
draw_data.texture = snake.texture;
foreach(i; 0..data.location.length)
{
launcher.renderer.draw(snake.texture, vec2(data.location[i].x*16,data.location[i].y*16), vec2(16,16), vec4(0,32*px,16*px,16*px), 0, 0x80808080, 0);
draw_data.position = vec2(data.location[i].x*16,data.location[i].y*16);
launcher.renderer.draw(draw_data);
//launcher.renderer.draw(snake.texture, vec2(data.location[i].x*16,data.location[i].y*16), vec2(16,16), vec4(0,32*px,16*px,16*px), 0, 0x80808080, 0);
}
}
}
@ -719,34 +741,49 @@ struct DrawSnakeSystem
static void drawElement(ivec2 loc, SnakePart part)
{
import ecs_utils.gfx.renderer;
Renderer.DrawData draw_data;
draw_data.size = vec2(16,16);
draw_data.color = 0x80808080;
draw_data.texture = snake.texture;
draw_data.position = cast(vec2)loc;
final switch(cast(ubyte)part)
{
case SnakePart.tail_up:launcher.renderer.draw(.snake.texture, cast(vec2)loc, vec2(16,16), vec4(16,112,16,16)*px, 0, 0x80808080, 0);break;
case SnakePart.tail_down:launcher.renderer.draw(.snake.texture, cast(vec2)loc, vec2(16,16), vec4(0,112,16,16)*px, 0, 0x80808080, 0);break;
case SnakePart.tail_left:launcher.renderer.draw(.snake.texture, cast(vec2)loc, vec2(16,16), vec4(32,112,16,16)*px, 0, 0x80808080, 0);break;
case SnakePart.tail_right:launcher.renderer.draw(.snake.texture, cast(vec2)loc, vec2(16,16), vec4(0,144,16,16)*px, 0, 0x80808080, 0);break;
case SnakePart.turn_ld:launcher.renderer.draw(.snake.texture, cast(vec2)loc, vec2(16,16), vec4(64,128,16,16)*px, 0, 0x80808080, 0);break;
case SnakePart.turn_lu:launcher.renderer.draw(.snake.texture, cast(vec2)loc, vec2(16,16), vec4(32,144,16,16)*px, 0, 0x80808080, 0);break;
case SnakePart.turn_rd:launcher.renderer.draw(.snake.texture, cast(vec2)loc, vec2(16,16), vec4(16,144,16,16)*px, 0, 0x80808080, 0);break;
case SnakePart.turn_ru:launcher.renderer.draw(.snake.texture, cast(vec2)loc, vec2(16,16), vec4(64,112,16,16)*px, 0, 0x80808080, 0);break;
case SnakePart.vertical:launcher.renderer.draw(.snake.texture, cast(vec2)loc, vec2(16,16), vec4(16,128,16,16)*px, 0, 0x80808080, 0);break;
case SnakePart.horizontal:launcher.renderer.draw(.snake.texture, cast(vec2)loc, vec2(16,16), vec4(48,128,16,16)*px, 0, 0x80808080, 0);break;
case SnakePart.tail_up:draw_data.coords = vec4(16,112,16,16)*px;break;
case SnakePart.tail_down:draw_data.coords = vec4(0,112,16,16)*px;break;
case SnakePart.tail_left:draw_data.coords = vec4(32,112,16,16)*px;break;
case SnakePart.tail_right:draw_data.coords = vec4(0,144,16,16)*px;break;
case SnakePart.turn_ld:draw_data.coords = vec4(64,128,16,16)*px;break;
case SnakePart.turn_lu:draw_data.coords = vec4(32,144,16,16)*px;break;
case SnakePart.turn_rd:draw_data.coords = vec4(16,144,16,16)*px;break;
case SnakePart.turn_ru:draw_data.coords = vec4(64,112,16,16)*px;break;
case SnakePart.vertical:draw_data.coords = vec4(16,128,16,16)*px;break;
case SnakePart.horizontal:draw_data.coords = vec4(48,128,16,16)*px;break;
}
launcher.renderer.draw(draw_data);
}
void onUpdate(EntitiesData data)
{
import ecs_utils.gfx.renderer;
Renderer.DrawData draw_data;
draw_data.size = vec2(16,16);
draw_data.color = 0x80808080;
draw_data.texture = snake.texture;
foreach(i; 0..data.length)
{
const (CSnake)* snake = &data.snake[i];
scope vec2 loc = cast(vec2)(data.location[i].location * 16);
draw_data.position = loc;
final switch(snake.direction)
{
case CMovement.Direction.up:launcher.renderer.draw(.snake.texture, vec2(data.location[i].x*16,data.location[i].y*16), vec2(16,16), vec4(48,112,16,16)*px, 0, 0x80808080, 0);break;
case CMovement.Direction.down:launcher.renderer.draw(.snake.texture, vec2(data.location[i].x*16,data.location[i].y*16), vec2(16,16), vec4(48,144,16,16)*px, 0, 0x80808080, 0);break;
case CMovement.Direction.left:launcher.renderer.draw(.snake.texture, vec2(data.location[i].x*16,data.location[i].y*16), vec2(16,16), vec4(0,128,16,16)*px, 0, 0x80808080, 0);break;
case CMovement.Direction.right:launcher.renderer.draw(.snake.texture, vec2(data.location[i].x*16,data.location[i].y*16), vec2(16,16), vec4(32,128,16,16)*px, 0, 0x80808080, 0);break;
case CMovement.Direction.up:draw_data.coords = vec4(48,112,16,16)*px;break;
case CMovement.Direction.down:draw_data.coords = vec4(48,144,16,16)*px;break;
case CMovement.Direction.left:draw_data.coords = vec4(0,128,16,16)*px;break;
case CMovement.Direction.right:draw_data.coords = vec4(32,128,16,16)*px;break;
}
launcher.renderer.draw(draw_data);
if(snake.parts.length >1)
{
foreach(j;1..snake.parts.length - 1)drawElement(snake.parts[j]*16, snakePart(snake.parts[j], snake.parts[j+1], snake.parts[j-1]));

View file

@ -976,31 +976,52 @@ struct DrawSystem
void onUpdate(EntitiesData data)
{
if(launcher.renderer.prepared_items >= launcher.renderer.MaxObjects)return;//simple leave loop if max visible objects count was reached
import ecs_utils.gfx.renderer;
Renderer.DrawData draw_data;
draw_data.color = 0x80808080;
draw_data.thread_id = data.job_id;
draw_data.texture = space_invaders.texture;
//uint color_mask = 0xFCFCFCFC;
uint const_map = 0x80A08080;//0x80808080;
if(!data.depth)
{
if(data.hit_mark)
{
foreach(i; 0..data.length)
{
uint color = 0x80808080 + 0x01010101 * data.hit_mark[i];
short depth = cast(short)(data.locations[i].y);
launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, color, 0, 0, 0, data.job_id);
draw_data.color = 0x80808080 + 0x01010101 * data.hit_mark[i];
draw_data.depth = cast(short)(data.locations[i].y);
draw_data.coords = data.textures[i].coords;
draw_data.size = data.scale[i];
draw_data.position = data.locations[i];
launcher.renderer.draw(draw_data);
//launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, color|const_map, 0, 0, 0, data.job_id);
}
}
else if(data.rotation)
{
foreach(i; 0..data.length)
{
short depth = cast(short)(data.locations[i].y);
launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, 0x80808080, data.rotation[i], 0, 0, data.job_id);
draw_data.depth = cast(short)(data.locations[i].y);
draw_data.angle = data.rotation[i];
draw_data.coords = data.textures[i].coords;
draw_data.size = data.scale[i];
draw_data.position = data.locations[i];
launcher.renderer.draw(draw_data);
//launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, 0x80808080|const_map, data.rotation[i], 0, 0, data.job_id);
}
}
else
{
foreach(i; 0..data.length)
{
short depth = cast(short)(data.locations[i].y);
launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, 0x80808080, 0, 0, 0, data.job_id);
draw_data.depth = cast(short)(data.locations[i].y);
draw_data.coords = data.textures[i].coords;
draw_data.size = data.scale[i];
draw_data.position = data.locations[i];
launcher.renderer.draw(draw_data);
//launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, 0x80808080|const_map, 0, 0, 0, data.job_id);
}
}
}
@ -1012,18 +1033,27 @@ struct DrawSystem
{
foreach(i; 0..data.length)
{
uint color = 0x80808080 + 0x01010101 * data.hit_mark[i];
short depth = cast(short)(data.depth[i] * 8 + data.locations[i].y);
launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, color, data.rotation[i], 0, 0, data.job_id);
draw_data.color = 0x80808080 + 0x01010101 * data.hit_mark[i];
draw_data.angle = data.rotation[i];
draw_data.depth = cast(short)(data.depth[i] * 8 + data.locations[i].y);
draw_data.coords = data.textures[i].coords;
draw_data.size = data.scale[i];
draw_data.position = data.locations[i];
launcher.renderer.draw(draw_data);
//launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, color|const_map, data.rotation[i], 0, 0, data.job_id);
}
}
else
{
foreach(i; 0..data.length)
{
uint color = 0x80808080 + 0x01010101 * data.hit_mark[i];
short depth = cast(short)(data.depth[i] * 8 + data.locations[i].y);
launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, color, 0, 0, 0, data.job_id);
draw_data.color = 0x80808080 + 0x01010101 * data.hit_mark[i];
draw_data.depth = cast(short)(data.depth[i] * 8 + data.locations[i].y);
draw_data.coords = data.textures[i].coords;
draw_data.size = data.scale[i];
draw_data.position = data.locations[i];
launcher.renderer.draw(draw_data);
//launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, color|const_map, 0, 0, 0, data.job_id);
}
}
}
@ -1031,16 +1061,25 @@ struct DrawSystem
{
foreach(i; 0..data.length)
{
short depth = cast(short)(data.depth[i] * 8 + data.locations[i].y);
launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, 0x80808080, data.rotation[i], 0, 0, data.job_id);
draw_data.angle = data.rotation[i];
draw_data.depth = cast(short)(data.depth[i] * 8 + data.locations[i].y);
draw_data.coords = data.textures[i].coords;
draw_data.size = data.scale[i];
draw_data.position = data.locations[i];
launcher.renderer.draw(draw_data);
//launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, 0x80808080|const_map, data.rotation[i], 0, 0, data.job_id);
}
}
else
{
foreach(i; 0..data.length)
{
short depth = cast(short)(data.depth[i] * 8 + data.locations[i].y);
launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, 0x80808080, 0, 0, 0, data.job_id);
draw_data.depth = cast(short)(data.depth[i] * 8 + data.locations[i].y);
draw_data.coords = data.textures[i].coords;
draw_data.size = data.scale[i];
draw_data.position = data.locations[i];
launcher.renderer.draw(draw_data);
//launcher.renderer.draw(space_invaders.texture, data.locations[i].value, data.scale[i], data.textures[i].coords, depth, 0x80808080|const_map, 0, 0, 0, data.job_id);
}
}
}