mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-18 11:54:59 -04:00
wip better fog, depth texture
This commit is contained in:
parent
aca57fd5f0
commit
64e8d056cc
@ -219,9 +219,9 @@ class RenderWindow(
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderStats.startFrame()
|
renderStats.startFrame()
|
||||||
|
framebufferManager.clear()
|
||||||
renderSystem.framebuffer = null
|
renderSystem.framebuffer = null
|
||||||
renderSystem.clear(IntegratedBufferTypes.COLOR_BUFFER, IntegratedBufferTypes.DEPTH_BUFFER)
|
renderSystem.clear(IntegratedBufferTypes.COLOR_BUFFER, IntegratedBufferTypes.DEPTH_BUFFER)
|
||||||
framebufferManager.clear()
|
|
||||||
|
|
||||||
|
|
||||||
val currentTickTime = TimeUtil.time
|
val currentTickTime = TimeUtil.time
|
||||||
|
@ -2,6 +2,7 @@ package de.bixilon.minosoft.gui.rendering.framebuffer
|
|||||||
|
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||||
import de.bixilon.minosoft.gui.rendering.renderer.Drawable
|
import de.bixilon.minosoft.gui.rendering.renderer.Drawable
|
||||||
|
import de.bixilon.minosoft.gui.rendering.system.base.BlendingFunctions
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.IntegratedBufferTypes
|
import de.bixilon.minosoft.gui.rendering.system.base.IntegratedBufferTypes
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes
|
import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer
|
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer
|
||||||
@ -20,18 +21,19 @@ interface IntegratedFramebuffer : Drawable {
|
|||||||
framebuffer.init()
|
framebuffer.init()
|
||||||
shader.load()
|
shader.load()
|
||||||
shader.use()
|
shader.use()
|
||||||
shader.setInt("uTexture", 0)
|
shader.setInt("uColor", 0)
|
||||||
|
shader.setInt("uDepth", 1)
|
||||||
mesh.load()
|
mesh.load()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun clear() {
|
fun clear() {
|
||||||
renderWindow.renderSystem.framebuffer = framebuffer
|
renderWindow.renderSystem.framebuffer = framebuffer
|
||||||
renderWindow.renderSystem.clear(IntegratedBufferTypes.COLOR_BUFFER, IntegratedBufferTypes.DEPTH_BUFFER, IntegratedBufferTypes.STENCIL_BUFFER)
|
renderWindow.renderSystem.clear(IntegratedBufferTypes.COLOR_BUFFER, IntegratedBufferTypes.DEPTH_BUFFER)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun draw() {
|
override fun draw() {
|
||||||
renderWindow.renderSystem.framebuffer = null
|
renderWindow.renderSystem.framebuffer = null
|
||||||
renderWindow.renderSystem.reset(blending = true)
|
renderWindow.renderSystem.reset(blending = true, sourceRGB = BlendingFunctions.SOURCE_ALPHA, destinationRGB = BlendingFunctions.ONE_MINUS_SOURCE_ALPHA)
|
||||||
framebuffer.bindTexture()
|
framebuffer.bindTexture()
|
||||||
shader.use()
|
shader.use()
|
||||||
mesh.draw()
|
mesh.draw()
|
||||||
|
@ -42,7 +42,6 @@ import de.bixilon.minosoft.gui.rendering.modding.events.ResizeWindowEvent
|
|||||||
import de.bixilon.minosoft.gui.rendering.renderer.Drawable
|
import de.bixilon.minosoft.gui.rendering.renderer.Drawable
|
||||||
import de.bixilon.minosoft.gui.rendering.renderer.Renderer
|
import de.bixilon.minosoft.gui.rendering.renderer.Renderer
|
||||||
import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder
|
import de.bixilon.minosoft.gui.rendering.renderer.RendererBuilder
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.IntegratedBufferTypes
|
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes
|
import de.bixilon.minosoft.gui.rendering.system.base.PolygonModes
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
|
import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer
|
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer
|
||||||
@ -176,7 +175,6 @@ class HUDRenderer(
|
|||||||
lastTickTime = time
|
lastTickTime = time
|
||||||
}
|
}
|
||||||
|
|
||||||
renderWindow.renderSystem.clear(IntegratedBufferTypes.DEPTH_BUFFER)
|
|
||||||
var z = 0
|
var z = 0
|
||||||
for (element in hudElements) {
|
for (element in hudElements) {
|
||||||
if (!element.enabled) {
|
if (!element.enabled) {
|
||||||
|
@ -116,7 +116,6 @@ class RendererManager(
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
renderSystem.polygonMode = renderer.polygonMode
|
renderSystem.polygonMode = renderer.polygonMode
|
||||||
renderSystem.framebuffer = renderer.framebuffer
|
|
||||||
renderer.drawPre()
|
renderer.drawPre()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,7 +132,6 @@ class RendererManager(
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
renderSystem.polygonMode = renderer.polygonMode
|
renderSystem.polygonMode = renderer.polygonMode
|
||||||
renderSystem.framebuffer = renderer.framebuffer
|
|
||||||
renderer.drawPost()
|
renderer.drawPost()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,8 @@ import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.Framebuffer
|
|||||||
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.FramebufferState
|
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.FramebufferState
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.texture.FramebufferTexture
|
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.texture.FramebufferTexture
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.buffer.render.Renderbuffer
|
import de.bixilon.minosoft.gui.rendering.system.base.buffer.render.Renderbuffer
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.buffer.render.RenderbufferModes
|
import de.bixilon.minosoft.gui.rendering.system.opengl.buffer.frame.texture.OpenGLFramebufferColorTexture
|
||||||
import de.bixilon.minosoft.gui.rendering.system.opengl.buffer.frame.texture.OpenGLFramebufferTexture
|
import de.bixilon.minosoft.gui.rendering.system.opengl.buffer.frame.texture.OpenGLFramebufferDepthTexture
|
||||||
import de.bixilon.minosoft.gui.rendering.system.opengl.buffer.render.OpenGLRenderbuffer
|
import de.bixilon.minosoft.gui.rendering.system.opengl.buffer.render.OpenGLRenderbuffer
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
import org.lwjgl.opengl.GL30.*
|
import org.lwjgl.opengl.GL30.*
|
||||||
@ -16,7 +16,8 @@ class OpenGLFramebuffer(var size: Vec2i) : Framebuffer {
|
|||||||
|
|
||||||
private var id = -1
|
private var id = -1
|
||||||
|
|
||||||
private lateinit var texture: OpenGLFramebufferTexture
|
private lateinit var colorTexture: OpenGLFramebufferColorTexture
|
||||||
|
private lateinit var depthTexture: OpenGLFramebufferDepthTexture
|
||||||
private lateinit var renderbuffer: OpenGLRenderbuffer
|
private lateinit var renderbuffer: OpenGLRenderbuffer
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
@ -26,13 +27,19 @@ class OpenGLFramebuffer(var size: Vec2i) : Framebuffer {
|
|||||||
|
|
||||||
glViewport(0, 0, size.x, size.y)
|
glViewport(0, 0, size.x, size.y)
|
||||||
|
|
||||||
texture = OpenGLFramebufferTexture(size)
|
colorTexture = OpenGLFramebufferColorTexture(size)
|
||||||
texture.init()
|
colorTexture.init()
|
||||||
attach(texture)
|
attach(colorTexture)
|
||||||
|
|
||||||
renderbuffer = OpenGLRenderbuffer(RenderbufferModes.DEPTH_COMPONENT24, size)
|
//renderbuffer = OpenGLRenderbuffer(RenderbufferModes.DEPTH_COMPONENT24, size)
|
||||||
renderbuffer.init()
|
//renderbuffer.init()
|
||||||
attach(renderbuffer)
|
//attach(renderbuffer)
|
||||||
|
|
||||||
|
depthTexture = OpenGLFramebufferDepthTexture(size)
|
||||||
|
depthTexture.init()
|
||||||
|
attach(depthTexture)
|
||||||
|
|
||||||
|
glDrawBuffers(intArrayOf(GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT))
|
||||||
|
|
||||||
check(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE) { "Framebuffer is incomplete!" }
|
check(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE) { "Framebuffer is incomplete!" }
|
||||||
state = FramebufferState.COMPLETE
|
state = FramebufferState.COMPLETE
|
||||||
@ -53,8 +60,11 @@ class OpenGLFramebuffer(var size: Vec2i) : Framebuffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun attach(texture: FramebufferTexture) {
|
override fun attach(texture: FramebufferTexture) {
|
||||||
check(texture is OpenGLFramebufferTexture) { "Can not attach non OpenGL texture!" }
|
when (texture) {
|
||||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.id, 0)
|
is OpenGLFramebufferDepthTexture -> glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, texture.id, 0)
|
||||||
|
is OpenGLFramebufferColorTexture -> glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.id, 0)
|
||||||
|
else -> throw IllegalArgumentException("Can not attach non OpenGL texture!")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun delete() {
|
override fun delete() {
|
||||||
@ -66,16 +76,16 @@ class OpenGLFramebuffer(var size: Vec2i) : Framebuffer {
|
|||||||
|
|
||||||
override fun bindTexture() {
|
override fun bindTexture() {
|
||||||
check(state == FramebufferState.COMPLETE) { "Framebuffer is incomplete!" }
|
check(state == FramebufferState.COMPLETE) { "Framebuffer is incomplete!" }
|
||||||
glActiveTexture(GL_TEXTURE0)
|
colorTexture.bind(0)
|
||||||
glBindTexture(GL_TEXTURE_2D, texture.id)
|
depthTexture.bind(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun resize(size: Vec2i) {
|
override fun resize(size: Vec2i) {
|
||||||
if (size == this.size) {
|
if (size == this.size) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (this::texture.isInitialized) {
|
if (this::colorTexture.isInitialized) {
|
||||||
texture.unload()
|
colorTexture.unload()
|
||||||
}
|
}
|
||||||
if (this::renderbuffer.isInitialized) {
|
if (this::renderbuffer.isInitialized) {
|
||||||
renderbuffer.unload()
|
renderbuffer.unload()
|
||||||
|
@ -5,23 +5,15 @@ import glm_.vec2.Vec2i
|
|||||||
import org.lwjgl.opengl.GL30.*
|
import org.lwjgl.opengl.GL30.*
|
||||||
import java.nio.ByteBuffer
|
import java.nio.ByteBuffer
|
||||||
|
|
||||||
class OpenGLFramebufferTexture(
|
class OpenGLFramebufferColorTexture(
|
||||||
override val size: Vec2i,
|
override val size: Vec2i,
|
||||||
) : FramebufferTexture {
|
) : OpenGLTexture(), FramebufferTexture {
|
||||||
var id: Int = -1
|
|
||||||
private set
|
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
id = glGenTextures()
|
id = glGenTextures()
|
||||||
glBindTexture(GL_TEXTURE_2D, id)
|
glBindTexture(GL_TEXTURE_2D, id)
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.x, size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, null as ByteBuffer?)
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.x, size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, null as ByteBuffer?)
|
||||||
//glTexImage2D(GL_TEXTURE_2D, 0,GL_DEPTH_COMPONENT24, size.x, size.y, 0,GL_DEPTH_COMPONENT, GL_FLOAT, 0);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun unload() {
|
|
||||||
glDeleteTextures(id)
|
|
||||||
id = -1
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package de.bixilon.minosoft.gui.rendering.system.opengl.buffer.frame.texture
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.gui.rendering.system.base.buffer.frame.texture.FramebufferTexture
|
||||||
|
import glm_.vec2.Vec2i
|
||||||
|
import org.lwjgl.opengl.GL30.*
|
||||||
|
import java.nio.ByteBuffer
|
||||||
|
|
||||||
|
class OpenGLFramebufferDepthTexture(
|
||||||
|
override val size: Vec2i,
|
||||||
|
) : OpenGLTexture(), FramebufferTexture {
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
id = glGenTextures()
|
||||||
|
glBindTexture(GL_TEXTURE_2D, id)
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, size.x, size.y, 0, GL_DEPTH_COMPONENT, GL_FLOAT, null as ByteBuffer?)
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE)
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package de.bixilon.minosoft.gui.rendering.system.opengl.buffer.frame.texture
|
||||||
|
|
||||||
|
import org.lwjgl.opengl.GL11.*
|
||||||
|
import org.lwjgl.opengl.GL13.GL_TEXTURE0
|
||||||
|
import org.lwjgl.opengl.GL13.glActiveTexture
|
||||||
|
|
||||||
|
abstract class OpenGLTexture {
|
||||||
|
var id: Int = -1
|
||||||
|
protected set
|
||||||
|
|
||||||
|
abstract fun init()
|
||||||
|
|
||||||
|
fun bind(target: Int) {
|
||||||
|
check(target in 0 until 12)
|
||||||
|
glActiveTexture(GL_TEXTURE0 + target)
|
||||||
|
glBindTexture(GL_TEXTURE_2D, id)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun unload() {
|
||||||
|
glDeleteTextures(id)
|
||||||
|
id = -1
|
||||||
|
}
|
||||||
|
}
|
@ -17,11 +17,11 @@ in vec2 finUV;
|
|||||||
|
|
||||||
out vec4 foutColor;
|
out vec4 foutColor;
|
||||||
|
|
||||||
uniform sampler2D uTexture;
|
uniform sampler2D uColor;
|
||||||
|
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
foutColor = texture(uTexture, finUV);
|
foutColor = texture(uColor, finUV);
|
||||||
|
|
||||||
if (foutColor.a == 0.0f) {
|
if (foutColor.a == 0.0f) {
|
||||||
discard;
|
discard;
|
||||||
|
@ -17,11 +17,17 @@ in vec2 finUV;
|
|||||||
|
|
||||||
out vec4 foutColor;
|
out vec4 foutColor;
|
||||||
|
|
||||||
uniform sampler2D uTexture;
|
uniform sampler2D uColor;
|
||||||
|
uniform sampler2D uDepth;
|
||||||
|
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
foutColor = texture(uTexture, finUV);
|
vec4 color = texture(uColor, finUV);
|
||||||
|
if (color.a == 0.0f) {
|
||||||
|
discard;
|
||||||
|
}
|
||||||
|
float depth = texture(uDepth, finUV).r;
|
||||||
|
foutColor = vec4(color.xyz, depth);
|
||||||
|
|
||||||
if (foutColor.a == 0.0f) {
|
if (foutColor.a == 0.0f) {
|
||||||
discard;
|
discard;
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
/*
|
|
||||||
* Minosoft
|
|
||||||
* Copyright (C) 2020 Moritz Zwerger
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef POSTPROCESSING_FOG
|
|
||||||
in vec3 finVertexPosition;
|
|
||||||
uniform vec3 uCameraPosition;
|
|
||||||
uniform float uFogStart;
|
|
||||||
uniform float uFogEnd;
|
|
||||||
uniform vec4 uFogColor;
|
|
||||||
|
|
||||||
|
|
||||||
float getFogFactor(float distance) {
|
|
||||||
if (distance >= uFogEnd) {
|
|
||||||
return 0.0f;
|
|
||||||
}
|
|
||||||
if (distance <= uFogStart) {
|
|
||||||
return 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ToDo: Exponential fog
|
|
||||||
return (uFogEnd - distance) / (uFogEnd - uFogStart);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
work();
|
|
||||||
|
|
||||||
#ifdef POSTPROCESSING_FOG
|
|
||||||
float fogFactor = getFogFactor(distance(uCameraPosition, finVertexPosition));
|
|
||||||
|
|
||||||
if (fogFactor != 1.0f) {
|
|
||||||
foutColor = vec4(mix(uFogColor.rgb, foutColor.rgb, fogFactor), foutColor.a);
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
/*
|
|
||||||
* Minosoft
|
|
||||||
* Copyright (C) 2020 Moritz Zwerger
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
|
||||||
*/
|
|
||||||
|
|
||||||
out vec3 finVertexPosition;
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
work();
|
|
||||||
finVertexPosition = vinPosition;
|
|
||||||
}
|
|
@ -23,11 +23,9 @@ in float finInterpolation;
|
|||||||
|
|
||||||
in vec4 finTintColor;
|
in vec4 finTintColor;
|
||||||
|
|
||||||
#define POSTPROCESSING_FOG
|
|
||||||
|
|
||||||
#include "minosoft:texture"
|
#include "minosoft:texture"
|
||||||
|
|
||||||
void work() {
|
void main() {
|
||||||
vec4 firstTexelColor = getTexture(finTextureIndex1, finTextureCoordinates1);
|
vec4 firstTexelColor = getTexture(finTextureIndex1, finTextureCoordinates1);
|
||||||
if (firstTexelColor.a == 0.0f) {
|
if (firstTexelColor.a == 0.0f) {
|
||||||
discard;
|
discard;
|
||||||
@ -61,5 +59,3 @@ void work() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "minosoft:postprocessing/fragment"
|
|
||||||
|
@ -28,13 +28,11 @@ out vec4 finTintColor;
|
|||||||
|
|
||||||
uniform mat4 uViewProjectionMatrix;
|
uniform mat4 uViewProjectionMatrix;
|
||||||
|
|
||||||
#define POSTPROCESSING_FOG
|
|
||||||
|
|
||||||
#include "minosoft:animation"
|
#include "minosoft:animation"
|
||||||
#include "minosoft:color"
|
#include "minosoft:color"
|
||||||
#include "minosoft:light"
|
#include "minosoft:light"
|
||||||
|
|
||||||
void work() {
|
void main() {
|
||||||
gl_Position = uViewProjectionMatrix * vec4(vinPosition, 1.0f);
|
gl_Position = uViewProjectionMatrix * vec4(vinPosition, 1.0f);
|
||||||
finTintColor = getRGBColor(vinTintColorAndLight & 0xFFFFFFu) * getLight(vinTintColorAndLight >> 24u);
|
finTintColor = getRGBColor(vinTintColorAndLight & 0xFFFFFFu) * getLight(vinTintColorAndLight >> 24u);
|
||||||
|
|
||||||
@ -60,5 +58,3 @@ void work() {
|
|||||||
|
|
||||||
finInterpolation = interpolation / 100.0f;
|
finInterpolation = interpolation / 100.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "minosoft:postprocessing/vertex"
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user