mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 10:09:05 +02:00
try to fix grid color issue
This commit is contained in:
parent
bb030660bd
commit
87947a7165
4 changed files with 76 additions and 36 deletions
|
@ -944,42 +944,44 @@ void GeometryCache::renderWireSphere(gpu::Batch& batch, const glm::vec4& color)
|
||||||
}
|
}
|
||||||
|
|
||||||
void GeometryCache::renderGrid(gpu::Batch& batch, const glm::vec2& minCorner, const glm::vec2& maxCorner,
|
void GeometryCache::renderGrid(gpu::Batch& batch, const glm::vec2& minCorner, const glm::vec2& maxCorner,
|
||||||
int majorRows, int majorCols, float majorEdge,
|
int majorRows, int majorCols, float majorEdge, int minorRows, int minorCols, float minorEdge,
|
||||||
int minorRows, int minorCols, float minorEdge,
|
const glm::vec4& color, int id) {
|
||||||
const glm::vec4& color, int id) {
|
|
||||||
static const glm::vec2 MIN_TEX_COORD(0.0f, 0.0f);
|
|
||||||
static const glm::vec2 MAX_TEX_COORD(1.0f, 1.0f);
|
|
||||||
|
|
||||||
bool registered = (id != UNKNOWN_ID);
|
|
||||||
Vec2FloatPair majorKey(glm::vec2(majorRows, majorCols), majorEdge);
|
Vec2FloatPair majorKey(glm::vec2(majorRows, majorCols), majorEdge);
|
||||||
Vec2FloatPair minorKey(glm::vec2(minorRows, minorCols), minorEdge);
|
Vec2FloatPair minorKey(glm::vec2(minorRows, minorCols), minorEdge);
|
||||||
Vec2FloatPairPair key(majorKey, minorKey);
|
Vec2FloatPairPair key(majorKey, minorKey);
|
||||||
|
|
||||||
// Make the gridbuffer
|
// Make the gridbuffer
|
||||||
if (registered && (!_registeredGridBuffers.contains(id) || _lastRegisteredGridBuffer[id] != key)) {
|
GridBuffer gridBuffer;
|
||||||
GridSchema gridSchema;
|
if (id != UNKNOWN_ID) {
|
||||||
GridBuffer gridBuffer = std::make_shared<gpu::Buffer>(sizeof(GridSchema), (const gpu::Byte*) &gridSchema);
|
auto gridBufferIter = _registeredGridBuffers.find(id);
|
||||||
|
bool hadGridBuffer = gridBufferIter != _registeredGridBuffers.end();
|
||||||
if (registered && _registeredGridBuffers.contains(id)) {
|
if (hadGridBuffer) {
|
||||||
gridBuffer = _registeredGridBuffers[id];
|
gridBuffer = gridBufferIter.value();
|
||||||
|
} else {
|
||||||
|
GridSchema gridSchema;
|
||||||
|
gridBuffer = std::make_shared<gpu::Buffer>(sizeof(GridSchema), (const gpu::Byte*)&gridSchema);
|
||||||
}
|
}
|
||||||
|
|
||||||
_registeredGridBuffers[id] = gridBuffer;
|
if (!hadGridBuffer || _lastRegisteredGridBuffer[id] != key) {
|
||||||
_lastRegisteredGridBuffer[id] = key;
|
_registeredGridBuffers[id] = gridBuffer;
|
||||||
|
_lastRegisteredGridBuffer[id] = key;
|
||||||
|
|
||||||
gridBuffer.edit<GridSchema>().period = glm::vec4(majorRows, majorCols, minorRows, minorCols);
|
gridBuffer.edit<GridSchema>().period = glm::vec4(majorRows, majorCols, minorRows, minorCols);
|
||||||
gridBuffer.edit<GridSchema>().offset.x = -(majorEdge / majorRows) / 2;
|
gridBuffer.edit<GridSchema>().offset.x = -(majorEdge / majorRows) / 2;
|
||||||
gridBuffer.edit<GridSchema>().offset.y = -(majorEdge / majorCols) / 2;
|
gridBuffer.edit<GridSchema>().offset.y = -(majorEdge / majorCols) / 2;
|
||||||
gridBuffer.edit<GridSchema>().offset.z = -(minorEdge / minorRows) / 2;
|
gridBuffer.edit<GridSchema>().offset.z = -(minorEdge / minorRows) / 2;
|
||||||
gridBuffer.edit<GridSchema>().offset.w = -(minorEdge / minorCols) / 2;
|
gridBuffer.edit<GridSchema>().offset.w = -(minorEdge / minorCols) / 2;
|
||||||
gridBuffer.edit<GridSchema>().edge = glm::vec4(glm::vec2(majorEdge),
|
gridBuffer.edit<GridSchema>().edge = glm::vec4(glm::vec2(majorEdge),
|
||||||
// If rows or columns are not set, do not draw minor gridlines
|
// If rows or columns are not set, do not draw minor gridlines
|
||||||
glm::vec2((minorRows != 0 && minorCols != 0) ? minorEdge : 0.0f));
|
glm::vec2((minorRows != 0 && minorCols != 0) ? minorEdge : 0.0f));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the grid pipeline
|
// Set the grid pipeline
|
||||||
useGridPipeline(batch, _registeredGridBuffers[id], color.a < 1.0f);
|
useGridPipeline(batch, gridBuffer, color.a < 1.0f);
|
||||||
|
|
||||||
|
static const glm::vec2 MIN_TEX_COORD(0.0f, 0.0f);
|
||||||
|
static const glm::vec2 MAX_TEX_COORD(1.0f, 1.0f);
|
||||||
renderQuad(batch, minCorner, maxCorner, MIN_TEX_COORD, MAX_TEX_COORD, color, id);
|
renderQuad(batch, minCorner, maxCorner, MIN_TEX_COORD, MAX_TEX_COORD, color, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2117,10 +2119,11 @@ void GeometryCache::useSimpleDrawPipeline(gpu::Batch& batch, bool noBlend) {
|
||||||
|
|
||||||
void GeometryCache::useGridPipeline(gpu::Batch& batch, GridBuffer gridBuffer, bool transparent) {
|
void GeometryCache::useGridPipeline(gpu::Batch& batch, GridBuffer gridBuffer, bool transparent) {
|
||||||
if (!_gridPipelineOpaque || !_gridPipelineTransparent) {
|
if (!_gridPipelineOpaque || !_gridPipelineTransparent) {
|
||||||
auto program = gpu::Shader::createProgram(shader::render_utils::program::grid);
|
|
||||||
const float DEPTH_BIAS = 0.001f;
|
const float DEPTH_BIAS = 0.001f;
|
||||||
|
|
||||||
|
// FIXME: need forward pipelines
|
||||||
{
|
{
|
||||||
|
auto program = gpu::Shader::createProgram(shader::render_utils::program::grid);
|
||||||
auto state = std::make_shared<gpu::State>();
|
auto state = std::make_shared<gpu::State>();
|
||||||
state->setDepthTest(true, true, gpu::LESS_EQUAL);
|
state->setDepthTest(true, true, gpu::LESS_EQUAL);
|
||||||
state->setBlendFunction(false,
|
state->setBlendFunction(false,
|
||||||
|
@ -2133,6 +2136,7 @@ void GeometryCache::useGridPipeline(gpu::Batch& batch, GridBuffer gridBuffer, bo
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
auto program = gpu::Shader::createProgram(shader::render_utils::program::grid_translucent);
|
||||||
auto state = std::make_shared<gpu::State>();
|
auto state = std::make_shared<gpu::State>();
|
||||||
state->setDepthTest(true, true, gpu::LESS_EQUAL);
|
state->setDepthTest(true, true, gpu::LESS_EQUAL);
|
||||||
state->setBlendFunction(true,
|
state->setBlendFunction(true,
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
<@include gpu/Config.slh@>
|
<@include gpu/Config.slh@>
|
||||||
<$VERSION_HEADER$>
|
<$VERSION_HEADER$>
|
||||||
// Generated on <$_SCRIBE_DATE$>
|
// Generated on <$_SCRIBE_DATE$>
|
||||||
// grid.frag
|
|
||||||
// fragment shader
|
|
||||||
//
|
//
|
||||||
// Created by Zach Pomerantz on 2/16/2016.
|
// Created by Zach Pomerantz on 2/16/2016.
|
||||||
// Copyright 2016 High Fidelity, Inc.
|
// Copyright 2016 High Fidelity, Inc.
|
||||||
|
@ -11,6 +9,8 @@
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//
|
||||||
|
|
||||||
|
<@include DeferredBufferWrite.slh@>
|
||||||
|
|
||||||
<@include gpu/ShaderConstants.h@>
|
<@include gpu/ShaderConstants.h@>
|
||||||
<@include gpu/Paint.slh@>
|
<@include gpu/Paint.slh@>
|
||||||
|
|
||||||
|
@ -21,26 +21,20 @@ struct Grid {
|
||||||
};
|
};
|
||||||
|
|
||||||
LAYOUT(binding=0) uniform gridBuffer {
|
LAYOUT(binding=0) uniform gridBuffer {
|
||||||
Grid grid;
|
Grid grid;
|
||||||
};
|
};
|
||||||
|
|
||||||
Grid getGrid() { return grid; }
|
|
||||||
|
|
||||||
layout(location=GPU_ATTR_TEXCOORD0) in vec2 varTexCoord0;
|
layout(location=GPU_ATTR_TEXCOORD0) in vec2 varTexCoord0;
|
||||||
layout(location=GPU_ATTR_COLOR) in vec4 varColor;
|
layout(location=GPU_ATTR_COLOR) in vec4 varColor;
|
||||||
|
|
||||||
layout(location=0) out vec4 outFragColor;
|
|
||||||
|
|
||||||
void main(void) {
|
void main(void) {
|
||||||
Grid grid = getGrid();
|
|
||||||
|
|
||||||
float alpha = mix(paintGridMajorMinor(varTexCoord0, grid.offset, grid.period, grid.edge),
|
float alpha = mix(paintGridMajorMinor(varTexCoord0, grid.offset, grid.period, grid.edge),
|
||||||
paintGrid(varTexCoord0, grid.offset.xy, grid.period.xy, grid.edge.xy),
|
paintGrid(varTexCoord0, grid.offset.xy, grid.period.xy, grid.edge.xy),
|
||||||
float(grid.edge.z == 0.0));
|
float(grid.edge.z == 0.0));
|
||||||
|
|
||||||
if (alpha == 0.0) {
|
if (alpha < 0.0001) {
|
||||||
discard;
|
discard;
|
||||||
}
|
}
|
||||||
|
|
||||||
outFragColor = vec4(varColor.xyz, varColor.w * alpha);
|
packDeferredFragmentUnlit(vec3(1.0, 0.0, 0.0), 1.0, varColor.xyz);
|
||||||
}
|
}
|
||||||
|
|
41
libraries/render-utils/src/grid_translucent.slf
Normal file
41
libraries/render-utils/src/grid_translucent.slf
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
<@include gpu/Config.slh@>
|
||||||
|
<$VERSION_HEADER$>
|
||||||
|
// Generated on <$_SCRIBE_DATE$>
|
||||||
|
//
|
||||||
|
// Created by Sam Gondelman on 12/22/18
|
||||||
|
// Copyright 2018 High Fidelity, Inc.
|
||||||
|
//
|
||||||
|
// Distributed under the Apache License, Version 2.0.
|
||||||
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
//
|
||||||
|
|
||||||
|
<@include DeferredBufferWrite.slh@>
|
||||||
|
|
||||||
|
<@include gpu/ShaderConstants.h@>
|
||||||
|
<@include gpu/Paint.slh@>
|
||||||
|
|
||||||
|
struct Grid {
|
||||||
|
vec4 period;
|
||||||
|
vec4 offset;
|
||||||
|
vec4 edge;
|
||||||
|
};
|
||||||
|
|
||||||
|
LAYOUT(binding=0) uniform gridBuffer {
|
||||||
|
Grid grid;
|
||||||
|
};
|
||||||
|
|
||||||
|
layout(location=GPU_ATTR_TEXCOORD0) in vec2 varTexCoord0;
|
||||||
|
layout(location=GPU_ATTR_COLOR) in vec4 varColor;
|
||||||
|
|
||||||
|
void main(void) {
|
||||||
|
float alpha = mix(paintGridMajorMinor(varTexCoord0, grid.offset, grid.period, grid.edge),
|
||||||
|
paintGrid(varTexCoord0, grid.offset.xy, grid.period.xy, grid.edge.xy),
|
||||||
|
float(grid.edge.z == 0.0));
|
||||||
|
alpha *= varColor.w;
|
||||||
|
|
||||||
|
if (alpha < 0.0001) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
|
||||||
|
packDeferredFragmentTranslucent(vec3(1.0, 0.0, 0.0), alpha, varColor.xyz, DEFAULT_ROUGHNESS);
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
VERTEX standardTransformPNTC
|
Loading…
Reference in a new issue