Wireframe is back for normal OGL users MV : Added timed command execution for future "demo mode"undefined
@@ -96,6 +96,8 @@ DefaultShaderData::DefaultShaderData(DebugRenderMode render_mode) | |||||
if (render_mode == DebugRenderMode::Default) | if (render_mode == DebugRenderMode::Default) | ||||
m_shader = Shader::Create(LOLFX_RESOURCE_NAME(shiny)); | m_shader = Shader::Create(LOLFX_RESOURCE_NAME(shiny)); | ||||
else if (render_mode == DebugRenderMode::Flat) | |||||
m_shader = Shader::Create(LOLFX_RESOURCE_NAME(shinyflat)); | |||||
else if (render_mode == DebugRenderMode::Wireframe) | else if (render_mode == DebugRenderMode::Wireframe) | ||||
m_shader = Shader::Create(LOLFX_RESOURCE_NAME(shinydebugwireframe)); | m_shader = Shader::Create(LOLFX_RESOURCE_NAME(shinydebugwireframe)); | ||||
else if (render_mode == DebugRenderMode::Lighting) | else if (render_mode == DebugRenderMode::Lighting) | ||||
@@ -434,12 +436,13 @@ EasyMesh::EasyMesh() | |||||
//----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
EasyMesh::EasyMesh(const EasyMesh& em) | EasyMesh::EasyMesh(const EasyMesh& em) | ||||
{ | { | ||||
//*this = em; | |||||
m_indices = em.m_indices; | m_indices = em.m_indices; | ||||
m_vert = em.m_vert; | m_vert = em.m_vert; | ||||
m_cursors = em.m_cursors; | m_cursors = em.m_cursors; | ||||
m_build_data = nullptr; | m_build_data = nullptr; | ||||
m_gpu_data = GpuEasyMeshData(); | m_gpu_data = GpuEasyMeshData(); | ||||
if (em.m_build_data) | |||||
m_build_data = new EasyMeshBuildData(*em.m_build_data); | |||||
if (m_indices.Count() && m_vert.Count() && m_cursors.Count()) | if (m_indices.Count() && m_vert.Count() && m_cursors.Count()) | ||||
m_state = MeshRender::NeedConvert; | m_state = MeshRender::NeedConvert; | ||||
else | else | ||||
@@ -447,7 +450,7 @@ EasyMesh::EasyMesh(const EasyMesh& em) | |||||
} | } | ||||
//----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
bool EasyMesh::Compile(char const *command) | |||||
bool EasyMesh::Compile(char const *command, bool Execute) | |||||
{ | { | ||||
bool res = false; | bool res = false; | ||||
EasyMeshCompiler mc(*this); | EasyMeshCompiler mc(*this); | ||||
@@ -455,18 +458,8 @@ bool EasyMesh::Compile(char const *command) | |||||
if ((res = mc.ParseString(command))) | if ((res = mc.ParseString(command))) | ||||
{ | { | ||||
BD()->Disable(MeshBuildOperation::CommandRecording); | BD()->Disable(MeshBuildOperation::CommandRecording); | ||||
BD()->Enable(MeshBuildOperation::CommandExecution); | |||||
ExecuteCmdStack(); | |||||
BD()->Disable(MeshBuildOperation::CommandExecution); | |||||
if (!BD()->IsEnabled(MeshBuildOperation::PreventVertCleanup)) | |||||
VerticesCleanup(); | |||||
if (BD()->IsEnabled(MeshBuildOperation::PostBuildComputeNormals)) | |||||
ComputeNormals(0, m_indices.Count()); | |||||
BD()->Disable(MeshBuildOperation::PostBuildComputeNormals); | |||||
BD()->Disable(MeshBuildOperation::PreventVertCleanup); | |||||
if (Execute) | |||||
ExecuteCmdStack(); | |||||
} | } | ||||
return res; | return res; | ||||
} | } | ||||
@@ -502,14 +495,21 @@ bool EasyMesh::Compile(char const *command) | |||||
LOL_CALL(LOL_CAT(EZCALL_, LOL_CALL(LOL_COUNT_TO_12, (__VA_ARGS__))), (__VA_ARGS__)) | LOL_CALL(LOL_CAT(EZCALL_, LOL_CALL(LOL_COUNT_TO_12, (__VA_ARGS__))), (__VA_ARGS__)) | ||||
//----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
void EasyMesh::ExecuteCmdStack() | |||||
void EasyMesh::ExecuteCmdStack(bool ExecAllStack) | |||||
{ | { | ||||
#define DO_EXEC_CMD(MESH_CMD, FUNC_PARAMS) \ | #define DO_EXEC_CMD(MESH_CMD, FUNC_PARAMS) \ | ||||
case EasyMeshCmdType::MESH_CMD: \ | case EasyMeshCmdType::MESH_CMD: \ | ||||
{ EZM_CALL_FUNC FUNC_PARAMS; break; } | { EZM_CALL_FUNC FUNC_PARAMS; break; } | ||||
for (BD()->Cmdi() = 0; BD()->Cmdi() < BD()->CmdStack().GetCmdNb(); ++BD()->Cmdi()) | |||||
BD()->Enable(MeshBuildOperation::CommandExecution); | |||||
if (ExecAllStack) | |||||
BD()->Cmdi() = 0; | |||||
for (; BD()->Cmdi() < BD()->CmdStack().GetCmdNb() && BD()->CmdExecNb() != 0; ++BD()->Cmdi()) | |||||
{ | { | ||||
if (BD()->CmdExecNb() > 0) | |||||
--BD()->CmdExecNb(); | |||||
switch (BD()->CmdStack().GetCmd(BD()->Cmdi())) | switch (BD()->CmdStack().GetCmd(BD()->Cmdi())) | ||||
{ | { | ||||
DO_EXEC_CMD(MeshCsg, (MeshCsg, CSGUsage)) | DO_EXEC_CMD(MeshCsg, (MeshCsg, CSGUsage)) | ||||
@@ -549,6 +549,19 @@ void EasyMesh::ExecuteCmdStack() | |||||
ASSERT(0, "Unknown command pseudo bytecode"); | ASSERT(0, "Unknown command pseudo bytecode"); | ||||
} | } | ||||
} | } | ||||
BD()->Disable(MeshBuildOperation::CommandExecution); | |||||
if (!BD()->IsEnabled(MeshBuildOperation::PreventVertCleanup)) | |||||
VerticesCleanup(); | |||||
if (BD()->IsEnabled(MeshBuildOperation::PostBuildComputeNormals)) | |||||
ComputeNormals(0, m_indices.Count()); | |||||
BD()->Disable(MeshBuildOperation::PostBuildComputeNormals); | |||||
BD()->Disable(MeshBuildOperation::PreventVertCleanup); | |||||
if (BD()->CmdExecNb() > 0) | |||||
BD()->CmdExecNb() = -1; | |||||
} | } | ||||
//----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
@@ -859,10 +872,10 @@ void VertexDictionnary::RemoveVertex(const int vert_id) | |||||
if (jf < 0) | if (jf < 0) | ||||
{ | { | ||||
jf = i; | jf = i; | ||||
vertex_list[i].m3 == VDictType::Master; | |||||
vertex_list[i].m3 = VDictType::Master; | |||||
} | } | ||||
else | else | ||||
vertex_list[i].m3 == jf; | |||||
vertex_list[i].m3 = jf; | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -32,8 +32,7 @@ private: | |||||
int m_i_cur; | int m_i_cur; | ||||
public: | public: | ||||
//cmd storage | |||||
void AddCmd(int cmd) { m_commands.Push(cmd, m_floats.Count(), m_ints.Count()); } | |||||
//GET/SET exec | |||||
int GetCmdNb() { return m_commands.Count(); } | int GetCmdNb() { return m_commands.Count(); } | ||||
int GetCmd(int i) | int GetCmd(int i) | ||||
{ | { | ||||
@@ -43,6 +42,9 @@ public: | |||||
return m_commands[i].m1; | return m_commands[i].m1; | ||||
} | } | ||||
//cmd storage | |||||
void AddCmd(int cmd) { m_commands.Push(cmd, m_floats.Count(), m_ints.Count()); } | |||||
//GETTER | //GETTER | ||||
inline float F() { return m_floats[m_f_cur++]; } | inline float F() { return m_floats[m_f_cur++]; } | ||||
inline int I() { return m_ints[m_i_cur++]; } | inline int I() { return m_ints[m_i_cur++]; } | ||||
@@ -373,6 +375,8 @@ public: | |||||
m_texcoord_scale = vec2(1.f); | m_texcoord_scale = vec2(1.f); | ||||
m_texcoord_scale2 = vec2(1.f); | m_texcoord_scale2 = vec2(1.f); | ||||
m_build_flags = 0; | m_build_flags = 0; | ||||
m_i_cmd = 0; | |||||
m_exec_nb = -1; | |||||
for (int i = 0; i < MeshType::Max; ++i) | for (int i = 0; i < MeshType::Max; ++i) | ||||
{ | { | ||||
m_texcoord_build_type[i] = TexCoordBuildType::TriangleDefault; | m_texcoord_build_type[i] = TexCoordBuildType::TriangleDefault; | ||||
@@ -381,7 +385,8 @@ public: | |||||
} | } | ||||
inline CommandStack &CmdStack() { return m_stack; } | inline CommandStack &CmdStack() { return m_stack; } | ||||
inline int &Cmdi() { return m_cmd_i; } | |||||
inline int &Cmdi() { return m_i_cmd; } | |||||
inline int &CmdExecNb() { return m_exec_nb; } | |||||
inline Array<int, int> &LoopStack(){ return m_loop_stack; } | inline Array<int, int> &LoopStack(){ return m_loop_stack; } | ||||
inline vec4 &ColorA() { return m_color_a; } | inline vec4 &ColorA() { return m_color_a; } | ||||
inline vec4 &ColorB() { return m_color_b; } | inline vec4 &ColorB() { return m_color_b; } | ||||
@@ -570,7 +575,8 @@ public: | |||||
public: | public: | ||||
CommandStack m_stack; | CommandStack m_stack; | ||||
int m_cmd_i; | |||||
int m_i_cmd; | |||||
int m_exec_nb; | |||||
Array<int, int> m_loop_stack; | Array<int, int> m_loop_stack; | ||||
vec4 m_color_a; | vec4 m_color_a; | ||||
vec4 m_color_b; | vec4 m_color_b; | ||||
@@ -667,8 +673,8 @@ public: | |||||
EasyMesh(); | EasyMesh(); | ||||
EasyMesh(const EasyMesh& em); | EasyMesh(const EasyMesh& em); | ||||
bool Compile(char const *command); | |||||
void ExecuteCmdStack(); | |||||
bool Compile(char const *command, bool Execute=true); | |||||
void ExecuteCmdStack(bool ExecAllStack=true); | |||||
void MeshConvert(GpuShaderData* new_gpu_sdata); | void MeshConvert(GpuShaderData* new_gpu_sdata); | ||||
void MeshConvert(Shader* ProvidedShader = nullptr); | void MeshConvert(Shader* ProvidedShader = nullptr); | ||||
bool Render(mat4 const &model, int render_mode=Video::GetDebugRenderMode()); | bool Render(mat4 const &model, int render_mode=Video::GetDebugRenderMode()); | ||||
@@ -63,42 +63,26 @@ void Video::SetDebugRenderMode(DebugRenderMode d) | |||||
{ | { | ||||
//All these modes are handled in the shaders. | //All these modes are handled in the shaders. | ||||
case DebugRenderMode::Default: | case DebugRenderMode::Default: | ||||
case DebugRenderMode::Flat: | |||||
case DebugRenderMode::Lighting: | case DebugRenderMode::Lighting: | ||||
case DebugRenderMode::Normal: | case DebugRenderMode::Normal: | ||||
case DebugRenderMode::UV: | case DebugRenderMode::UV: | ||||
{ | { | ||||
#if defined USE_D3D9 || defined _XBOX | #if defined USE_D3D9 || defined _XBOX | ||||
#elif defined HAVE_GLES_2X | #elif defined HAVE_GLES_2X | ||||
// glEnable(GL_CULL_FACE); | |||||
#else | #else | ||||
// if (VideoData::render_mode == d && glIsEnabled(GL_CULL_FACE) == GL_TRUE) | |||||
// SetFaceCulling(false); | |||||
// else | |||||
// SetFaceCulling(true); | |||||
// glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); | |||||
glEnable(GL_CULL_FACE); | |||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); | |||||
#endif | #endif | ||||
break; | break; | ||||
} | } | ||||
case DebugRenderMode::Wireframe: | case DebugRenderMode::Wireframe: | ||||
{ | { | ||||
if (VideoData::render_mode == d) | |||||
{ | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
#else | |||||
// SetFaceCulling(!VideoData::face_culling); | |||||
#endif | |||||
} | |||||
else | |||||
{ | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
#else | |||||
// SetFaceCulling(false); | |||||
#endif | |||||
} | |||||
#if defined USE_D3D9 || defined _XBOX | #if defined USE_D3D9 || defined _XBOX | ||||
#elif defined HAVE_GLES_2X | #elif defined HAVE_GLES_2X | ||||
#else | #else | ||||
// glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | |||||
glDisable(GL_CULL_FACE); | |||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); | |||||
#endif | #endif | ||||
break; | break; | ||||
} | } | ||||
@@ -28,6 +28,7 @@ struct DebugRenderMode | |||||
{ | { | ||||
//Add your new rendermode at your convenience | //Add your new rendermode at your convenience | ||||
Default, | Default, | ||||
Flat, | |||||
Wireframe, | Wireframe, | ||||
Lighting, | Lighting, | ||||
Normal, | Normal, | ||||
@@ -1,6 +1,6 @@ | |||||
addlight 0 position (1 -.5 1.5) color #bbb addlight 0 position (-1 -.5 -1.5) color #bbb addlight 1 position (0 1 0) color #444 | addlight 0 position (1 -.5 1.5) color #bbb addlight 0 position (-1 -.5 -1.5) color #bbb addlight 1 position (0 1 0) color #444 | ||||
clearcolor #ddd | clearcolor #ddd | ||||
showgizmo false | |||||
showgizmo true | |||||
showlight false | showlight false | ||||
@@ -48,8 +48,10 @@ custom setmesh " | |||||
//sc#0f0 ab 2 ty 1.5 ab 2 | //sc#0f0 ab 2 ty 1.5 ab 2 | ||||
//sc#00f ab 2 ty 1.5 ab 2 | //sc#00f ab 2 ty 1.5 ab 2 | ||||
sc#00f tqw lp 5[tz 11 [lp 6 [tx 5 ty 5 ab 10 ]]] tz -22 | |||||
[sc#66f afcb(10) .25tx0]csgs[sc#fff afcb(10).25t(2)][[sc#6f6 afcb(7).25]csgs[sc#fff afcb(7).25t(1.5)]][[sc#f44 asph4 12t(-2.5)]csga[sc#fff afcb(7).25t(1.4)]csgs[sc#fff afcb(7).25t(2.5)]][[sc#ff0 ato6 2.5 1.2rx90tz-1.25tx-.9][sc#ff0 ab.5 2.1 .5dup[rz90sx.5ty-.8tx-.28]ty.55tx.25tz-.4taz1 1sy.8sx.8ty-.55tx-.25tz.4tz-1.2tx1.2]tz1.25tx1.25dup[sx-1ry90]tz-1.25tx-1.25] | |||||
//[sc#66f afcb(10) .25tx0]csgs[sc#fff afcb(10).25t(2)][[sc#6f6 afcb(7).25]csgs[sc#fff afcb(7).25t(1.5)]][[sc#f44 asph4 12t(-2.5)]csga[sc#fff afcb(7).25t(1.4)]csgs[sc#fff afcb(7).25t(2.5)]][[sc#ff0 ato6 2.5 1.2rx90tz-1.25tx-.9][sc#ff0 ab.5 2.1 .5dup[rz90sx.5ty-.8tx-.28]ty.55tx.25tz-.4taz1 1sy.8sx.8ty-.55tx-.25tz.4tz-1.2tx1.2]tz1.25tx1.25dup[sx-1ry90]tz-1.25tx-1.25] | |||||
" | " | ||||
@@ -166,6 +166,7 @@ public: | |||||
// Mesh Setup | // Mesh Setup | ||||
m_render_max = vec2(-.9f, 4.1f); | m_render_max = vec2(-.9f, 4.1f); | ||||
m_mesh_render = 0; | |||||
m_mesh_id = 0; | m_mesh_id = 0; | ||||
m_mesh_id1 = 0.f; | m_mesh_id1 = 0.f; | ||||
m_default_texture = nullptr; | m_default_texture = nullptr; | ||||
@@ -194,6 +195,9 @@ public: | |||||
m_mat_prev = mat4(quat::fromeuler_xyz(vec3::zero)); | m_mat_prev = mat4(quat::fromeuler_xyz(vec3::zero)); | ||||
m_mat = mat4(quat::fromeuler_xyz(vec3(m_rot_mesh, .0f))); | m_mat = mat4(quat::fromeuler_xyz(vec3(m_rot_mesh, .0f))); | ||||
m_build_timer = 0.1f; | |||||
m_build_time = -1.f; | |||||
//stream update | //stream update | ||||
m_stream_update_time = 2.0f; | m_stream_update_time = 2.0f; | ||||
m_stream_update_timer = 1.0f; | m_stream_update_timer = 1.0f; | ||||
@@ -297,7 +301,7 @@ public: | |||||
{ | { | ||||
if (m_mesh_id == m_meshes.Count() - 1) | if (m_mesh_id == m_meshes.Count() - 1) | ||||
m_mesh_id++; | m_mesh_id++; | ||||
m_meshes.Push(em); | |||||
m_meshes.Push(em, nullptr); | |||||
} | } | ||||
#else | #else | ||||
m_ssetup->Compile("addlight 0.0 position (4 -1 -4) color (.0 .2 .5 1) " | m_ssetup->Compile("addlight 0.0 position (4 -1 -4) color (.0 .2 .5 1) " | ||||
@@ -461,8 +465,8 @@ public: | |||||
//Target List Setup | //Target List Setup | ||||
Array<vec3> target_list; | Array<vec3> target_list; | ||||
if (m_meshes.Count() && m_mesh_id >= 0) | if (m_meshes.Count() && m_mesh_id >= 0) | ||||
for (int i = 0; i < m_meshes[m_mesh_id]->GetVertexCount(); i++) | |||||
target_list << (m_mat * mat4::translate(m_meshes[m_mesh_id]->GetVertexLocation(i))).v3.xyz; | |||||
for (int i = 0; i < m_meshes[m_mesh_id].m1->GetVertexCount(); i++) | |||||
target_list << (m_mat * mat4::translate(m_meshes[m_mesh_id].m1->GetVertexLocation(i))).v3.xyz; | |||||
//-- | //-- | ||||
//Update mesh screen location - Get the Min/Max needed | //Update mesh screen location - Get the Min/Max needed | ||||
@@ -582,11 +586,12 @@ public: | |||||
{ | { | ||||
//Create a new mesh | //Create a new mesh | ||||
EasyMesh* em = new EasyMesh(); | EasyMesh* em = new EasyMesh(); | ||||
if (em->Compile(m_ssetup->m_custom_cmd[i].m2.C())) | |||||
if (em->Compile(m_ssetup->m_custom_cmd[i].m2.C(), false)) | |||||
{ | { | ||||
em->BD()->Cmdi() = 0; | |||||
if (m_mesh_id == m_meshes.Count() - 1) | if (m_mesh_id == m_meshes.Count() - 1) | ||||
m_mesh_id++; | m_mesh_id++; | ||||
m_meshes.Push(em); | |||||
m_meshes.Push(em, nullptr); | |||||
} | } | ||||
else | else | ||||
delete(em); | delete(em); | ||||
@@ -645,16 +650,10 @@ public: | |||||
//TODO : This should probably be "standard LoL behaviour" | //TODO : This should probably be "standard LoL behaviour" | ||||
#if NO_NACL_EM_INPUT | #if NO_NACL_EM_INPUT | ||||
{ | { | ||||
if (KeyReleased(KEY_F1)) | |||||
Video::SetDebugRenderMode(DebugRenderMode::Default); | |||||
if (KeyReleased(KEY_F2)) | if (KeyReleased(KEY_F2)) | ||||
Video::SetDebugRenderMode(DebugRenderMode::Wireframe); | |||||
if (KeyReleased(KEY_F3)) | |||||
Video::SetDebugRenderMode(DebugRenderMode::Lighting); | |||||
if (KeyReleased(KEY_F4)) | |||||
Video::SetDebugRenderMode(DebugRenderMode::Normal); | |||||
if (KeyReleased(KEY_F5)) | |||||
Video::SetDebugRenderMode(DebugRenderMode::UV); | |||||
Video::SetDebugRenderMode((Video::GetDebugRenderMode() + 1) % DebugRenderMode::Max); | |||||
else if (KeyReleased(KEY_F1)) | |||||
Video::SetDebugRenderMode((Video::GetDebugRenderMode() + DebugRenderMode::Max - 1) % DebugRenderMode::Max); | |||||
} | } | ||||
#endif //NO_NACL_EM_INPUT | #endif //NO_NACL_EM_INPUT | ||||
@@ -679,6 +678,63 @@ public: | |||||
break; | break; | ||||
} | } | ||||
if (m_build_timer > .0f) | |||||
{ | |||||
if (m_build_time < .0f) | |||||
{ | |||||
m_build_time = m_build_timer; | |||||
for (int i = 0; i < m_meshes.Count(); ++i) | |||||
{ | |||||
if (m_meshes[i].m1 && m_meshes[i].m1->BD()->Cmdi() < m_meshes[i].m1->BD()->CmdStack().GetCmdNb()) | |||||
{ | |||||
EasyMesh* tmp = m_meshes[i].m1; | |||||
EasyMesh* newtmp = new EasyMesh(*tmp); | |||||
int ii = 1; | |||||
#if 1 | |||||
bool stop = false; | |||||
while (!stop) | |||||
{ | |||||
int cmdi = newtmp->BD()->Cmdi() + ii; | |||||
if (cmdi < newtmp->BD()->CmdStack().GetCmdNb()) | |||||
{ | |||||
switch (newtmp->BD()->CmdStack().GetCmd(cmdi)) | |||||
{ | |||||
case EasyMeshCmdType::LoopStart: | |||||
case EasyMeshCmdType::LoopEnd: | |||||
case EasyMeshCmdType::OpenBrace: | |||||
case EasyMeshCmdType::CloseBrace: | |||||
case EasyMeshCmdType::ScaleWinding: | |||||
case EasyMeshCmdType::QuadWeighting: | |||||
case EasyMeshCmdType::PostBuildNormal: | |||||
case EasyMeshCmdType::PreventVertCleanup: | |||||
case EasyMeshCmdType::SetColorA: | |||||
case EasyMeshCmdType::SetColorB: | |||||
{ | |||||
ii++; | |||||
break; | |||||
} | |||||
default: | |||||
{ | |||||
stop = true; | |||||
break; | |||||
} | |||||
} | |||||
} | |||||
else | |||||
stop = true; | |||||
} | |||||
#endif | |||||
newtmp->BD()->CmdExecNb() = ii; | |||||
newtmp->ExecuteCmdStack(false); | |||||
m_meshes[i].m1 = newtmp; | |||||
delete(tmp); | |||||
} | |||||
} | |||||
} | |||||
m_build_time -= seconds; | |||||
} | |||||
vec3 x = vec3(1.f,0.f,0.f); | vec3 x = vec3(1.f,0.f,0.f); | ||||
vec3 y = vec3(0.f,1.f,0.f); | vec3 y = vec3(0.f,1.f,0.f); | ||||
mat4 save_proj = m_camera->GetProjection(); | mat4 save_proj = m_camera->GetProjection(); | ||||
@@ -692,21 +748,21 @@ public: | |||||
for (int i = 0; i < m_meshes.Count(); i++) | for (int i = 0; i < m_meshes.Count(); i++) | ||||
{ | { | ||||
{ | { | ||||
if (m_meshes[i]->GetMeshState() == MeshRender::NeedConvert) | |||||
if (m_meshes[i].m1->GetMeshState() == MeshRender::NeedConvert) | |||||
{ | { | ||||
#if WITH_TEXTURE | #if WITH_TEXTURE | ||||
m_meshes[i]->MeshConvert(new DefaultShaderData(((1 << VertexUsage::Position) | (1 << VertexUsage::Normal) | | |||||
(1 << VertexUsage::Color) | (1 << VertexUsage::TexCoord)), | |||||
m_texture_shader, true)); | |||||
m_meshes[i].m1->MeshConvert(new DefaultShaderData(((1 << VertexUsage::Position) | (1 << VertexUsage::Normal) | | |||||
(1 << VertexUsage::Color) | (1 << VertexUsage::TexCoord)), | |||||
m_texture_shader, true)); | |||||
#else | #else | ||||
m_meshes[i]->MeshConvert(); | |||||
m_meshes[i].m1->MeshConvert(); | |||||
#endif //WITH_TEXTURE | #endif //WITH_TEXTURE | ||||
} | } | ||||
#if ALL_FEATURES | #if ALL_FEATURES | ||||
float j = -(float)(m_meshes.Count() - (i + 1)) + (-m_mesh_id1 + (float)(m_meshes.Count() - 1)); | float j = -(float)(m_meshes.Count() - (i + 1)) + (-m_mesh_id1 + (float)(m_meshes.Count() - 1)); | ||||
if (m_mesh_id1 - m_render_max[0] > (float)i && m_mesh_id1 - m_render_max[1] < (float)i && | if (m_mesh_id1 - m_render_max[0] > (float)i && m_mesh_id1 - m_render_max[1] < (float)i && | ||||
m_meshes[i]->GetMeshState() > MeshRender::NeedConvert) | |||||
m_meshes[i].m1->GetMeshState() > MeshRender::NeedConvert) | |||||
{ | { | ||||
float a_j = lol::abs(j); | float a_j = lol::abs(j); | ||||
float i_trans = (a_j * a_j * m_hist_scale_mesh.x + a_j * m_hist_scale_mesh.x) * .5f; | float i_trans = (a_j * a_j * m_hist_scale_mesh.x + a_j * m_hist_scale_mesh.x) * .5f; | ||||
@@ -720,12 +776,12 @@ public: | |||||
//Camera projection | //Camera projection | ||||
mat4 new_proj = mat_obj_offset * mat_count_offset * mat_align * mat_count_scale * save_proj; | mat4 new_proj = mat_obj_offset * mat_count_offset * mat_align * mat_count_scale * save_proj; | ||||
m_camera->SetProjection(new_proj); | m_camera->SetProjection(new_proj); | ||||
m_meshes[i]->Render(m_mat); | |||||
m_meshes[i].m1->Render(m_mat); | |||||
g_renderer->Clear(ClearMask::Depth); | g_renderer->Clear(ClearMask::Depth); | ||||
} | } | ||||
m_camera->SetProjection(save_proj); | m_camera->SetProjection(save_proj); | ||||
#else | #else | ||||
m_meshes[i]->Render(m_mat); | |||||
m_meshes[i].m1->Render(m_mat); | |||||
#endif //ALL_FEATURES | #endif //ALL_FEATURES | ||||
} | } | ||||
} | } | ||||
@@ -762,19 +818,19 @@ public: | |||||
#if 0 //Debug normal draw | #if 0 //Debug normal draw | ||||
for (int i = m_meshes.Count() - 1; 0 <= i && i < m_meshes.Count(); i++) | for (int i = m_meshes.Count() - 1; 0 <= i && i < m_meshes.Count(); i++) | ||||
{ | { | ||||
for (int j = 0; j < m_meshes[i]->m_indices.Count(); j += 3) | |||||
for (int j = 0; j < m_meshes[i].m1->m_indices.Count(); j += 3) | |||||
{ | { | ||||
VertexData v[3] = { m_meshes[i]->m_vert[m_meshes[i]->m_indices[j ]], | |||||
m_meshes[i]->m_vert[m_meshes[i]->m_indices[j+1]], | |||||
m_meshes[i]->m_vert[m_meshes[i]->m_indices[j+2]] | |||||
VertexData v[3] = { m_meshes[i].m1->m_vert[m_meshes[i].m1->m_indices[j ]], | |||||
m_meshes[i].m1->m_vert[m_meshes[i].m1->m_indices[j+1]], | |||||
m_meshes[i].m1->m_vert[m_meshes[i].m1->m_indices[j+2]] | |||||
}; | }; | ||||
for (int k = 0; k < 3; k++) | for (int k = 0; k < 3; k++) | ||||
Debug::DrawLine((m_mat * mat4::translate(v[k].m_coord)).v3.xyz, | Debug::DrawLine((m_mat * mat4::translate(v[k].m_coord)).v3.xyz, | ||||
(m_mat * mat4::translate(v[(k+1)%3].m_coord)).v3.xyz, vec4(vec3((v[k].m_coord.z + 1.f)*.5f),1.f)); | (m_mat * mat4::translate(v[(k+1)%3].m_coord)).v3.xyz, vec4(vec3((v[k].m_coord.z + 1.f)*.5f),1.f)); | ||||
} | } | ||||
for (int j = 0; j < m_meshes[i]->m_vert.Count(); j++) | |||||
for (int j = 0; j < m_meshes[i].m1->m_vert.Count(); j++) | |||||
{ | { | ||||
VertexData &v = m_meshes[i]->m_vert[m_meshes[i]->m_indices[j]]; | |||||
VertexData &v = m_meshes[i].m1->m_vert[m_meshes[i].m1->m_indices[j]]; | |||||
Debug::DrawLine((m_mat * mat4::translate(v.m_coord)).v3.xyz, | Debug::DrawLine((m_mat * mat4::translate(v.m_coord)).v3.xyz, | ||||
(m_mat * mat4::translate(v.m_coord)).v3.xyz + | (m_mat * mat4::translate(v.m_coord)).v3.xyz + | ||||
(m_mat * vec4(v.m_normal * 5.f, 0.f)).xyz, vec4(lol::abs(v.m_normal), 1.f)); | (m_mat * vec4(v.m_normal * 5.f, 0.f)).xyz, vec4(lol::abs(v.m_normal), 1.f)); | ||||
@@ -813,11 +869,16 @@ private: | |||||
vec2 m_hist_scale_speed; | vec2 m_hist_scale_speed; | ||||
vec2 m_screen_offset; | vec2 m_screen_offset; | ||||
//Mesh update timer | |||||
float m_build_timer; | |||||
float m_build_time; | |||||
//Mesh infos | //Mesh infos | ||||
vec2 m_render_max; | vec2 m_render_max; | ||||
int m_mesh_render; | |||||
int m_mesh_id; | int m_mesh_id; | ||||
float m_mesh_id1; | float m_mesh_id1; | ||||
Array<EasyMesh*> m_meshes; | |||||
Array<EasyMesh*, EasyMesh*> m_meshes; | |||||
Array<EasyMesh*> m_gizmos; | Array<EasyMesh*> m_gizmos; | ||||
//File data | //File data | ||||