From 76240c3eddb5b0345a4ab33a2769d4e1904f53dd Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sat, 11 Jan 2020 21:07:38 +0100 Subject: [PATCH] Coding style updates --- data/assets/default.scene | 2 +- .../globebrowsing/shaders/renderer_fs.glsl | 6 +- modules/globebrowsing/shaders/rings_fs.glsl | 7 +- .../globebrowsing/shaders/rings_geom_fs.glsl | 3 +- modules/globebrowsing/shaders/rings_vs.glsl | 6 +- modules/globebrowsing/src/renderableglobe.cpp | 4 +- modules/globebrowsing/src/ringscomponent.h | 126 +++++++------- modules/globebrowsing/src/shadowcomponent.cpp | 162 ++++++------------ modules/globebrowsing/src/shadowcomponent.h | 13 +- 9 files changed, 131 insertions(+), 198 deletions(-) diff --git a/data/assets/default.scene b/data/assets/default.scene index ab9d0de977..c6d3e2523c 100644 --- a/data/assets/default.scene +++ b/data/assets/default.scene @@ -9,7 +9,7 @@ asset.onInitialize(function () openspace.globebrowsing.goToGeo("Earth", 58.5877, 16.1924, 20000000) - openspace.markInterestingNodes({ "Earth", "Mars", "Moon", "Sun"}) + openspace.markInterestingNodes({ "Earth", "Mars", "Moon", "Sun" }) end) asset.onDeinitialize(function () diff --git a/modules/globebrowsing/shaders/renderer_fs.glsl b/modules/globebrowsing/shaders/renderer_fs.glsl index 082f8630aa..e7633d405e 100644 --- a/modules/globebrowsing/shaders/renderer_fs.glsl +++ b/modules/globebrowsing/shaders/renderer_fs.glsl @@ -267,12 +267,12 @@ Fragment getFragment() { #if SHADOW_MAPPING_ENABLED float shadow = 1.0; - if ( shadowCoords.w > 1 ) { + if (shadowCoords.w > 1) { vec4 normalizedShadowCoords = shadowCoords; normalizedShadowCoords.z = normalizeFloat(zFightingPercentage * normalizedShadowCoords.w); normalizedShadowCoords.xy = normalizedShadowCoords.xy / normalizedShadowCoords.w; normalizedShadowCoords.w = 1.0; - + float sum = 0; for (int i = 0; i < nShadowSamples; ++i) { sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-nShadowSamples + i, -nShadowSamples + i)); @@ -285,7 +285,7 @@ Fragment getFragment() { sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( nShadowSamples - i, nShadowSamples - i)); } sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(0, 0)); - shadow = sum / (8.f * nShadowSamples + 1.f); + shadow = sum / (8.0 * nShadowSamples + 1.f); } frag.color.xyz *= shadow < 0.99 ? clamp(shadow + 0.5, 0.0, 1.0) : shadow; #endif diff --git a/modules/globebrowsing/shaders/rings_fs.glsl b/modules/globebrowsing/shaders/rings_fs.glsl index 4eb8ce25b6..12ba8b4e74 100644 --- a/modules/globebrowsing/shaders/rings_fs.glsl +++ b/modules/globebrowsing/shaders/rings_fs.glsl @@ -50,8 +50,9 @@ Fragment getFragment() { float radius = length(st); // We only want to consider ring-like objects so we need to discard everything else - if (radius > 1.0) + if (radius > 1.0) { discard; + } // Remapping the texture coordinates // Radius \in [0,1], texCoord \in [textureOffset.x, textureOffset.y] @@ -61,7 +62,7 @@ Fragment getFragment() { if (texCoord < 0.f || texCoord > 1.f) { discard; } - + vec4 diffuse = texture(ringTexture, texCoord); float colorValue = length(diffuse.rgb); // times 3 as length of vec3(1.0, 1.0, 1.0) will return 3 and we want @@ -90,7 +91,7 @@ Fragment getFragment() { sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( nShadowSamples - i, nShadowSamples - i)); } sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(0, 0)); - shadow = sum / (8.f * nShadowSamples + 1.f); + shadow = sum / (8.0 * nShadowSamples + 1.f); } // The normal for the one plane depends on whether we are dealing diff --git a/modules/globebrowsing/shaders/rings_geom_fs.glsl b/modules/globebrowsing/shaders/rings_geom_fs.glsl index 211d17d596..d7ec721368 100644 --- a/modules/globebrowsing/shaders/rings_geom_fs.glsl +++ b/modules/globebrowsing/shaders/rings_geom_fs.glsl @@ -39,8 +39,9 @@ Fragment getFragment() { float radius = length(st); // We only want to consider ring-like objects so we need to discard everything else - if (radius > 1.0) + if (radius > 1.0) { discard; + } // Remapping the texture coordinates // Radius \in [0,1], texCoord \in [textureOffset.x, textureOffset.y] diff --git a/modules/globebrowsing/shaders/rings_vs.glsl b/modules/globebrowsing/shaders/rings_vs.glsl index dfe33ed905..83c4d4510e 100644 --- a/modules/globebrowsing/shaders/rings_vs.glsl +++ b/modules/globebrowsing/shaders/rings_vs.glsl @@ -41,17 +41,13 @@ uniform dmat4 modelViewProjectionMatrix; // where textureCoordsMatrix is just a scale and bias computation: [-1,1] to [0,1] uniform dmat4 shadowMatrix; - void main() { vs_st = in_st; - dvec4 positionClipSpace = modelViewProjectionMatrix * - dvec4(in_position, 0.0, 1.0); + dvec4 positionClipSpace = modelViewProjectionMatrix * dvec4(in_position, 0.0, 1.0); vec4 positionClipSpaceZNorm = z_normalization(vec4(positionClipSpace)); shadowCoords = vec4(shadowMatrix * dvec4(in_position, 0.0, 1.0)); - vs_screenSpaceDepth = positionClipSpaceZNorm.w; - gl_Position = positionClipSpaceZNorm; } diff --git a/modules/globebrowsing/src/renderableglobe.cpp b/modules/globebrowsing/src/renderableglobe.cpp index 9584a5816a..ff436a2f9e 100644 --- a/modules/globebrowsing/src/renderableglobe.cpp +++ b/modules/globebrowsing/src/renderableglobe.cpp @@ -1350,7 +1350,9 @@ void RenderableGlobe::renderChunkGlobally(const Chunk& chunk, const RenderData& } void RenderableGlobe::renderChunkLocally(const Chunk& chunk, const RenderData& data, - const ShadowComponent::ShadowMapData& shadowData, const bool renderGeomOnly) { + const ShadowComponent::ShadowMapData& shadowData, + bool renderGeomOnly) +{ //PerfMeasure("locally"); const TileIndex& tileIndex = chunk.tileIndex; ghoul::opengl::ProgramObject& program = *_localRenderer.program; diff --git a/modules/globebrowsing/src/ringscomponent.h b/modules/globebrowsing/src/ringscomponent.h index f2e277b3a4..b42313e692 100644 --- a/modules/globebrowsing/src/ringscomponent.h +++ b/modules/globebrowsing/src/ringscomponent.h @@ -38,80 +38,74 @@ #include #include -namespace ghoul { - class Dictionary; -} - +namespace ghoul { class Dictionary; } namespace ghoul::filesystem { class File; } - -namespace ghoul::opengl { - class ProgramObject; -} // namespace ghoul::opengl +namespace ghoul::opengl { class ProgramObject; } namespace openspace { struct RenderData; struct UpdateData; - namespace documentation { struct Documentation; } +namespace documentation { struct Documentation; } - class RingsComponent : public properties::PropertyOwner { - public: - enum RenderPass { - GeometryOnly, - GeometryAndShading - }; - public: - RingsComponent(const ghoul::Dictionary& dictionary); - - void initialize(); - void initializeGL(); - void deinitializeGL(); - - bool isReady() const; - - void draw( - const RenderData& data, - const RingsComponent::RenderPass renderPass, - const ShadowComponent::ShadowMapData& shadowData = {} - ); - void update(const UpdateData& data); - - static documentation::Documentation Documentation(); - - bool isEnabled() const; - - private: - void loadTexture(); - void createPlane(); - - properties::StringProperty _texturePath; - properties::FloatProperty _size; - properties::Vec2Property _offset; - properties::FloatProperty _nightFactor; - properties::FloatProperty _transparency; - properties::BoolProperty _enabled; - properties::FloatProperty _zFightingPercentage; - properties::IntProperty _nShadowSamples; - - std::unique_ptr _shader; - std::unique_ptr _geometryOnlyShader; - UniformCache(modelViewProjectionMatrix, textureOffset, transparency, nightFactor, - sunPosition, ringTexture, shadowMatrix, shadowMapTexture, - nShadowSamples, zFightingPercentage - ) _uniformCache; - UniformCache(modelViewProjectionMatrix, textureOffset, ringTexture) - _geomUniformCache; - std::unique_ptr _texture; - std::unique_ptr _textureFile; - - ghoul::Dictionary _ringsDictionary; - bool _textureIsDirty = false; - GLuint _quad = 0; - GLuint _vertexPositionBuffer = 0; - bool _planeIsDirty = false; - - glm::vec3 _sunPosition; +class RingsComponent : public properties::PropertyOwner { +public: + enum RenderPass { + GeometryOnly, + GeometryAndShading }; + + RingsComponent(const ghoul::Dictionary& dictionary); + + void initialize(); + void initializeGL(); + void deinitializeGL(); + + bool isReady() const; + + void draw( + const RenderData& data, + const RingsComponent::RenderPass renderPass, + const ShadowComponent::ShadowMapData& shadowData = {} + ); + void update(const UpdateData& data); + + static documentation::Documentation Documentation(); + + bool isEnabled() const; + +private: + void loadTexture(); + void createPlane(); + + properties::StringProperty _texturePath; + properties::FloatProperty _size; + properties::Vec2Property _offset; + properties::FloatProperty _nightFactor; + properties::FloatProperty _transparency; + properties::BoolProperty _enabled; + properties::FloatProperty _zFightingPercentage; + properties::IntProperty _nShadowSamples; + + std::unique_ptr _shader; + std::unique_ptr _geometryOnlyShader; + UniformCache(modelViewProjectionMatrix, textureOffset, transparency, nightFactor, + sunPosition, ringTexture, shadowMatrix, shadowMapTexture, nShadowSamples, + zFightingPercentage + ) _uniformCache; + UniformCache(modelViewProjectionMatrix, textureOffset, ringTexture) + _geomUniformCache; + std::unique_ptr _texture; + std::unique_ptr _textureFile; + + ghoul::Dictionary _ringsDictionary; + bool _textureIsDirty = false; + GLuint _quad = 0; + GLuint _vertexPositionBuffer = 0; + bool _planeIsDirty = false; + + glm::vec3 _sunPosition; +}; } // namespace openspace diff --git a/modules/globebrowsing/src/shadowcomponent.cpp b/modules/globebrowsing/src/shadowcomponent.cpp index 2d16428728..2a2e5a9c7b 100644 --- a/modules/globebrowsing/src/shadowcomponent.cpp +++ b/modules/globebrowsing/src/shadowcomponent.cpp @@ -75,6 +75,8 @@ namespace { "The depth map size in pixels. You must entry the width and height values." }; + constexpr const GLfloat ShadowBorder[] = { 1.f, 1.f, 1.f, 1.f }; + void checkFrameBufferState(const std::string& codePosition) { if (glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { LERROR("Framework not built. " + codePosition); @@ -232,7 +234,6 @@ void ShadowComponent::deinitializeGL() { glDeleteTextures(1, &_shadowDepthTexture); glDeleteTextures(1, &_positionInLightSpaceTexture); glDeleteFramebuffers(1, &_shadowFBO); - checkGLError("ShadowComponent::deinitializeGL() -- Deleted Textures and Framebuffer"); } RenderData ShadowComponent::begin(const RenderData& data) { @@ -245,15 +246,15 @@ RenderData ShadowComponent::begin(const RenderData& data) { glm::dvec3 lightDirection = glm::normalize(diffVector); // Percentage of the original light source distance (to avoid artifacts) - /*double multiplier = originalLightDistance * - (static_cast(_distanceFraction)/1.0E5);*/ + //double multiplier = originalLightDistance * + // (static_cast(_distanceFraction)/1.0E5); double multiplier = originalLightDistance * (static_cast(_distanceFraction) / 1E17); // New light source position - /*glm::dvec3 lightPosition = data.modelTransform.translation + - (lightDirection * multiplier);*/ + //glm::dvec3 lightPosition = data.modelTransform.translation + + // (lightDirection * multiplier); glm::dvec3 lightPosition = data.modelTransform.translation + (diffVector * multiplier); @@ -338,14 +339,14 @@ RenderData ShadowComponent::begin(const RenderData& data) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - /*glEnable(GL_CULL_FACE); - checkGLError("begin() -- enabled cull face"); - glCullFace(GL_FRONT); - checkGLError("begin() -- set cullface to front");*/ - /*glEnable(GL_POLYGON_OFFSET_FILL); - checkGLError("begin() -- enabled polygon offset fill"); - glPolygonOffset(2.5f, 10.0f); - checkGLError("begin() -- set values for polygon offset");*/ + //glEnable(GL_CULL_FACE); + //checkGLError("begin() -- enabled cull face"); + //glCullFace(GL_FRONT); + //checkGLError("begin() -- set cullface to front"); + //glEnable(GL_POLYGON_OFFSET_FILL); + //checkGLError("begin() -- enabled polygon offset fill"); + //glPolygonOffset(2.5f, 10.0f); + //checkGLError("begin() -- set values for polygon offset"); RenderData lightRenderData{ *_lightCamera, @@ -437,12 +438,13 @@ void ShadowComponent::end() { } } -void ShadowComponent::update(const UpdateData& /*data*/) { +void ShadowComponent::update(const UpdateData&) { _sunPosition = global::renderEngine.scene()->sceneGraphNode("Sun")->worldPosition(); glm::ivec2 renderingResolution = global::renderEngine.renderingResolution(); if (_dynamicDepthTextureRes && ((_shadowDepthTextureWidth != renderingResolution.x) || - (_shadowDepthTextureHeight != renderingResolution.y))) { + (_shadowDepthTextureHeight != renderingResolution.y))) + { _shadowDepthTextureWidth = renderingResolution.x * 2; _shadowDepthTextureHeight = renderingResolution.y * 2; updateDepthTexture(); @@ -453,8 +455,6 @@ void ShadowComponent::createDepthTexture() { glGenTextures(1, &_shadowDepthTexture); updateDepthTexture(); - checkGLError("createDepthTexture() -- Depth texture created"); - _shadowData.shadowDepthTexture = _shadowDepthTexture; //_shadowData.positionInLightSpaceTexture = _positionInLightSpaceTexture; } @@ -472,14 +472,13 @@ void ShadowComponent::createShadowFBO() { 0 ); - /*glFramebufferTexture( - GL_FRAMEBUFFER, - GL_COLOR_ATTACHMENT0, - _positionInLightSpaceTexture, - 0 - );*/ + //glFramebufferTexture( + // GL_FRAMEBUFFER, + // GL_COLOR_ATTACHMENT0, + // _positionInLightSpaceTexture, + // 0 + //); - checkGLError("createShadowFBO() -- Created Shadow Framebuffer"); //GLenum drawBuffers[] = { GL_COLOR_ATTACHMENT0, GL_NONE, GL_NONE }; GLenum drawBuffers[] = { GL_NONE, GL_NONE, GL_NONE }; glDrawBuffers(3, drawBuffers); @@ -492,15 +491,15 @@ void ShadowComponent::createShadowFBO() { void ShadowComponent::updateDepthTexture() { glBindTexture(GL_TEXTURE_2D, _shadowDepthTexture); - /* - glTexStorage2D( - GL_TEXTURE_2D, - 1, - GL_DEPTH_COMPONENT32F, - _shadowDepthTextureWidth, - _shadowDepthTextureHeight - ); - */ + + //glTexStorage2D( + // GL_TEXTURE_2D, + // 1, + // GL_DEPTH_COMPONENT32F, + // _shadowDepthTextureWidth, + // _shadowDepthTextureHeight + //); + glTexImage2D( GL_TEXTURE_2D, 0, @@ -521,30 +520,30 @@ void ShadowComponent::updateDepthTexture() { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); - /*glGenTextures(1, &_positionInLightSpaceTexture); - glBindTexture(GL_TEXTURE_2D, _positionInLightSpaceTexture); - glTexImage2D( - GL_TEXTURE_2D, - 0, - GL_RGB32F, - _shadowDepthTextureWidth, - _shadowDepthTextureHeight, - 0, - GL_RGBA, - GL_FLOAT, - nullptr - ); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);*/ + //glGenTextures(1, &_positionInLightSpaceTexture); + //glBindTexture(GL_TEXTURE_2D, _positionInLightSpaceTexture); + //glTexImage2D( + // GL_TEXTURE_2D, + // 0, + // GL_RGB32F, + // _shadowDepthTextureWidth, + // _shadowDepthTextureHeight, + // 0, + // GL_RGBA, + // GL_FLOAT, + // nullptr + //); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glBindTexture(GL_TEXTURE_2D, 0); } void ShadowComponent::saveDepthBuffer() { int size = _shadowDepthTextureWidth * _shadowDepthTextureHeight; - GLubyte* buffer = new GLubyte[size]; + std::vector buffer(size); glReadPixels( 0, @@ -553,10 +552,9 @@ void ShadowComponent::saveDepthBuffer() { _shadowDepthTextureHeight, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, - buffer + buffer.data() ); - checkGLError("readDepthBuffer To buffer"); std::fstream ppmFile; ppmFile.open("depthBufferShadowMapping.ppm", std::fstream::out); @@ -582,9 +580,9 @@ void ShadowComponent::saveDepthBuffer() { std::cout << "Texture saved to file depthBufferShadowMapping.ppm\n\n"; } - delete[] buffer; + buffer.clear(); - GLfloat* bBuffer = new GLfloat[size * 4]; + std::vector bBuffer(size * 4); glReadBuffer(GL_COLOR_ATTACHMENT3); glReadPixels( @@ -594,10 +592,9 @@ void ShadowComponent::saveDepthBuffer() { _shadowDepthTextureHeight, GL_RGBA, GL_FLOAT, - bBuffer + bBuffer.data() ); - checkGLError("readPositionBuffer To buffer"); ppmFile.clear(); ppmFile.open("positionBufferShadowMapping.ppm", std::fstream::out); @@ -636,56 +633,7 @@ void ShadowComponent::saveDepthBuffer() { ppmFile.close(); - std::cout << "Texture saved to file positionBufferShadowMapping.ppm\n\n"; - } - - delete[] bBuffer; -} - -void ShadowComponent::checkGLError(const std::string & where) const { - const GLenum error = glGetError(); - switch (error) { - case GL_NO_ERROR: - break; - case GL_INVALID_ENUM: - LERRORC( - "OpenGL Invalid State", - fmt::format("Function {}: GL_INVALID_ENUM", where) - ); - break; - case GL_INVALID_VALUE: - LERRORC( - "OpenGL Invalid State", - fmt::format("Function {}: GL_INVALID_VALUE", where) - ); - break; - case GL_INVALID_OPERATION: - LERRORC( - "OpenGL Invalid State", - fmt::format( - "Function {}: GL_INVALID_OPERATION", where - )); - break; - case GL_INVALID_FRAMEBUFFER_OPERATION: - LERRORC( - "OpenGL Invalid State", - fmt::format( - "Function {}: GL_INVALID_FRAMEBUFFER_OPERATION", - where - ) - ); - break; - case GL_OUT_OF_MEMORY: - LERRORC( - "OpenGL Invalid State", - fmt::format("Function {}: GL_OUT_OF_MEMORY", where) - ); - break; - default: - LERRORC( - "OpenGL Invalid State", - fmt::format("Unknown error code: {0:x}", static_cast(error)) - ); + LINFO("Texture saved to file positionBufferShadowMapping.ppm"); } } diff --git a/modules/globebrowsing/src/shadowcomponent.h b/modules/globebrowsing/src/shadowcomponent.h index d1505a3e31..6be4766419 100644 --- a/modules/globebrowsing/src/shadowcomponent.h +++ b/modules/globebrowsing/src/shadowcomponent.h @@ -41,15 +41,9 @@ #include #include -namespace ghoul { - class Dictionary; -} - +namespace ghoul { class Dictionary; } namespace ghoul::filesystem { class File; } - -namespace ghoul::opengl { - class ProgramObject; -} // namespace ghoul::opengl +namespace ghoul::opengl { class ProgramObject; } namespace openspace { struct RenderData; @@ -57,8 +51,6 @@ namespace openspace { namespace documentation { struct Documentation; } -static const GLfloat ShadowBorder[] = { 1.f, 1.f, 1.f, 1.f }; - class ShadowComponent : public properties::PropertyOwner { public: struct ShadowMapData { @@ -94,7 +86,6 @@ private: // Debug void saveDepthBuffer(); - void checkGLError(const std::string & where) const; ShadowMapData _shadowData;