mirror of
https://github.com/Relintai/terraman_2d.git
synced 2025-02-20 17:24:45 +01:00
Now the job will be able to use the new stored meshes.
This commit is contained in:
parent
4ee15cfa5c
commit
5c6ae3309b
@ -736,6 +736,10 @@ void Terrain2DMesherIsometric::mesh_base(Ref<Terrain2DChunkDefault> chunk) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((chunk->get_build_flags() & Terrain2DChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||||
|
bake_colors(chunk);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Terrain2DMesherIsometric::Terrain2DMesherIsometric() {
|
Terrain2DMesherIsometric::Terrain2DMesherIsometric() {
|
||||||
|
@ -338,6 +338,10 @@ void Terrain2DMesherSimple::add_chunk_normal(Ref<Terrain2DChunkDefault> chunk) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((chunk->get_build_flags() & Terrain2DChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||||
|
bake_colors(chunk);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Terrain2DMesherSimple::Terrain2DMesherSimple() {
|
Terrain2DMesherSimple::Terrain2DMesherSimple() {
|
||||||
|
@ -688,7 +688,8 @@ void Terrain2DChunkDefault::_draw() {
|
|||||||
|
|
||||||
ERR_FAIL_COND(!world);
|
ERR_FAIL_COND(!world);
|
||||||
|
|
||||||
RID terrain_mesh_rid = mesh_rid_get(MESH_INDEX_TERRAIN, MESH_TYPE_INDEX_MESH);
|
for (int i = 0; i < mesh_rid_get_count(MESH_INDEX_TERRAIN, MESH_TYPE_INDEX_MESH); ++i) {
|
||||||
|
RID terrain_mesh_rid = mesh_rid_get_index(MESH_INDEX_TERRAIN, MESH_TYPE_INDEX_MESH, i);
|
||||||
|
|
||||||
if (terrain_mesh_rid != RID()) {
|
if (terrain_mesh_rid != RID()) {
|
||||||
RID terrain_texture_rid = mesh_rid_get(MESH_INDEX_TERRAIN, MESH_TYPE_INDEX_TEXTURE_RID);
|
RID terrain_texture_rid = mesh_rid_get(MESH_INDEX_TERRAIN, MESH_TYPE_INDEX_TEXTURE_RID);
|
||||||
@ -696,6 +697,7 @@ void Terrain2DChunkDefault::_draw() {
|
|||||||
//Note: the transform parameter is not implemented in gles2
|
//Note: the transform parameter is not implemented in gles2
|
||||||
VisualServer::get_singleton()->canvas_item_add_mesh(get_canvas_item(), terrain_mesh_rid, Transform2D(), Color(1, 1, 1, 1), terrain_texture_rid, RID());
|
VisualServer::get_singleton()->canvas_item_add_mesh(get_canvas_item(), terrain_mesh_rid, Transform2D(), Color(1, 1, 1, 1), terrain_texture_rid, RID());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
RID liquid_mesh_rid = mesh_rid_get(MESH_INDEX_LIQUID, MESH_TYPE_INDEX_MESH);
|
RID liquid_mesh_rid = mesh_rid_get(MESH_INDEX_LIQUID, MESH_TYPE_INDEX_MESH);
|
||||||
|
|
||||||
|
@ -249,7 +249,7 @@ void Terrain2DTerrain2DJob::phase_terrain_mesh() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_mesher->get_vertex_count() == 0 && (!_liquid_mesher.is_valid() || _liquid_mesher->get_vertex_count() == 0)) {
|
if ((_mesher->get_vertex_count() == 0 && _mesher->get_stored_mesh_count() == 0) && (!_liquid_mesher.is_valid() || _liquid_mesher->get_vertex_count() == 0)) {
|
||||||
reset_stages();
|
reset_stages();
|
||||||
next_phase();
|
next_phase();
|
||||||
|
|
||||||
@ -263,14 +263,14 @@ void Terrain2DTerrain2DJob::phase_terrain_mesh() {
|
|||||||
if (mesh_rid == RID()) {
|
if (mesh_rid == RID()) {
|
||||||
//need to allocate the meshes
|
//need to allocate the meshes
|
||||||
//allocate
|
//allocate
|
||||||
chunk->mesh_create(Terrain2DChunkDefault::MESH_INDEX_TERRAIN);
|
chunk->meshes_create(Terrain2DChunkDefault::MESH_INDEX_TERRAIN, 1 + _mesher->get_stored_mesh_count());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
//we have the meshes, just clear
|
//we have the meshes, just clear
|
||||||
int count = chunk->mesh_rid_get_count(Terrain2DChunkDefault::MESH_INDEX_TERRAIN, Terrain2DChunkDefault::MESH_TYPE_INDEX_MESH);
|
int count = chunk->mesh_rid_get_count(Terrain2DChunkDefault::MESH_INDEX_TERRAIN, Terrain2DChunkDefault::MESH_TYPE_INDEX_MESH);
|
||||||
|
|
||||||
for (int i = 0; i < count; ++i) {
|
for (int i = 0; i < count; ++i) {
|
||||||
mesh_rid = chunk->mesh_rid_get(Terrain2DChunkDefault::MESH_INDEX_TERRAIN, Terrain2DChunkDefault::MESH_TYPE_INDEX_MESH);
|
mesh_rid = chunk->mesh_rid_get_index(Terrain2DChunkDefault::MESH_INDEX_TERRAIN, Terrain2DChunkDefault::MESH_TYPE_INDEX_MESH, i);
|
||||||
|
|
||||||
if (VS::get_singleton()->mesh_get_surface_count(mesh_rid) > 0)
|
if (VS::get_singleton()->mesh_get_surface_count(mesh_rid) > 0)
|
||||||
#if !GODOT4
|
#if !GODOT4
|
||||||
@ -392,15 +392,19 @@ void Terrain2DTerrain2DJob::step_type_normal() {
|
|||||||
Ref<Terrain2DChunkDefault> chunk = _chunk;
|
Ref<Terrain2DChunkDefault> chunk = _chunk;
|
||||||
|
|
||||||
//TODO make this automatic in build_mesh
|
//TODO make this automatic in build_mesh
|
||||||
if ((chunk->get_build_flags() & Terrain2DChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
//if ((chunk->get_build_flags() & Terrain2DChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0) {
|
||||||
_mesher->bake_colors(_chunk);
|
// _mesher->bake_colors(_chunk);
|
||||||
}
|
//}
|
||||||
|
|
||||||
temp_mesh_arr = _mesher->build_mesh();
|
temp_mesh_arr = _mesher->build_mesh();
|
||||||
|
RID mesh_rid = chunk->mesh_rid_get_index(Terrain2DChunkDefault::MESH_INDEX_TERRAIN, Terrain2DChunkDefault::MESH_TYPE_INDEX_MESH, 0);
|
||||||
RID mesh_rid = chunk->mesh_rid_get(Terrain2DChunkDefault::MESH_INDEX_TERRAIN, Terrain2DChunkDefault::MESH_TYPE_INDEX_MESH);
|
|
||||||
|
|
||||||
VS::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
|
VS::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, VisualServer::PRIMITIVE_TRIANGLES, temp_mesh_arr);
|
||||||
|
|
||||||
|
for (int i = 0; i < _mesher->get_stored_mesh_count(); ++i) {
|
||||||
|
Array arr = _mesher->build_stored_mesh(i);
|
||||||
|
mesh_rid = chunk->mesh_rid_get_index(Terrain2DChunkDefault::MESH_INDEX_TERRAIN, Terrain2DChunkDefault::MESH_TYPE_INDEX_MESH, i + 1);
|
||||||
|
VS::get_singleton()->mesh_add_surface_from_arrays(mesh_rid, VisualServer::PRIMITIVE_TRIANGLES, arr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Terrain2DTerrain2DJob::Terrain2DTerrain2DJob() {
|
Terrain2DTerrain2DJob::Terrain2DTerrain2DJob() {
|
||||||
|
Loading…
Reference in New Issue
Block a user