Обводка выбранного объекта
This commit is contained in:
parent
44a7eca47d
commit
2bd2481ad4
@ -39,6 +39,9 @@ uniform sampler2D gAmbientSpecular;
|
|||||||
uniform sampler2DArray sunShadowDepth;
|
uniform sampler2DArray sunShadowDepth;
|
||||||
uniform samplerCubeArray pointShadowDepth;
|
uniform samplerCubeArray pointShadowDepth;
|
||||||
uniform sampler2D ssao;
|
uniform sampler2D ssao;
|
||||||
|
uniform usampler2D gID;
|
||||||
|
|
||||||
|
uniform uvec3 selectedID;
|
||||||
|
|
||||||
layout(std140, binding = 4) uniform gamma
|
layout(std140, binding = 4) uniform gamma
|
||||||
{
|
{
|
||||||
@ -196,4 +199,21 @@ void main()
|
|||||||
|
|
||||||
// Применение гамма-коррекции
|
// Применение гамма-коррекции
|
||||||
color.rgb = pow(color.rgb, vec3(inv_gamma));
|
color.rgb = pow(color.rgb, vec3(inv_gamma));
|
||||||
|
|
||||||
|
|
||||||
|
// Обводка выбранного объекта
|
||||||
|
if (length(selectedID.rg) > 0 && selectedID.rg == texture(gID, texCoord).rg)
|
||||||
|
{
|
||||||
|
int border_width = 3;
|
||||||
|
vec2 size = 1.0f / textureSize(gID, 0);
|
||||||
|
for (int i = -border_width; i <= +border_width; i++)
|
||||||
|
for (int j = -border_width; j <= +border_width; j++)
|
||||||
|
{
|
||||||
|
if (i == 0 && j == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (texture(gID, texCoord + vec2(i, j) * size).rg != selectedID.rg)
|
||||||
|
color.rgb = vec3(1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -177,7 +177,7 @@ int main(void)
|
|||||||
lightShader.load(GL_FRAGMENT_SHADER, "shaders/lighting.frag");
|
lightShader.load(GL_FRAGMENT_SHADER, "shaders/lighting.frag");
|
||||||
lightShader.link();
|
lightShader.link();
|
||||||
// Привязка текстур
|
// Привязка текстур
|
||||||
const char* gtextures_shader_names[] = {"gPosition", "gNormal", "gDiffuseP", "gAmbientSpecular", "sunShadowDepth", "pointShadowDepth", "ssao"};
|
const char* gtextures_shader_names[] = {"gPosition", "gNormal", "gDiffuseP", "gAmbientSpecular", "sunShadowDepth", "pointShadowDepth", "ssao", "gID"};
|
||||||
lightShader.bindTextures(gtextures_shader_names, sizeof(gtextures_shader_names)/sizeof(const char*));
|
lightShader.bindTextures(gtextures_shader_names, sizeof(gtextures_shader_names)/sizeof(const char*));
|
||||||
// Загрузка данных о границах каскадов
|
// Загрузка данных о границах каскадов
|
||||||
glUniform1fv(lightShader.getUniformLoc("camera_cascade_distances"), CAMERA_CASCADE_COUNT, &camera_cascade_distances[1]);
|
glUniform1fv(lightShader.getUniformLoc("camera_cascade_distances"), CAMERA_CASCADE_COUNT, &camera_cascade_distances[1]);
|
||||||
@ -492,6 +492,9 @@ int main(void)
|
|||||||
gNormal.use();
|
gNormal.use();
|
||||||
gDiffuseP.use();
|
gDiffuseP.use();
|
||||||
gAmbientSpecular.use();
|
gAmbientSpecular.use();
|
||||||
|
gID.use();
|
||||||
|
// Идентификатор выбранного объекта для обводки
|
||||||
|
glUniform3uiv(lightShader.getUniformLoc("selectedID"), 1, (GLuint*) &selected);
|
||||||
// Подключаем текстуры теней
|
// Подключаем текстуры теней
|
||||||
sunShadowDepth.use();
|
sunShadowDepth.use();
|
||||||
pointShadowDepth.use();
|
pointShadowDepth.use();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user