Changed isSkined to IsSkinned and removed duplicated code in PickingPass
This commit is contained in:
@@ -20,7 +20,7 @@ public:
|
|||||||
const RawModel::Vertex* Vertices() const { return m_RawModel->Vertices(); }
|
const RawModel::Vertex* Vertices() const { return m_RawModel->Vertices(); }
|
||||||
unsigned int NumberOfVertices() const { return m_RawModel->NumVertices(); }
|
unsigned int NumberOfVertices() const { return m_RawModel->NumVertices(); }
|
||||||
const AABB& Box() const { return m_Box; }
|
const AABB& Box() const { return m_Box; }
|
||||||
bool isSkined() const { return m_RawModel->isSkined(); }
|
bool IsSkinned() const { return m_RawModel->IsSkinned(); }
|
||||||
GLuint VAO;
|
GLuint VAO;
|
||||||
GLuint ElementBuffer;
|
GLuint ElementBuffer;
|
||||||
RawModel* m_RawModel;
|
RawModel* m_RawModel;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ struct ModelJob : RenderJob
|
|||||||
::RawModel::MaterialBasic* matGroup = matProp.material;
|
::RawModel::MaterialBasic* matGroup = matProp.material;
|
||||||
switch(matProp.type){
|
switch(matProp.type){
|
||||||
case ::RawModel::MaterialType::Basic:
|
case ::RawModel::MaterialType::Basic:
|
||||||
if (Model->isSkined()) {
|
if (Model->IsSkinned()) {
|
||||||
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSkinnedProgram")->ResourceID;
|
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSkinnedProgram")->ResourceID;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -37,7 +37,7 @@ struct ModelJob : RenderJob
|
|||||||
break;
|
break;
|
||||||
case ::RawModel::MaterialType::SingleTextures:
|
case ::RawModel::MaterialType::SingleTextures:
|
||||||
{
|
{
|
||||||
if (Model->isSkined()) {
|
if (Model->IsSkinned()) {
|
||||||
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSkinnedProgram")->ResourceID;
|
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSkinnedProgram")->ResourceID;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -64,7 +64,7 @@ struct ModelJob : RenderJob
|
|||||||
break;
|
break;
|
||||||
case ::RawModel::MaterialType::SplatMapping:
|
case ::RawModel::MaterialType::SplatMapping:
|
||||||
{
|
{
|
||||||
if (Model->isSkined()) {
|
if (Model->IsSkinned()) {
|
||||||
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSplatMapSkinnedProgram")->ResourceID;
|
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSplatMapSkinnedProgram")->ResourceID;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool isSkined() const { return hasSkin; };
|
bool IsSkinned() const { return hasSkin; };
|
||||||
|
|
||||||
std::vector<MaterialProperties> m_Materials;
|
std::vector<MaterialProperties> m_Materials;
|
||||||
|
|
||||||
|
|||||||
@@ -320,7 +320,7 @@ void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>&
|
|||||||
case RawModel::MaterialType::Basic:
|
case RawModel::MaterialType::Basic:
|
||||||
case RawModel::MaterialType::SingleTextures:
|
case RawModel::MaterialType::SingleTextures:
|
||||||
{
|
{
|
||||||
if (explosionEffectJob->Model->isSkined()) {
|
if (explosionEffectJob->Model->IsSkinned()) {
|
||||||
m_ExplosionEffectSkinnedProgram->Bind();
|
m_ExplosionEffectSkinnedProgram->Bind();
|
||||||
GLERROR("Bind ExplosionEffectSkinned program");
|
GLERROR("Bind ExplosionEffectSkinned program");
|
||||||
//bind uniforms
|
//bind uniforms
|
||||||
@@ -346,7 +346,7 @@ void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>&
|
|||||||
}
|
}
|
||||||
case RawModel::MaterialType::SplatMapping:
|
case RawModel::MaterialType::SplatMapping:
|
||||||
{
|
{
|
||||||
if (explosionEffectJob->Model->isSkined()) {
|
if (explosionEffectJob->Model->IsSkinned()) {
|
||||||
m_ExplosionEffectSplatMapSkinnedProgram->Bind();
|
m_ExplosionEffectSplatMapSkinnedProgram->Bind();
|
||||||
GLERROR("Bind ExplosionEffectSplatMapSkinned program");
|
GLERROR("Bind ExplosionEffectSplatMapSkinned program");
|
||||||
//bind uniforms
|
//bind uniforms
|
||||||
@@ -392,7 +392,7 @@ void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>&
|
|||||||
case RawModel::MaterialType::Basic:
|
case RawModel::MaterialType::Basic:
|
||||||
case RawModel::MaterialType::SingleTextures:
|
case RawModel::MaterialType::SingleTextures:
|
||||||
{
|
{
|
||||||
if (modelJob->Model->isSkined()) {
|
if (modelJob->Model->IsSkinned()) {
|
||||||
m_ForwardPlusSkinnedProgram->Bind();
|
m_ForwardPlusSkinnedProgram->Bind();
|
||||||
GLERROR("Bind ForwardPlusSkinnedProgram");
|
GLERROR("Bind ForwardPlusSkinnedProgram");
|
||||||
//bind uniforms
|
//bind uniforms
|
||||||
@@ -419,7 +419,7 @@ void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>&
|
|||||||
}
|
}
|
||||||
case RawModel::MaterialType::SplatMapping:
|
case RawModel::MaterialType::SplatMapping:
|
||||||
{
|
{
|
||||||
if (modelJob->Model->isSkined()) {
|
if (modelJob->Model->IsSkinned()) {
|
||||||
m_ForwardPlusSplatMapSkinnedProgram->Bind();
|
m_ForwardPlusSplatMapSkinnedProgram->Bind();
|
||||||
GLERROR("Bind SplatMap program");
|
GLERROR("Bind SplatMap program");
|
||||||
//bind uniforms
|
//bind uniforms
|
||||||
@@ -468,7 +468,7 @@ void DrawFinalPass::DrawShieldToStencilBuffer(std::list<std::shared_ptr<RenderJo
|
|||||||
auto modelJob = std::dynamic_pointer_cast<ModelJob>(job);
|
auto modelJob = std::dynamic_pointer_cast<ModelJob>(job);
|
||||||
if (modelJob) {
|
if (modelJob) {
|
||||||
|
|
||||||
if(modelJob->Model->isSkined()) {
|
if(modelJob->Model->IsSkinned()) {
|
||||||
m_ShieldToStencilSkinnedProgram->Bind();
|
m_ShieldToStencilSkinnedProgram->Bind();
|
||||||
GLuint shaderHandle = m_ShieldToStencilSkinnedProgram->GetHandle();
|
GLuint shaderHandle = m_ShieldToStencilSkinnedProgram->GetHandle();
|
||||||
|
|
||||||
@@ -602,7 +602,7 @@ void DrawFinalPass::DrawToDepthBuffer(std::list<std::shared_ptr<RenderJob>>& job
|
|||||||
for (auto &job : jobs) {
|
for (auto &job : jobs) {
|
||||||
auto modelJob = std::dynamic_pointer_cast<ModelJob>(job);
|
auto modelJob = std::dynamic_pointer_cast<ModelJob>(job);
|
||||||
|
|
||||||
if(modelJob->Model->isSkined()) {
|
if(modelJob->Model->IsSkinned()) {
|
||||||
m_FillDepthBufferSkinnedProgram->Bind();
|
m_FillDepthBufferSkinnedProgram->Bind();
|
||||||
GLuint shaderHandle = m_FillDepthBufferSkinnedProgram->GetHandle();
|
GLuint shaderHandle = m_FillDepthBufferSkinnedProgram->GetHandle();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ Model::Model(std::string fileName)
|
|||||||
|
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
||||||
std::vector<int> structSizes;
|
std::vector<int> structSizes;
|
||||||
if (m_RawModel->isSkined()) {
|
if (m_RawModel->IsSkinned()) {
|
||||||
structSizes = { 3, 3, 3, 3, 2, 4, 4 };
|
structSizes = { 3, 3, 3, 3, 2, 4, 4 };
|
||||||
} else {
|
} else {
|
||||||
structSizes = { 3, 3, 3, 3, 2 };
|
structSizes = { 3, 3, 3, 3, 2 };
|
||||||
@@ -106,7 +106,7 @@ Model::Model(std::string fileName)
|
|||||||
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
||||||
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
||||||
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
||||||
if (m_RawModel->isSkined()) {
|
if (m_RawModel->IsSkinned()) {
|
||||||
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
||||||
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
glVertexAttribPointer(element, structSizes[element], GL_FLOAT, GL_FALSE, stride, (GLvoid*)(sizeof(GLfloat) * (offset += structSizes[element - 1]))); element++;
|
||||||
}
|
}
|
||||||
@@ -118,7 +118,7 @@ Model::Model(std::string fileName)
|
|||||||
glEnableVertexAttribArray(2);
|
glEnableVertexAttribArray(2);
|
||||||
glEnableVertexAttribArray(3);
|
glEnableVertexAttribArray(3);
|
||||||
glEnableVertexAttribArray(4);
|
glEnableVertexAttribArray(4);
|
||||||
if (m_RawModel->isSkined()) {
|
if (m_RawModel->IsSkinned()) {
|
||||||
glEnableVertexAttribArray(5);
|
glEnableVertexAttribArray(5);
|
||||||
glEnableVertexAttribArray(6);
|
glEnableVertexAttribArray(6);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,34 +69,32 @@ void PickingPass::Draw(RenderScene& scene)
|
|||||||
auto modelJob = std::dynamic_pointer_cast<ModelJob>(job);
|
auto modelJob = std::dynamic_pointer_cast<ModelJob>(job);
|
||||||
|
|
||||||
if (modelJob) {
|
if (modelJob) {
|
||||||
if (modelJob->Model->isSkined())
|
int pickColor[2] = { m_ColorCounter[0], m_ColorCounter[1] };
|
||||||
|
|
||||||
|
PickingInfo pickInfo;
|
||||||
|
pickInfo.Entity = modelJob->Entity;
|
||||||
|
pickInfo.World = modelJob->World;
|
||||||
|
pickInfo.Camera = scene.Camera;
|
||||||
|
|
||||||
|
auto color = m_EntityColors.find(std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera));
|
||||||
|
if (color != m_EntityColors.end()) {
|
||||||
|
pickColor[0] = color->second[0];
|
||||||
|
pickColor[1] = color->second[1];
|
||||||
|
} else {
|
||||||
|
m_EntityColors[std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera)] = glm::ivec2(pickColor[0], pickColor[1]);
|
||||||
|
if (m_ColorCounter[0] > 255) {
|
||||||
|
m_ColorCounter[0] = 0;
|
||||||
|
m_ColorCounter[1] += 1;
|
||||||
|
} else {
|
||||||
|
m_ColorCounter[0] += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo;
|
||||||
|
|
||||||
|
if (modelJob->Model->IsSkinned())
|
||||||
{
|
{
|
||||||
m_PickingSkinnedProgram->Bind();
|
m_PickingSkinnedProgram->Bind();
|
||||||
int pickColor[2] = { m_ColorCounter[0], m_ColorCounter[1] };
|
|
||||||
|
|
||||||
PickingInfo pickInfo;
|
|
||||||
pickInfo.Entity = modelJob->Entity;
|
|
||||||
pickInfo.World = modelJob->World;
|
|
||||||
pickInfo.Camera = scene.Camera;
|
|
||||||
|
|
||||||
auto color = m_EntityColors.find(std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera));
|
|
||||||
if (color != m_EntityColors.end()) {
|
|
||||||
pickColor[0] = color->second[0];
|
|
||||||
pickColor[1] = color->second[1];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
m_EntityColors[std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera)] = glm::ivec2(pickColor[0], pickColor[1]);
|
|
||||||
if (m_ColorCounter[0] > 255) {
|
|
||||||
m_ColorCounter[0] = 0;
|
|
||||||
m_ColorCounter[1] += 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
m_ColorCounter[0] += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo;
|
|
||||||
|
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
||||||
@@ -114,32 +112,7 @@ void PickingPass::Draw(RenderScene& scene)
|
|||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m_PickingProgram->Bind();
|
m_PickingProgram->Bind();
|
||||||
int pickColor[2] = { m_ColorCounter[0], m_ColorCounter[1] };
|
|
||||||
|
|
||||||
PickingInfo pickInfo;
|
|
||||||
pickInfo.Entity = modelJob->Entity;
|
|
||||||
pickInfo.World = modelJob->World;
|
|
||||||
pickInfo.Camera = scene.Camera;
|
|
||||||
|
|
||||||
auto color = m_EntityColors.find(std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera));
|
|
||||||
if (color != m_EntityColors.end()) {
|
|
||||||
pickColor[0] = color->second[0];
|
|
||||||
pickColor[1] = color->second[1];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
m_EntityColors[std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera)] = glm::ivec2(pickColor[0], pickColor[1]);
|
|
||||||
if (m_ColorCounter[0] > 255) {
|
|
||||||
m_ColorCounter[0] = 0;
|
|
||||||
m_ColorCounter[1] += 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
m_ColorCounter[0] += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo;
|
|
||||||
|
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
||||||
@@ -155,31 +128,32 @@ void PickingPass::Draw(RenderScene& scene)
|
|||||||
for (auto &job : scene.Jobs.TransparentObjects) {
|
for (auto &job : scene.Jobs.TransparentObjects) {
|
||||||
auto modelJob = std::dynamic_pointer_cast<ModelJob>(job);
|
auto modelJob = std::dynamic_pointer_cast<ModelJob>(job);
|
||||||
|
|
||||||
|
int pickColor[2] = { m_ColorCounter[0], m_ColorCounter[1] };
|
||||||
|
|
||||||
|
PickingInfo pickInfo;
|
||||||
|
pickInfo.Entity = modelJob->Entity;
|
||||||
|
pickInfo.World = modelJob->World;
|
||||||
|
pickInfo.Camera = scene.Camera;
|
||||||
|
|
||||||
|
auto color = m_EntityColors.find(std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera));
|
||||||
|
if (color != m_EntityColors.end()) {
|
||||||
|
pickColor[0] = color->second[0];
|
||||||
|
pickColor[1] = color->second[1];
|
||||||
|
} else {
|
||||||
|
m_EntityColors[std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera)] = glm::ivec2(pickColor[0], pickColor[1]);
|
||||||
|
if (m_ColorCounter[0] > 255) {
|
||||||
|
m_ColorCounter[0] = 0;
|
||||||
|
m_ColorCounter[1] += 1;
|
||||||
|
} else {
|
||||||
|
m_ColorCounter[0] += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo;
|
||||||
|
|
||||||
if (modelJob) {
|
if (modelJob) {
|
||||||
if (modelJob->Model->isSkined()) {
|
if (modelJob->Model->IsSkinned()) {
|
||||||
int pickColor[2] = { m_ColorCounter[0], m_ColorCounter[1] };
|
m_PickingSkinnedProgram->Bind();
|
||||||
|
|
||||||
PickingInfo pickInfo;
|
|
||||||
pickInfo.Entity = modelJob->Entity;
|
|
||||||
pickInfo.World = modelJob->World;
|
|
||||||
pickInfo.Camera = scene.Camera;
|
|
||||||
|
|
||||||
auto color = m_EntityColors.find(std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera));
|
|
||||||
if (color != m_EntityColors.end()) {
|
|
||||||
pickColor[0] = color->second[0];
|
|
||||||
pickColor[1] = color->second[1];
|
|
||||||
} else {
|
|
||||||
m_EntityColors[std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera)] = glm::ivec2(pickColor[0], pickColor[1]);
|
|
||||||
if (m_ColorCounter[0] > 255) {
|
|
||||||
m_ColorCounter[0] = 0;
|
|
||||||
m_ColorCounter[1] += 1;
|
|
||||||
} else {
|
|
||||||
m_ColorCounter[0] += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo;
|
|
||||||
|
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
||||||
@@ -193,37 +167,13 @@ void PickingPass::Draw(RenderScene& scene)
|
|||||||
}
|
}
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
|
||||||
} else {
|
} else {
|
||||||
int pickColor[2] = { m_ColorCounter[0], m_ColorCounter[1] };
|
m_PickingProgram->Bind();
|
||||||
|
|
||||||
PickingInfo pickInfo;
|
|
||||||
pickInfo.Entity = modelJob->Entity;
|
|
||||||
pickInfo.World = modelJob->World;
|
|
||||||
pickInfo.Camera = scene.Camera;
|
|
||||||
|
|
||||||
auto color = m_EntityColors.find(std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera));
|
|
||||||
if (color != m_EntityColors.end()) {
|
|
||||||
pickColor[0] = color->second[0];
|
|
||||||
pickColor[1] = color->second[1];
|
|
||||||
} else {
|
|
||||||
m_EntityColors[std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera)] = glm::ivec2(pickColor[0], pickColor[1]);
|
|
||||||
if (m_ColorCounter[0] > 255) {
|
|
||||||
m_ColorCounter[0] = 0;
|
|
||||||
m_ColorCounter[1] += 1;
|
|
||||||
} else {
|
|
||||||
m_ColorCounter[0] += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo;
|
|
||||||
|
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
|
||||||
glUniform2fv(glGetUniformLocation(shaderHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1])));
|
glUniform2fv(glGetUniformLocation(shaderHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1])));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
glBindVertexArray(modelJob->Model->VAO);
|
glBindVertexArray(modelJob->Model->VAO);
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer);
|
||||||
glDrawElements(GL_TRIANGLES, modelJob->EndIndex - modelJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(modelJob->StartIndex * sizeof(unsigned int)));
|
glDrawElements(GL_TRIANGLES, modelJob->EndIndex - modelJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(modelJob->StartIndex * sizeof(unsigned int)));
|
||||||
@@ -257,7 +207,7 @@ void PickingPass::Draw(RenderScene& scene)
|
|||||||
|
|
||||||
m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo;
|
m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo;
|
||||||
|
|
||||||
if(modelJob->Model->isSkined()) {
|
if(modelJob->Model->IsSkinned()) {
|
||||||
m_PickingSkinnedProgram->Bind();
|
m_PickingSkinnedProgram->Bind();
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
|
||||||
@@ -314,7 +264,7 @@ void PickingPass::Draw(RenderScene& scene)
|
|||||||
|
|
||||||
m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo;
|
m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo;
|
||||||
|
|
||||||
if (modelJob->Model->isSkined()) {
|
if (modelJob->Model->IsSkinned()) {
|
||||||
m_PickingSkinnedProgram->Bind();
|
m_PickingSkinnedProgram->Bind();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user