diff --git a/modules/blackhole/rendering/accretion_disk.png b/modules/blackhole/rendering/accretion_disk.png new file mode 100644 index 0000000000..b73562e529 Binary files /dev/null and b/modules/blackhole/rendering/accretion_disk.png differ diff --git a/modules/blackhole/rendering/renderableblackhole.cpp b/modules/blackhole/rendering/renderableblackhole.cpp index 2de52e38b3..9469fc0058 100644 --- a/modules/blackhole/rendering/renderableblackhole.cpp +++ b/modules/blackhole/rendering/renderableblackhole.cpp @@ -190,6 +190,13 @@ namespace openspace { LWARNING("UniformCache is missing 'colorBVMap'"); } +#ifdef M_Kerr + ghoul::opengl::TextureUnit accretionDiskUnit; + if (!bindTexture(_uniformCache.accretionDisk, accretionDiskUnit, _accretionDiskTexture)) { + LWARNING("UniformCache is missing 'accretionDisk'"); + } +#endif // M_Kerr + SendSchwarzschildTableToShader(); SendStarKDTreeToShader(); @@ -343,7 +350,13 @@ namespace openspace { else { LWARNING(std::format("Failed to load environment texture from path '{}'", absPath(_colorBVMapTexturePath).string())); } - +#if M_Kerr + _accretionDiskTexture = ghoul::io::TextureReader::ref().loadTexture(absPath("${MODULE_BLACKHOLE}/rendering/accretion_disk.png"), 1); + + if (_accretionDiskTexture) { + _accretionDiskTexture->uploadTexture(); + } +#endif } void RenderableBlackHole::bindFramebuffer() { diff --git a/modules/blackhole/rendering/renderableblackhole.h b/modules/blackhole/rendering/renderableblackhole.h index 2ccc7a02e2..3f60b92301 100644 --- a/modules/blackhole/rendering/renderableblackhole.h +++ b/modules/blackhole/rendering/renderableblackhole.h @@ -79,11 +79,12 @@ namespace openspace { GLuint _ssboStarKDTree = 0; GLuint _ssboStarKDTreeIndices = 0; - UniformCache(environmentTexture, viewGrid, worldRotationMatrix, cameraRotationMatrix, colorBVMap, r_0) _uniformCache; + UniformCache(environmentTexture, viewGrid, worldRotationMatrix, cameraRotationMatrix, colorBVMap, r_0, accretionDisk) _uniformCache; std::unique_ptr _warpTableTex; std::unique_ptr _environmentTexture; std::unique_ptr _colorBVMapTexture; + std::unique_ptr _accretionDiskTexture; }; } // openspace namespace diff --git a/modules/blackhole/shaders/kerr_fs.glsl b/modules/blackhole/shaders/kerr_fs.glsl index 2ff087e761..16377be00a 100644 --- a/modules/blackhole/shaders/kerr_fs.glsl +++ b/modules/blackhole/shaders/kerr_fs.glsl @@ -10,6 +10,7 @@ in vec2 TexCoord; uniform sampler2D environmentTexture; uniform sampler2D viewGrid; +uniform sampler1D accretionDisk; uniform mat4 cameraRotationMatrix; uniform mat4 worldRotationMatrix; @@ -184,7 +185,7 @@ Fragment getFragment() { frag.color = vec4(0.0f); return frag; } else if(sphericalCoords.x == DISK){ - frag.color = vec4(clamp(sphericalCoords.y, 0.0, 1.0), 0.3*clamp(sphericalCoords.y, 0.0, 1.0), 0.15*clamp(sphericalCoords.y, 0.0, 1.0), 1.0f); + frag.color = vec4(texture(accretionDisk, sphericalCoords.y).rgb, 1.0f); return frag; } vec4 starColor = searchNearestStar(vec3(0.0f, sphericalCoords.x, sphericalCoords.y), l);