Common update:
-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
This commit is contained in:
parent
7c263d3ed4
commit
8381ac166b
7 changed files with 61 additions and 40 deletions
|
|
@ -98,7 +98,7 @@ struct Renderer
|
|||
|
||||
alias Technique = RenderTechnique;
|
||||
|
||||
__gshared Technique technique = Technique.simple;
|
||||
__gshared Technique technique = Technique.vbo_batch;
|
||||
void* data_ptr;
|
||||
|
||||
//import ecs_utils.core : RenderTechnique;
|
||||
|
|
@ -339,6 +339,7 @@ struct Renderer
|
|||
//import core.stdc.string;
|
||||
with(this_)
|
||||
{
|
||||
if(item_id >= MaxObjects)return;
|
||||
//pos += view_pos;
|
||||
size.x *= view_size.x;
|
||||
size.y *= view_size.y;
|
||||
|
|
@ -470,8 +471,8 @@ struct Renderer
|
|||
break;
|
||||
case Technique.vbo_batch:
|
||||
//if(data_index){
|
||||
batch_vbo[0].bufferSubData(item_id*4*16,0,batch_vertices.ptr);
|
||||
batch_ibo[0].bufferSubData(item_id*6*2,0,batch_indices.ptr);
|
||||
batch_vbo[0].bufferSubData(Buffer.BindTarget.array,item_id*4*16,0,batch_vertices.ptr);
|
||||
batch_ibo[0].bufferSubData(Buffer.BindTarget.element_array,item_id*6*2,0,batch_indices.ptr);
|
||||
|
||||
batch_vbo[0].bind(Buffer.BindTarget.array);
|
||||
batch_ibo[0].bind(Buffer.BindTarget.element_array);
|
||||
|
|
@ -480,8 +481,8 @@ struct Renderer
|
|||
glVertexAttribPointer(1,2,GL_FLOAT,false,16,cast(void*)8);//}
|
||||
break;
|
||||
case Technique.instanced_attrib_divisor:
|
||||
ubos[0].bufferSubData(data_index,0,uniform_block.ptr);
|
||||
ubos[0].bind(Buffer.BindTarget.array);
|
||||
ubos[0].bufferSubData(Buffer.BindTarget.uniform,data_index,0,uniform_block.ptr);
|
||||
ubos[0].bind(Buffer.BindTarget.uniform);
|
||||
glEnableVertexAttribArray(2);
|
||||
glEnableVertexAttribArray(3);
|
||||
glEnableVertexAttribArray(4);
|
||||
|
|
@ -496,7 +497,7 @@ struct Renderer
|
|||
break;
|
||||
case Technique.uniform_buffer:
|
||||
//ubos[0].bufferData(1,64*MaxObjects,BufferUsage,null);
|
||||
/*if(data_index)*/ubos[0].bufferSubData(data_index,0,uniform_block.ptr);
|
||||
/*if(data_index)*/ubos[0].bufferSubData(Buffer.BindTarget.uniform,data_index,0,uniform_block.ptr);
|
||||
break;
|
||||
case Technique.uniform_buffer_indexed:
|
||||
ubos[0].bindRange(Buffer.BindTarget.uniform,0,0,block_max_size);
|
||||
|
|
@ -581,6 +582,8 @@ struct Renderer
|
|||
{
|
||||
material_id = render_list[i].material_id;
|
||||
GfxConfig.materials[material_id].bind();
|
||||
float[3*4] data = [1,0,0,1,0,0,0,0,0,0,1,1];
|
||||
GfxConfig.materials[material_id].pushUniforms(data.ptr);
|
||||
}
|
||||
if(texture.data != render_list[i].texture.data)
|
||||
{
|
||||
|
|
@ -589,17 +592,17 @@ struct Renderer
|
|||
}
|
||||
|
||||
uint instance_count = 16_384;
|
||||
if(i*16_384 > item_id)
|
||||
if((i+1)*16_384 > item_id)
|
||||
{
|
||||
instance_count = i*16_384 - item_id;
|
||||
instance_count = item_id%16_384;
|
||||
}
|
||||
|
||||
/*glVertexAttribPointer(0,2,GL_FLOAT,false,16,cast(void*)(i*16_384*4*16));
|
||||
glVertexAttribPointer(0,2,GL_FLOAT,false,16,cast(void*)(i*16_384*4*16));
|
||||
glVertexAttribPointer(1,2,GL_FLOAT,false,16,cast(void*)(i*16_384*4*16+8));
|
||||
|
||||
glDrawElements(GL_TRIANGLES,instance_count*6,GL_UNSIGNED_SHORT,cast(void*)(i*16_384*6*2));*/
|
||||
glDrawElements(GL_TRIANGLES,instance_count*6,GL_UNSIGNED_SHORT,cast(void*)(i*16_384*6*2));
|
||||
|
||||
glDrawElementsBaseVertex(GL_TRIANGLES,instance_count*6,GL_UNSIGNED_SHORT,cast(void*)(i*16_384*6*2),i*16_384*4);
|
||||
//glDrawElementsBaseVertex(GL_TRIANGLES,instance_count*6,GL_UNSIGNED_SHORT,cast(void*)(i*16_384*6*2),i*16_384*4);
|
||||
}
|
||||
}
|
||||
else if(technique == Technique.ssbo_instanced || technique == Technique.instanced_attrib_divisor)
|
||||
|
|
@ -794,9 +797,10 @@ struct Renderer
|
|||
|
||||
void view(vec2 pos, vec2 size)
|
||||
{
|
||||
view_pos = pos * size - 1;
|
||||
//view_pos = pos * size - 1;
|
||||
view_size = vec2(2/size.x,2/size.y);
|
||||
sdl_transform = vec4(0,0,1.0/size.x,1.0/size.y);
|
||||
view_pos = (pos - size * 0.5) * view_size;
|
||||
}
|
||||
|
||||
__gshared void function(ref Renderer this_, Texture tex, vec2 pos, vec2 size, vec4 coords, float angle, uint material_id, uint mesh_id) __draw;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue