mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 18:05:51 -04:00
rendering: use correct sky color
This commit is contained in:
parent
e6f35564b5
commit
bb9d03e58b
@ -23,6 +23,7 @@ import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.CameraMatrixChangeEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.FrustumChangeEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.ScreenResizeEvent
|
||||
import de.bixilon.minosoft.gui.rendering.sky.SkyRenderer
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.blockPosition
|
||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.chunkPosition
|
||||
@ -232,18 +233,19 @@ class Camera(
|
||||
sectionHeight = blockPosition.sectionHeight
|
||||
inChunkSectionPosition = blockPosition.inChunkSectionPosition
|
||||
// recalculate sky color for current biome
|
||||
renderWindow.setSkyColor(connection.world.getBiome(blockPosition)?.skyColor ?: RenderConstants.DEFAULT_SKY_COLOR)
|
||||
val skyRenderer = renderWindow[SkyRenderer] ?: return
|
||||
skyRenderer.setSkyColor(connection.world.getBiome(blockPosition)?.skyColor ?: RenderConstants.DEFAULT_SKY_COLOR)
|
||||
|
||||
frustum.recalculate()
|
||||
connection.fireEvent(FrustumChangeEvent(renderWindow, frustum))
|
||||
|
||||
connection.world.dimension?.hasSkyLight?.let {
|
||||
if (it) {
|
||||
renderWindow.setSkyColor(currentBiome?.skyColor ?: RenderConstants.DEFAULT_SKY_COLOR)
|
||||
skyRenderer.setSkyColor(currentBiome?.skyColor ?: RenderConstants.DEFAULT_SKY_COLOR)
|
||||
} else {
|
||||
renderWindow.setSkyColor(RenderConstants.BLACK_COLOR)
|
||||
skyRenderer.setSkyColor(RenderConstants.BLACK_COLOR)
|
||||
}
|
||||
} ?: renderWindow.setSkyColor(RenderConstants.DEFAULT_SKY_COLOR)
|
||||
} ?: skyRenderer.setSkyColor(RenderConstants.DEFAULT_SKY_COLOR)
|
||||
}
|
||||
|
||||
private fun calculateProjectionMatrix(screenDimensions: Vec2): Mat4 {
|
||||
|
@ -16,8 +16,6 @@ package de.bixilon.minosoft.gui.rendering
|
||||
import de.bixilon.minosoft.config.StaticConfiguration
|
||||
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames
|
||||
import de.bixilon.minosoft.data.mappings.ResourceLocation
|
||||
import de.bixilon.minosoft.data.text.RGBColor
|
||||
import de.bixilon.minosoft.data.text.RGBColor.Companion.asColor
|
||||
import de.bixilon.minosoft.gui.input.key.RenderWindowInputHandler
|
||||
import de.bixilon.minosoft.gui.rendering.chunk.WorldRenderer
|
||||
import de.bixilon.minosoft.gui.rendering.font.Font
|
||||
@ -179,7 +177,7 @@ class RenderWindow(
|
||||
// Make the window visible
|
||||
GL.createCapabilities()
|
||||
|
||||
setSkyColor("#fffe7a".asColor())
|
||||
glClearColor(1.0f, 1.0f, 0.0f, 1.0f)
|
||||
|
||||
Log.log(LogMessageType.RENDERING_LOADING) { "Enabling all open gl features (${stopwatch.labTime()})..." }
|
||||
glEnable(GL_DEPTH_TEST)
|
||||
@ -382,14 +380,9 @@ class RenderWindow(
|
||||
connection.fireEvent(RenderingStateChangeEvent(connection, previousState, renderingState))
|
||||
}
|
||||
|
||||
fun registerRenderer(renderBuilder: RenderBuilder) {
|
||||
val renderer = renderBuilder.build(connection, this)
|
||||
rendererMap[renderBuilder.RESOURCE_LOCATION] = renderer
|
||||
}
|
||||
|
||||
@Deprecated(message = "Will be replaced with SkyRenderer")
|
||||
fun setSkyColor(color: RGBColor) {
|
||||
glClearColor(color.floatRed, color.floatGreen, color.floatBlue, 1.0f)
|
||||
fun registerRenderer(rendererBuilder: RendererBuilder<*>) {
|
||||
val renderer = rendererBuilder.build(connection, this)
|
||||
rendererMap[rendererBuilder.RESOURCE_LOCATION] = renderer
|
||||
}
|
||||
|
||||
fun sendDebugMessage(message: String) {
|
||||
@ -403,4 +396,8 @@ class RenderWindow(
|
||||
fun assertOnRenderThread() {
|
||||
check(Thread.currentThread() == renderThread) { "Current thread (${Thread.currentThread().name} is not the render thread!" }
|
||||
}
|
||||
|
||||
operator fun <T : Renderer> get(renderer: RendererBuilder<T>): T? {
|
||||
return rendererMap[renderer.RESOURCE_LOCATION] as T
|
||||
}
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ package de.bixilon.minosoft.gui.rendering
|
||||
import de.bixilon.minosoft.data.mappings.CompanionResourceLocation
|
||||
import de.bixilon.minosoft.protocol.network.connection.PlayConnection
|
||||
|
||||
interface RenderBuilder : CompanionResourceLocation {
|
||||
interface RendererBuilder<T : Renderer> : CompanionResourceLocation {
|
||||
|
||||
fun build(connection: PlayConnection, renderWindow: RenderWindow): Renderer
|
||||
fun build(connection: PlayConnection, renderWindow: RenderWindow): T
|
||||
}
|
@ -419,7 +419,7 @@ class WorldRenderer(
|
||||
return this + upOrDown.directionVector.y
|
||||
}
|
||||
|
||||
companion object : RenderBuilder {
|
||||
companion object : RendererBuilder<WorldRenderer> {
|
||||
override val RESOURCE_LOCATION = ResourceLocation("minosoft:world_renderer")
|
||||
|
||||
override fun build(connection: PlayConnection, renderWindow: RenderWindow): WorldRenderer {
|
||||
|
@ -16,10 +16,10 @@ package de.bixilon.minosoft.gui.rendering.hud
|
||||
import de.bixilon.minosoft.Minosoft
|
||||
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames
|
||||
import de.bixilon.minosoft.data.mappings.ResourceLocation
|
||||
import de.bixilon.minosoft.gui.rendering.RenderBuilder
|
||||
import de.bixilon.minosoft.gui.rendering.RenderConstants
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.Renderer
|
||||
import de.bixilon.minosoft.gui.rendering.RendererBuilder
|
||||
import de.bixilon.minosoft.gui.rendering.hud.atlas.HUDAtlasElement
|
||||
import de.bixilon.minosoft.gui.rendering.hud.elements.other.CrosshairHUDElement
|
||||
import de.bixilon.minosoft.gui.rendering.hud.nodes.HUDElement
|
||||
@ -214,7 +214,7 @@ class HUDRenderer(val connection: PlayConnection, val renderWindow: RenderWindow
|
||||
return Vec2i(x, y)
|
||||
}
|
||||
|
||||
companion object : RenderBuilder {
|
||||
companion object : RendererBuilder<HUDRenderer> {
|
||||
override val RESOURCE_LOCATION = ResourceLocation("minosoft:hud_renderer")
|
||||
|
||||
override fun build(connection: PlayConnection, renderWindow: RenderWindow): HUDRenderer {
|
||||
|
@ -17,6 +17,7 @@ import de.bixilon.minosoft.Minosoft
|
||||
import de.bixilon.minosoft.data.assets.AssetsManager
|
||||
import de.bixilon.minosoft.data.commands.CommandStringReader
|
||||
import de.bixilon.minosoft.data.mappings.ResourceLocation
|
||||
import de.bixilon.minosoft.data.text.RGBColor
|
||||
import de.bixilon.minosoft.gui.rendering.Rendering
|
||||
import de.bixilon.minosoft.gui.rendering.exceptions.ShaderLoadingException
|
||||
import de.bixilon.minosoft.gui.rendering.util.OpenGLUtil
|
||||
@ -125,6 +126,10 @@ class Shader(
|
||||
}
|
||||
}
|
||||
|
||||
fun setRGBColor(uniformName: String, color: RGBColor) {
|
||||
setVec4(uniformName, Vec4(color.floatRed, color.floatGreen, color.floatBlue, color.alpha))
|
||||
}
|
||||
|
||||
fun setUniform(uniformName: String, data: Any?) {
|
||||
if (data == null) {
|
||||
return
|
||||
|
@ -14,10 +14,12 @@
|
||||
package de.bixilon.minosoft.gui.rendering.sky
|
||||
|
||||
import de.bixilon.minosoft.data.mappings.ResourceLocation
|
||||
import de.bixilon.minosoft.data.text.ChatColors
|
||||
import de.bixilon.minosoft.data.text.RGBColor
|
||||
import de.bixilon.minosoft.gui.rendering.RenderBuilder
|
||||
import de.bixilon.minosoft.gui.rendering.RenderConstants
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.Renderer
|
||||
import de.bixilon.minosoft.gui.rendering.RendererBuilder
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.CameraMatrixChangeEvent
|
||||
import de.bixilon.minosoft.gui.rendering.shader.Shader
|
||||
import de.bixilon.minosoft.gui.rendering.textures.Texture
|
||||
@ -43,12 +45,11 @@ class SkyRenderer(
|
||||
resourceLocation = ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "sky/sun"),
|
||||
)
|
||||
private val skyboxMesh = SkyboxMesh()
|
||||
|
||||
private var skySunMesh = SkySunMesh()
|
||||
|
||||
private var sunTexture = Texture(SUN_TEXTURE_RESOURCE_LOCATION)
|
||||
|
||||
private var recalculateSunNextFrame: Boolean = true
|
||||
private var bottomColor = ChatColors.BLACK
|
||||
private var topColor = RenderConstants.DEFAULT_SKY_COLOR
|
||||
|
||||
|
||||
override fun init() {
|
||||
@ -110,6 +111,21 @@ class SkyRenderer(
|
||||
skySunMesh.draw()
|
||||
}
|
||||
|
||||
fun setSkyColor(color: RGBColor) {
|
||||
topColor = color
|
||||
bottomColor = RGBColor(color.red * 8 / 9, color.green * 8 / 9, color.blue * 8 / 9)
|
||||
renderWindow.renderQueue.add {
|
||||
updateSkyColor()
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateSkyColor() {
|
||||
skyboxShader.use()
|
||||
|
||||
skyboxShader.setRGBColor("bottomColor", bottomColor)
|
||||
skyboxShader.setRGBColor("topColor", topColor)
|
||||
}
|
||||
|
||||
private fun drawSkybox() {
|
||||
skyboxShader.use()
|
||||
skyboxMesh.draw()
|
||||
@ -124,7 +140,7 @@ class SkyRenderer(
|
||||
glDepthFunc(GL_LESS)
|
||||
}
|
||||
|
||||
companion object : RenderBuilder {
|
||||
companion object : RendererBuilder<SkyRenderer> {
|
||||
override val RESOURCE_LOCATION = ResourceLocation("minosoft:sky")
|
||||
|
||||
private val SUN_TEXTURE_RESOURCE_LOCATION = ResourceLocation("minecraft:textures/environment/sun.png")
|
||||
|
@ -18,12 +18,15 @@ out vec4 color;
|
||||
|
||||
uniform mat4 skyViewProjectionMatrix;
|
||||
|
||||
uniform vec4 bottomColor;
|
||||
uniform vec4 topColor;
|
||||
|
||||
void main() {
|
||||
gl_Position = (skyViewProjectionMatrix * vec4(inPosition, 1.0)).xyww;
|
||||
|
||||
if (inPosition.y < 0.5f) {
|
||||
color = vec4(0.0f, 1.0f, 1.0f, 1.0f);
|
||||
color = bottomColor;
|
||||
} else {
|
||||
color = vec4(1.0f, 0.0f, 1.0f, 1.0f);
|
||||
color = topColor;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user