Merge branch 'master' of github.com:supertuxkart/stk-code
This commit is contained in:
commit
2b6e1b8432
@ -21,17 +21,9 @@
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
uniform float time;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 Position;
|
||||
in vec2 Texcoord;
|
||||
layout(location = 0) in vec3 Position;
|
||||
layout(location = 3) in vec2 Texcoord;
|
||||
out vec2 uv;
|
||||
#else
|
||||
attribute vec3 Position;
|
||||
attribute vec2 Texcoord;
|
||||
varying vec2 uv;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -10,21 +10,24 @@ layout (std140) uniform MatrixesData
|
||||
|
||||
uniform vec3 windDir;
|
||||
|
||||
|
||||
in vec3 Origin;
|
||||
in vec3 Orientation;
|
||||
in vec3 Scale;
|
||||
|
||||
#if __VERSION__ >= 330
|
||||
layout(location = 0) in vec3 Position;
|
||||
layout(location = 1) in vec3 Normal;
|
||||
layout(location = 2) in vec4 Color;
|
||||
layout(location = 3) in vec2 Texcoord;
|
||||
|
||||
layout(location = 7) in vec3 Origin;
|
||||
layout(location = 8) in vec3 Orientation;
|
||||
layout(location = 9) in vec3 Scale;
|
||||
#else
|
||||
in vec3 Position;
|
||||
in vec3 Normal;
|
||||
in vec4 Color;
|
||||
in vec2 Texcoord;
|
||||
|
||||
in vec3 Origin;
|
||||
in vec3 Orientation;
|
||||
in vec3 Scale;
|
||||
#endif
|
||||
|
||||
out vec3 nor;
|
||||
|
@ -15,18 +15,22 @@ layout (std140) uniform MatrixesData
|
||||
};
|
||||
#endif
|
||||
|
||||
in vec3 Origin;
|
||||
in vec3 Orientation;
|
||||
in vec3 Scale;
|
||||
|
||||
#if __VERSION__ >= 330
|
||||
layout(location = 0) in vec3 Position;
|
||||
layout(location = 1) in vec3 Normal;
|
||||
layout(location = 3) in vec2 Texcoord;
|
||||
|
||||
layout(location = 7) in vec3 Origin;
|
||||
layout(location = 8) in vec3 Orientation;
|
||||
layout(location = 9) in vec3 Scale;
|
||||
#else
|
||||
in vec3 Position;
|
||||
in vec3 Normal;
|
||||
in vec2 Texcoord;
|
||||
|
||||
in vec3 Origin;
|
||||
in vec3 Orientation;
|
||||
in vec3 Scale;
|
||||
#endif
|
||||
|
||||
out vec3 nor;
|
||||
|
@ -7,12 +7,21 @@ layout (std140) uniform MatrixesData
|
||||
mat4 ShadowViewProjMatrixes[4];
|
||||
};
|
||||
|
||||
#if __VERSION__ >= 330
|
||||
layout(location = 0) in vec3 Position;
|
||||
layout(location = 3) in vec2 Texcoord;
|
||||
|
||||
layout(location = 7) in vec3 Origin;
|
||||
layout(location = 8) in vec3 Orientation;
|
||||
layout(location = 9) in vec3 Scale;
|
||||
#else
|
||||
in vec3 Position;
|
||||
in vec2 Texcoord;
|
||||
|
||||
in vec3 Origin;
|
||||
in vec3 Orientation;
|
||||
in vec3 Scale;
|
||||
|
||||
layout(location = 0) in vec3 Position;
|
||||
layout(location = 3) in vec2 Texcoord;
|
||||
#endif
|
||||
|
||||
#ifdef VSLayer
|
||||
out vec2 uv;
|
||||
|
@ -154,6 +154,9 @@ GLint LoadProgram(Types ... args)
|
||||
glBindAttribLocation(ProgramID, 4, "SecondTexcoord");
|
||||
glBindAttribLocation(ProgramID, 5, "Tangent");
|
||||
glBindAttribLocation(ProgramID, 6, "Bitangent");
|
||||
glBindAttribLocation(ProgramID, 7, "Origin");
|
||||
glBindAttribLocation(ProgramID, 8, "Orientation");
|
||||
glBindAttribLocation(ProgramID, 9, "Scale");
|
||||
}
|
||||
glLinkProgram(ProgramID);
|
||||
|
||||
|
@ -572,12 +572,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint InstancedObjectPass1Shader::Program;
|
||||
GLuint InstancedObjectPass1Shader::attrib_position;
|
||||
GLuint InstancedObjectPass1Shader::attrib_normal;
|
||||
GLuint InstancedObjectPass1Shader::attrib_texcoord;
|
||||
GLuint InstancedObjectPass1Shader::attrib_orientation;
|
||||
GLuint InstancedObjectPass1Shader::attrib_origin;
|
||||
GLuint InstancedObjectPass1Shader::attrib_scale;
|
||||
GLuint InstancedObjectPass1Shader::uniform_tex;
|
||||
|
||||
void InstancedObjectPass1Shader::init()
|
||||
@ -587,12 +581,6 @@ namespace MeshShader
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass1.frag").c_str());
|
||||
attrib_origin = glGetAttribLocation(Program, "Origin");
|
||||
attrib_orientation = glGetAttribLocation(Program, "Orientation");
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_scale = glGetAttribLocation(Program, "Scale");
|
||||
attrib_normal = glGetAttribLocation(Program, "Normal");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
if (!UserConfigParams::m_ubo_disabled)
|
||||
{
|
||||
@ -609,12 +597,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint InstancedObjectRefPass1Shader::Program;
|
||||
GLuint InstancedObjectRefPass1Shader::attrib_position;
|
||||
GLuint InstancedObjectRefPass1Shader::attrib_normal;
|
||||
GLuint InstancedObjectRefPass1Shader::attrib_texcoord;
|
||||
GLuint InstancedObjectRefPass1Shader::attrib_orientation;
|
||||
GLuint InstancedObjectRefPass1Shader::attrib_origin;
|
||||
GLuint InstancedObjectRefPass1Shader::attrib_scale;
|
||||
GLuint InstancedObjectRefPass1Shader::uniform_tex;
|
||||
|
||||
void InstancedObjectRefPass1Shader::init()
|
||||
@ -624,12 +606,6 @@ namespace MeshShader
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str());
|
||||
attrib_origin = glGetAttribLocation(Program, "Origin");
|
||||
attrib_orientation = glGetAttribLocation(Program, "Orientation");
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_scale = glGetAttribLocation(Program, "Scale");
|
||||
attrib_normal = glGetAttribLocation(Program, "Normal");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
if (!UserConfigParams::m_ubo_disabled)
|
||||
{
|
||||
@ -646,13 +622,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint InstancedGrassPass1Shader::Program;
|
||||
GLuint InstancedGrassPass1Shader::attrib_position;
|
||||
GLuint InstancedGrassPass1Shader::attrib_normal;
|
||||
GLuint InstancedGrassPass1Shader::attrib_origin;
|
||||
GLuint InstancedGrassPass1Shader::attrib_orientation;
|
||||
GLuint InstancedGrassPass1Shader::attrib_scale;
|
||||
GLuint InstancedGrassPass1Shader::attrib_texcoord;
|
||||
GLuint InstancedGrassPass1Shader::attrib_color;
|
||||
GLuint InstancedGrassPass1Shader::uniform_windDir;
|
||||
GLuint InstancedGrassPass1Shader::uniform_tex;
|
||||
|
||||
@ -663,13 +632,6 @@ namespace MeshShader
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_grass.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str());
|
||||
attrib_origin = glGetAttribLocation(Program, "Origin");
|
||||
attrib_orientation = glGetAttribLocation(Program, "Orientation");
|
||||
attrib_scale = glGetAttribLocation(Program, "Scale");
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_normal = glGetAttribLocation(Program, "Normal");
|
||||
attrib_color = glGetAttribLocation(Program, "Color");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
uniform_windDir = glGetUniformLocation(Program, "windDir");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
if (!UserConfigParams::m_ubo_disabled)
|
||||
@ -734,11 +696,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint InstancedObjectPass2Shader::Program;
|
||||
GLuint InstancedObjectPass2Shader::attrib_position;
|
||||
GLuint InstancedObjectPass2Shader::attrib_texcoord;
|
||||
GLuint InstancedObjectPass2Shader::attrib_origin;
|
||||
GLuint InstancedObjectPass2Shader::attrib_orientation;
|
||||
GLuint InstancedObjectPass2Shader::attrib_scale;
|
||||
GLuint InstancedObjectPass2Shader::uniform_VP;
|
||||
GLuint InstancedObjectPass2Shader::uniform_TM;
|
||||
GLuint InstancedObjectPass2Shader::uniform_ambient;
|
||||
@ -751,11 +708,6 @@ namespace MeshShader
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass2.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
attrib_origin = glGetAttribLocation(Program, "Origin");
|
||||
attrib_orientation = glGetAttribLocation(Program, "Orientation");
|
||||
attrib_scale = glGetAttribLocation(Program, "Scale");
|
||||
uniform_VP = glGetUniformLocation(Program, "ViewProjectionMatrix");
|
||||
uniform_TM = glGetUniformLocation(Program, "TextureMatrix");
|
||||
GLuint uniform_Albedo = glGetUniformLocation(Program, "Albedo");
|
||||
@ -790,11 +742,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint InstancedObjectRefPass2Shader::Program;
|
||||
GLuint InstancedObjectRefPass2Shader::attrib_position;
|
||||
GLuint InstancedObjectRefPass2Shader::attrib_texcoord;
|
||||
GLuint InstancedObjectRefPass2Shader::attrib_origin;
|
||||
GLuint InstancedObjectRefPass2Shader::attrib_orientation;
|
||||
GLuint InstancedObjectRefPass2Shader::attrib_scale;
|
||||
GLuint InstancedObjectRefPass2Shader::uniform_VP;
|
||||
GLuint InstancedObjectRefPass2Shader::uniform_TM;
|
||||
GLuint InstancedObjectRefPass2Shader::uniform_ambient;
|
||||
@ -807,11 +754,6 @@ namespace MeshShader
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass2.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
attrib_origin = glGetAttribLocation(Program, "Origin");
|
||||
attrib_orientation = glGetAttribLocation(Program, "Orientation");
|
||||
attrib_scale = glGetAttribLocation(Program, "Scale");
|
||||
uniform_VP = glGetUniformLocation(Program, "ViewProjectionMatrix");
|
||||
uniform_TM = glGetUniformLocation(Program, "TextureMatrix");
|
||||
GLuint uniform_Albedo = glGetUniformLocation(Program, "Albedo");
|
||||
@ -1086,13 +1028,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint InstancedGrassPass2Shader::Program;
|
||||
GLuint InstancedGrassPass2Shader::attrib_position;
|
||||
GLuint InstancedGrassPass2Shader::attrib_texcoord;
|
||||
GLuint InstancedGrassPass2Shader::attrib_color;
|
||||
GLuint InstancedGrassPass2Shader::attrib_normal;
|
||||
GLuint InstancedGrassPass2Shader::attrib_origin;
|
||||
GLuint InstancedGrassPass2Shader::attrib_orientation;
|
||||
GLuint InstancedGrassPass2Shader::attrib_scale;
|
||||
GLuint InstancedGrassPass2Shader::uniform_VP;
|
||||
GLuint InstancedGrassPass2Shader::uniform_ambient;
|
||||
GLuint InstancedGrassPass2Shader::uniform_windDir;
|
||||
@ -1109,13 +1044,6 @@ namespace MeshShader
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_grass.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/grass_pass2.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
attrib_color = glGetAttribLocation(Program, "Color");
|
||||
attrib_normal = glGetAttribLocation(Program, "Normal");
|
||||
attrib_origin = glGetAttribLocation(Program, "Origin");
|
||||
attrib_orientation = glGetAttribLocation(Program, "Orientation");
|
||||
attrib_scale = glGetAttribLocation(Program, "Scale");
|
||||
uniform_VP = glGetUniformLocation(Program, "ViewProjectionMatrix");
|
||||
GLuint uniform_Albedo = glGetUniformLocation(Program, "Albedo");
|
||||
GLuint uniform_DiffuseMap = glGetUniformLocation(Program, "DiffuseMap");
|
||||
@ -1201,9 +1129,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint SplattingShader::Program;
|
||||
GLuint SplattingShader::attrib_position;
|
||||
GLuint SplattingShader::attrib_texcoord;
|
||||
GLuint SplattingShader::attrib_second_texcoord;
|
||||
GLuint SplattingShader::uniform_MM;
|
||||
GLuint SplattingShader::uniform_ambient;
|
||||
GLuint SplattingShader::TU_tex_layout;
|
||||
@ -1253,8 +1178,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint BubbleShader::Program;
|
||||
GLuint BubbleShader::attrib_position;
|
||||
GLuint BubbleShader::attrib_texcoord;
|
||||
GLuint BubbleShader::uniform_MVP;
|
||||
GLuint BubbleShader::uniform_tex;
|
||||
GLuint BubbleShader::uniform_time;
|
||||
@ -1265,8 +1188,6 @@ namespace MeshShader
|
||||
Program = LoadProgram(
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/bubble.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/bubble.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
uniform_MVP = glGetUniformLocation(Program, "ModelViewProjectionMatrix");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
uniform_time = glGetUniformLocation(Program, "time");
|
||||
@ -1281,9 +1202,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint TransparentShader::Program;
|
||||
GLuint TransparentShader::attrib_position;
|
||||
GLuint TransparentShader::attrib_texcoord;
|
||||
GLuint TransparentShader::attrib_color;
|
||||
GLuint TransparentShader::uniform_MVP;
|
||||
GLuint TransparentShader::uniform_TM;
|
||||
GLuint TransparentShader::uniform_tex;
|
||||
@ -1293,9 +1211,6 @@ namespace MeshShader
|
||||
Program = LoadProgram(
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/transparent.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
attrib_color = glGetAttribLocation(Program, "Color");
|
||||
uniform_MVP = glGetUniformLocation(Program, "ModelMatrix");
|
||||
uniform_TM = glGetUniformLocation(Program, "TextureMatrix");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
@ -1314,9 +1229,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint TransparentFogShader::Program;
|
||||
GLuint TransparentFogShader::attrib_position;
|
||||
GLuint TransparentFogShader::attrib_texcoord;
|
||||
GLuint TransparentFogShader::attrib_color;
|
||||
GLuint TransparentFogShader::uniform_MVP;
|
||||
GLuint TransparentFogShader::uniform_TM;
|
||||
GLuint TransparentFogShader::uniform_tex;
|
||||
@ -1332,9 +1244,6 @@ namespace MeshShader
|
||||
Program = LoadProgram(
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/transparentfog.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
attrib_color = glGetAttribLocation(Program, "Color");
|
||||
uniform_MVP = glGetUniformLocation(Program, "ModelMatrix");
|
||||
uniform_TM = glGetUniformLocation(Program, "TextureMatrix");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
@ -1401,7 +1310,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint ColorizeShader::Program;
|
||||
GLuint ColorizeShader::attrib_position;
|
||||
GLuint ColorizeShader::uniform_MM;
|
||||
GLuint ColorizeShader::uniform_col;
|
||||
|
||||
@ -1410,7 +1318,6 @@ namespace MeshShader
|
||||
Program = LoadProgram(
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/colorize.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
uniform_MM = glGetUniformLocation(Program, "ModelMatrix");
|
||||
uniform_col = glGetUniformLocation(Program, "col");
|
||||
if (!UserConfigParams::m_ubo_disabled)
|
||||
@ -1429,17 +1336,13 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint ShadowShader::Program;
|
||||
GLuint ShadowShader::attrib_position;
|
||||
GLuint ShadowShader::uniform_MM;
|
||||
|
||||
void ShadowShader::init()
|
||||
{
|
||||
// Geometry shader needed
|
||||
if (irr_driver->getGLSLVersion() < 150)
|
||||
{
|
||||
attrib_position = -1;
|
||||
return;
|
||||
}
|
||||
if (irr_driver->hasVSLayerExtension())
|
||||
{
|
||||
Program = LoadProgram(
|
||||
@ -1453,7 +1356,6 @@ namespace MeshShader
|
||||
GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/white.frag").c_str());
|
||||
}
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
uniform_MM = glGetUniformLocation(Program, "ModelMatrix");
|
||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||
@ -1466,9 +1368,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint RSMShader::Program;
|
||||
GLuint RSMShader::attrib_position;
|
||||
GLuint RSMShader::attrib_texcoord;
|
||||
GLuint RSMShader::attrib_normal;
|
||||
GLuint RSMShader::uniform_MM;
|
||||
GLuint RSMShader::uniform_tex;
|
||||
GLuint RSMShader::uniform_RSMMatrix;
|
||||
@ -1480,10 +1379,7 @@ namespace MeshShader
|
||||
Program = LoadProgram(
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/rsm.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/rsm.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
uniform_MM = glGetUniformLocation(Program, "ModelMatrix");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
attrib_normal = glGetAttribLocation(Program, "Normal");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
uniform_RSMMatrix = glGetUniformLocation(Program, "RSMMatrix");
|
||||
}
|
||||
@ -1496,19 +1392,12 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint InstancedShadowShader::Program;
|
||||
GLuint InstancedShadowShader::attrib_position;
|
||||
GLuint InstancedShadowShader::attrib_origin;
|
||||
GLuint InstancedShadowShader::attrib_orientation;
|
||||
GLuint InstancedShadowShader::attrib_scale;
|
||||
|
||||
void InstancedShadowShader::init()
|
||||
{
|
||||
// Geometry shader needed
|
||||
if (irr_driver->getGLSLVersion() < 150)
|
||||
{
|
||||
attrib_position = -1;
|
||||
return;
|
||||
}
|
||||
if (irr_driver->hasVSLayerExtension())
|
||||
{
|
||||
Program = LoadProgram(
|
||||
@ -1524,10 +1413,6 @@ namespace MeshShader
|
||||
GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/white.frag").c_str());
|
||||
}
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_origin = glGetAttribLocation(Program, "Origin");
|
||||
attrib_orientation = glGetAttribLocation(Program, "Orientation");
|
||||
attrib_scale = glGetAttribLocation(Program, "Scale");
|
||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||
}
|
||||
@ -1537,8 +1422,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint RefShadowShader::Program;
|
||||
GLuint RefShadowShader::attrib_position;
|
||||
GLuint RefShadowShader::attrib_texcoord;
|
||||
GLuint RefShadowShader::uniform_MM;
|
||||
GLuint RefShadowShader::uniform_tex;
|
||||
|
||||
@ -1546,11 +1429,7 @@ namespace MeshShader
|
||||
{
|
||||
// Geometry shader needed
|
||||
if (irr_driver->getGLSLVersion() < 150)
|
||||
{
|
||||
attrib_position = -1;
|
||||
attrib_texcoord = -1;
|
||||
return;
|
||||
}
|
||||
if (irr_driver->hasVSLayerExtension())
|
||||
{
|
||||
Program = LoadProgram(
|
||||
@ -1564,8 +1443,6 @@ namespace MeshShader
|
||||
GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str());
|
||||
}
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
uniform_MM = glGetUniformLocation(Program, "ModelMatrix");
|
||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||
@ -1579,22 +1456,13 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint InstancedRefShadowShader::Program;
|
||||
GLuint InstancedRefShadowShader::attrib_position;
|
||||
GLuint InstancedRefShadowShader::attrib_texcoord;
|
||||
GLuint InstancedRefShadowShader::attrib_origin;
|
||||
GLuint InstancedRefShadowShader::attrib_orientation;
|
||||
GLuint InstancedRefShadowShader::attrib_scale;
|
||||
GLuint InstancedRefShadowShader::uniform_tex;
|
||||
|
||||
void InstancedRefShadowShader::init()
|
||||
{
|
||||
// Geometry shader needed
|
||||
if (irr_driver->getGLSLVersion() < 150)
|
||||
{
|
||||
attrib_position = -1;
|
||||
attrib_texcoord = -1;
|
||||
return;
|
||||
}
|
||||
if (irr_driver->hasVSLayerExtension())
|
||||
{
|
||||
Program = LoadProgram(
|
||||
@ -1610,11 +1478,6 @@ namespace MeshShader
|
||||
GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str());
|
||||
}
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
attrib_origin = glGetAttribLocation(Program, "Origin");
|
||||
attrib_orientation = glGetAttribLocation(Program, "Orientation");
|
||||
attrib_scale = glGetAttribLocation(Program, "Scale");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||
@ -1626,9 +1489,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint GrassShadowShader::Program;
|
||||
GLuint GrassShadowShader::attrib_position;
|
||||
GLuint GrassShadowShader::attrib_texcoord;
|
||||
GLuint GrassShadowShader::attrib_color;
|
||||
GLuint GrassShadowShader::uniform_MVP;
|
||||
GLuint GrassShadowShader::uniform_tex;
|
||||
GLuint GrassShadowShader::uniform_windDir;
|
||||
@ -1639,11 +1499,8 @@ namespace MeshShader
|
||||
Program = LoadProgram(
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/grass_pass.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
uniform_MVP = glGetUniformLocation(Program, "ModelViewProjectionMatrix");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
attrib_color = glGetAttribLocation(Program, "Color");
|
||||
uniform_windDir = glGetUniformLocation(Program, "windDir");
|
||||
GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData");
|
||||
glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0);
|
||||
@ -1657,7 +1514,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint DisplaceMaskShader::Program;
|
||||
GLuint DisplaceMaskShader::attrib_position;
|
||||
GLuint DisplaceMaskShader::uniform_MVP;
|
||||
|
||||
void DisplaceMaskShader::init()
|
||||
@ -1665,7 +1521,6 @@ namespace MeshShader
|
||||
Program = LoadProgram(
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/displace.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/white.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
uniform_MVP = glGetUniformLocation(Program, "ModelMatrix");
|
||||
if (!UserConfigParams::m_ubo_disabled)
|
||||
{
|
||||
@ -1680,9 +1535,6 @@ namespace MeshShader
|
||||
}
|
||||
|
||||
GLuint DisplaceShader::Program;
|
||||
GLuint DisplaceShader::attrib_position;
|
||||
GLuint DisplaceShader::attrib_texcoord;
|
||||
GLuint DisplaceShader::attrib_second_texcoord;
|
||||
GLuint DisplaceShader::uniform_MVP;
|
||||
GLuint DisplaceShader::uniform_displacement_tex;
|
||||
GLuint DisplaceShader::uniform_mask_tex;
|
||||
@ -1695,9 +1547,6 @@ namespace MeshShader
|
||||
Program = LoadProgram(
|
||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/displace.vert").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/displace.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
attrib_second_texcoord = glGetAttribLocation(Program, "SecondTexcoord");
|
||||
uniform_MVP = glGetUniformLocation(Program, "ModelMatrix");
|
||||
uniform_displacement_tex = glGetUniformLocation(Program, "displacement_tex");
|
||||
uniform_color_tex = glGetUniformLocation(Program, "color_tex");
|
||||
|
@ -93,7 +93,6 @@ class InstancedObjectPass1Shader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_normal, attrib_texcoord, attrib_origin, attrib_orientation, attrib_scale;
|
||||
static GLuint uniform_tex;
|
||||
|
||||
static void init();
|
||||
@ -104,7 +103,6 @@ class InstancedObjectRefPass1Shader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_normal, attrib_texcoord, attrib_origin, attrib_orientation, attrib_scale;
|
||||
static GLuint uniform_tex;
|
||||
|
||||
static void init();
|
||||
@ -115,7 +113,6 @@ class InstancedGrassPass1Shader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_normal, attrib_origin, attrib_orientation, attrib_scale, attrib_color, attrib_texcoord;
|
||||
static GLuint uniform_windDir, uniform_tex;
|
||||
|
||||
static void init();
|
||||
@ -137,7 +134,6 @@ class InstancedObjectPass2Shader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_origin, attrib_orientation, attrib_scale;
|
||||
static GLuint uniform_VP, uniform_TM, uniform_ambient;
|
||||
static GLuint TU_Albedo;
|
||||
|
||||
@ -149,7 +145,6 @@ class InstancedObjectRefPass2Shader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_origin, attrib_orientation, attrib_scale;
|
||||
static GLuint uniform_VP, uniform_TM, uniform_ambient;
|
||||
static GLuint TU_Albedo;
|
||||
|
||||
@ -226,7 +221,6 @@ class InstancedGrassPass2Shader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_normal, attrib_color, attrib_origin, attrib_orientation, attrib_scale;
|
||||
static GLuint uniform_VP, uniform_TM, uniform_IVM, uniform_ambient, uniform_windDir, uniform_invproj, uniform_SunDir;
|
||||
static GLuint TU_Albedo, TU_dtex;
|
||||
|
||||
@ -249,7 +243,6 @@ class SplattingShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_second_texcoord;
|
||||
static GLuint uniform_MM, uniform_ambient;
|
||||
static GLuint TU_tex_layout, TU_tex_detail0, TU_tex_detail1, TU_tex_detail2, TU_tex_detail3;
|
||||
|
||||
@ -261,7 +254,6 @@ class BubbleShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord;
|
||||
static GLuint uniform_MVP, uniform_tex, uniform_time, uniform_transparency;
|
||||
|
||||
static void init();
|
||||
@ -272,7 +264,6 @@ class TransparentShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_color;
|
||||
static GLuint uniform_MVP, uniform_TM, uniform_tex;
|
||||
|
||||
static void init();
|
||||
@ -283,7 +274,6 @@ class TransparentFogShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_color;
|
||||
static GLuint uniform_MVP, uniform_TM, uniform_tex, uniform_fogmax, uniform_startH, uniform_endH, uniform_start, uniform_end, uniform_col;
|
||||
|
||||
static void init();
|
||||
@ -306,7 +296,6 @@ class ColorizeShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position;
|
||||
static GLuint uniform_MM, uniform_col;
|
||||
|
||||
static void init();
|
||||
@ -317,7 +306,6 @@ class ShadowShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position;
|
||||
static GLuint uniform_MM, uniform_ViewProjectionMatrixesUBO;
|
||||
|
||||
static void init();
|
||||
@ -328,7 +316,6 @@ class RSMShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_normal;
|
||||
static GLuint uniform_MM, uniform_tex, uniform_RSMMatrix;
|
||||
|
||||
static void init();
|
||||
@ -339,7 +326,6 @@ class InstancedShadowShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_origin, attrib_orientation, attrib_scale;
|
||||
|
||||
static void init();
|
||||
static void setUniforms();
|
||||
@ -349,7 +335,6 @@ class RefShadowShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord;
|
||||
static GLuint uniform_MM, uniform_tex;
|
||||
|
||||
static void init();
|
||||
@ -360,7 +345,6 @@ class InstancedRefShadowShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_origin, attrib_orientation, attrib_scale;
|
||||
static GLuint uniform_tex;
|
||||
|
||||
static void init();
|
||||
@ -371,7 +355,6 @@ class GrassShadowShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_color;
|
||||
static GLuint uniform_MVP, uniform_tex, uniform_windDir;
|
||||
|
||||
static void init();
|
||||
@ -382,7 +365,6 @@ class DisplaceMaskShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position;
|
||||
static GLuint uniform_MVP;
|
||||
|
||||
static void init();
|
||||
@ -393,7 +375,6 @@ class DisplaceShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_second_texcoord;
|
||||
static GLuint uniform_MVP, uniform_displacement_tex, uniform_mask_tex, uniform_color_tex, uniform_dir, uniform_dir2;
|
||||
|
||||
static void init();
|
||||
|
@ -27,8 +27,6 @@ void STKInstancedSceneNode::cleanGL()
|
||||
continue;
|
||||
if (mesh.vao)
|
||||
glDeleteVertexArrays(1, &(mesh.vao));
|
||||
if (mesh.vao_second_pass)
|
||||
glDeleteVertexArrays(1, &(mesh.vao_second_pass));
|
||||
if (mesh.vao_shadow_pass)
|
||||
glDeleteVertexArrays(1, &(mesh.vao_shadow_pass));
|
||||
glDeleteBuffers(1, &(mesh.vertex_buffer));
|
||||
@ -56,83 +54,34 @@ void STKInstancedSceneNode::createGLMeshes()
|
||||
isMaterialInitialized = false;
|
||||
}
|
||||
|
||||
template<typename T, unsigned divisor>
|
||||
void setInstanceAttribPointer()
|
||||
{
|
||||
glEnableVertexAttribArray(T::attrib_origin);
|
||||
glVertexAttribPointer(T::attrib_origin, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), 0);
|
||||
glVertexAttribDivisor(T::attrib_origin, divisor);
|
||||
glEnableVertexAttribArray(T::attrib_orientation);
|
||||
glVertexAttribPointer(T::attrib_orientation, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), (GLvoid*)(3 * sizeof(float)));
|
||||
glVertexAttribDivisor(T::attrib_orientation, divisor);
|
||||
glEnableVertexAttribArray(T::attrib_scale);
|
||||
glVertexAttribPointer(T::attrib_scale, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), (GLvoid*)(6 * sizeof(float)));
|
||||
glVertexAttribDivisor(T::attrib_scale, divisor);
|
||||
}
|
||||
|
||||
void STKInstancedSceneNode::initinstancedvaostate(GLMesh &mesh, GeometricMaterial GeoMat, ShadedMaterial ShadedMat)
|
||||
{
|
||||
switch (GeoMat)
|
||||
{
|
||||
case FPSM_DEFAULT:
|
||||
mesh.vao_first_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, getVTXTYPEFromStride(mesh.Stride));
|
||||
glGenBuffers(1, &instances_vbo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, instances_vbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, instance_pos.size() * sizeof(float), instance_pos.data(), GL_STATIC_DRAW);
|
||||
setInstanceAttribPointer<MeshShader::InstancedObjectPass1Shader, 1>();
|
||||
if (irr_driver->getGLSLVersion() >= 150)
|
||||
{
|
||||
mesh.vao_shadow_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, getVTXTYPEFromStride(mesh.Stride));
|
||||
glBindBuffer(GL_ARRAY_BUFFER, instances_vbo);
|
||||
setInstanceAttribPointer<MeshShader::InstancedShadowShader, 4>();
|
||||
}
|
||||
break;
|
||||
case FPSM_ALPHA_REF_TEXTURE:
|
||||
mesh.vao_first_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, getVTXTYPEFromStride(mesh.Stride));
|
||||
glGenBuffers(1, &instances_vbo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, instances_vbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, instance_pos.size() * sizeof(float), instance_pos.data(), GL_STATIC_DRAW);
|
||||
setInstanceAttribPointer<MeshShader::InstancedObjectRefPass1Shader, 1>();
|
||||
if (irr_driver->getGLSLVersion() >= 150)
|
||||
{
|
||||
mesh.vao_shadow_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, getVTXTYPEFromStride(mesh.Stride));
|
||||
glBindBuffer(GL_ARRAY_BUFFER, instances_vbo);
|
||||
setInstanceAttribPointer<MeshShader::InstancedRefShadowShader, 4>();
|
||||
}
|
||||
break;
|
||||
case FPSM_GRASS:
|
||||
mesh.vao_first_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, getVTXTYPEFromStride(mesh.Stride));
|
||||
glGenBuffers(1, &instances_vbo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, instances_vbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, instance_pos.size() * sizeof(float), instance_pos.data(), GL_STATIC_DRAW);
|
||||
setInstanceAttribPointer<MeshShader::InstancedGrassPass1Shader, 1>();
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
mesh.vao = createVAO(mesh.vertex_buffer, mesh.index_buffer, getVTXTYPEFromStride(mesh.Stride));
|
||||
glGenBuffers(1, &instances_vbo);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, instances_vbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, instance_pos.size() * sizeof(float), instance_pos.data(), GL_STATIC_DRAW);
|
||||
|
||||
glEnableVertexAttribArray(7);
|
||||
glVertexAttribPointer(7, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), 0);
|
||||
glVertexAttribDivisor(7, 1);
|
||||
glEnableVertexAttribArray(8);
|
||||
glVertexAttribPointer(8, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), (GLvoid*)(3 * sizeof(float)));
|
||||
glVertexAttribDivisor(8, 1);
|
||||
glEnableVertexAttribArray(9);
|
||||
glVertexAttribPointer(9, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), (GLvoid*)(6 * sizeof(float)));
|
||||
glVertexAttribDivisor(9, 1);
|
||||
|
||||
|
||||
switch (ShadedMat)
|
||||
{
|
||||
case SM_DEFAULT:
|
||||
mesh.vao_second_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, getVTXTYPEFromStride(mesh.Stride));
|
||||
glBindBuffer(GL_ARRAY_BUFFER, instances_vbo);
|
||||
setInstanceAttribPointer<MeshShader::InstancedObjectPass2Shader, 1>();
|
||||
break;
|
||||
case SM_ALPHA_REF_TEXTURE:
|
||||
mesh.vao_second_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, getVTXTYPEFromStride(mesh.Stride));
|
||||
glBindBuffer(GL_ARRAY_BUFFER, instances_vbo);
|
||||
setInstanceAttribPointer<MeshShader::InstancedObjectRefPass2Shader, 1>();
|
||||
break;
|
||||
case SM_GRASS:
|
||||
mesh.vao_second_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, getVTXTYPEFromStride(mesh.Stride));
|
||||
glBindBuffer(GL_ARRAY_BUFFER, instances_vbo);
|
||||
setInstanceAttribPointer<MeshShader::InstancedGrassPass2Shader, 1>();
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
mesh.vao_shadow_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer, getVTXTYPEFromStride(mesh.Stride));
|
||||
glBindBuffer(GL_ARRAY_BUFFER, instances_vbo);
|
||||
glEnableVertexAttribArray(7);
|
||||
glVertexAttribPointer(7, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), 0);
|
||||
glVertexAttribDivisor(7, 4);
|
||||
glEnableVertexAttribArray(8);
|
||||
glVertexAttribPointer(8, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), (GLvoid*)(3 * sizeof(float)));
|
||||
glVertexAttribDivisor(8, 4);
|
||||
glEnableVertexAttribArray(9);
|
||||
glVertexAttribPointer(9, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(float), (GLvoid*)(6 * sizeof(float)));
|
||||
glVertexAttribDivisor(9, 4);
|
||||
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
@ -152,10 +101,8 @@ void STKInstancedSceneNode::setFirstTimeMaterial()
|
||||
GeometricMaterial GeometricType = MaterialTypeToGeometricMaterial(type);
|
||||
ShadedMaterial ShadedType = MaterialTypeToShadedMaterial(type, mesh.textures);
|
||||
initinstancedvaostate(mesh, GeometricType, ShadedType);
|
||||
if (mesh.vao_first_pass)
|
||||
GeometricMesh[GeometricType].push_back(&mesh);
|
||||
if (mesh.vao_second_pass)
|
||||
ShadedMesh[ShadedType].push_back(&mesh);
|
||||
GeometricMesh[GeometricType].push_back(&mesh);
|
||||
ShadedMesh[ShadedType].push_back(&mesh);
|
||||
}
|
||||
isMaterialInitialized = true;
|
||||
}
|
||||
@ -193,7 +140,7 @@ static void drawFSPMDefault(GLMesh &mesh, size_t instance_count)
|
||||
}
|
||||
MeshShader::InstancedObjectPass1Shader::setUniforms(0);
|
||||
|
||||
glBindVertexArray(mesh.vao_first_pass);
|
||||
glBindVertexArray(mesh.vao);
|
||||
glDrawElementsInstanced(ptype, count, itype, 0, instance_count);
|
||||
|
||||
if (!mesh.textures[0])
|
||||
@ -212,7 +159,6 @@ static void drawShadowDefault(GLMesh &mesh, size_t instance_count)
|
||||
|
||||
MeshShader::InstancedShadowShader::setUniforms();
|
||||
|
||||
assert(mesh.vao_shadow_pass);
|
||||
glBindVertexArray(mesh.vao_shadow_pass);
|
||||
glDrawElementsInstanced(ptype, count, itype, 0, 4 * instance_count);
|
||||
}
|
||||
@ -228,7 +174,7 @@ static void drawFSPMAlphaRefTexture(GLMesh &mesh, size_t instance_count)
|
||||
setTexture(0, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
||||
MeshShader::InstancedObjectRefPass1Shader::setUniforms(0);
|
||||
|
||||
glBindVertexArray(mesh.vao_first_pass);
|
||||
glBindVertexArray(mesh.vao);
|
||||
glDrawElementsInstanced(ptype, count, itype, 0, instance_count);
|
||||
}
|
||||
|
||||
@ -243,9 +189,8 @@ static void drawShadowAlphaRefTexture(GLMesh &mesh, size_t instance_count)
|
||||
setTexture(0, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
||||
MeshShader::InstancedRefShadowShader::setUniforms(0);
|
||||
|
||||
assert(mesh.vao_shadow_pass);
|
||||
glBindVertexArray(mesh.vao_shadow_pass);
|
||||
glDrawElementsInstanced(ptype, count, itype, 0, instance_count);
|
||||
glDrawElementsInstanced(ptype, count, itype, 0, 4 * instance_count);
|
||||
}
|
||||
|
||||
static void drawFSPMGrass(GLMesh &mesh, const core::vector3df &windDir, size_t instance_count)
|
||||
@ -259,7 +204,7 @@ static void drawFSPMGrass(GLMesh &mesh, const core::vector3df &windDir, size_t i
|
||||
setTexture(0, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true);
|
||||
MeshShader::InstancedGrassPass1Shader::setUniforms(windDir, 0);
|
||||
|
||||
glBindVertexArray(mesh.vao_first_pass);
|
||||
glBindVertexArray(mesh.vao);
|
||||
glDrawElementsInstanced(ptype, count, itype, 0, instance_count);
|
||||
}
|
||||
|
||||
@ -284,7 +229,7 @@ static void drawSMDefault(GLMesh &mesh, const core::matrix4 &ModelViewProjection
|
||||
|
||||
MeshShader::InstancedObjectPass2Shader::setUniforms(ModelViewProjectionMatrix, core::matrix4::EM4CONST_IDENTITY);
|
||||
|
||||
glBindVertexArray(mesh.vao_second_pass);
|
||||
glBindVertexArray(mesh.vao);
|
||||
glDrawElementsInstanced(ptype, count, itype, 0, instance_count);
|
||||
}
|
||||
|
||||
@ -310,7 +255,7 @@ static void drawSMAlphaRefTexture(GLMesh &mesh, const core::matrix4 &ModelViewPr
|
||||
|
||||
MeshShader::InstancedObjectRefPass2Shader::setUniforms(ModelViewProjectionMatrix, core::matrix4::EM4CONST_IDENTITY);
|
||||
|
||||
glBindVertexArray(mesh.vao_second_pass);
|
||||
glBindVertexArray(mesh.vao);
|
||||
glDrawElementsInstanced(ptype, count, itype, 0, instance_count);
|
||||
}
|
||||
|
||||
@ -338,7 +283,7 @@ static void drawSMGrass(GLMesh &mesh, const core::matrix4 &ModelViewProjectionMa
|
||||
|
||||
MeshShader::InstancedGrassPass2Shader::setUniforms(ModelViewProjectionMatrix, irr_driver->getInvViewMatrix(), irr_driver->getInvProjMatrix(), windDir, cb->getPosition());
|
||||
|
||||
glBindVertexArray(mesh.vao_second_pass);
|
||||
glBindVertexArray(mesh.vao);
|
||||
glDrawElementsInstanced(ptype, count, itype, 0, instance_count);
|
||||
}
|
||||
|
||||
|
@ -43,12 +43,6 @@ enum TransparentMaterial
|
||||
|
||||
struct GLMesh {
|
||||
GLuint vao;
|
||||
GLuint vao_first_pass;
|
||||
GLuint vao_second_pass;
|
||||
GLuint vao_glow_pass;
|
||||
GLuint vao_displace_pass;
|
||||
GLuint vao_displace_mask_pass;
|
||||
GLuint vao_rsm_pass;
|
||||
GLuint vao_shadow_pass;
|
||||
GLuint vertex_buffer;
|
||||
GLuint index_buffer;
|
||||
|
@ -580,7 +580,7 @@ void PhysicalObject::hit(const Material *m, const Vec3 &normal)
|
||||
if(isSoccerBall() && m != NULL &&
|
||||
m->getCollisionReaction() == Material::PUSH_SOCCER_BALL)
|
||||
{
|
||||
m_body->applyCentralImpulse(normal * 1000.0f);
|
||||
m_body->applyCentralImpulse(normal * 100.0f);
|
||||
}
|
||||
} // hit
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user