Skip to content
This repository has been archived by the owner on Jul 8, 2022. It is now read-only.

Commit

Permalink
Fixes GpuShapeView not using renderColorMul (#708)
Browse files Browse the repository at this point in the history
  • Loading branch information
soywiz authored May 30, 2022
1 parent c39a2c7 commit c210a1f
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 13 deletions.
8 changes: 7 additions & 1 deletion korge-sandbox/src/commonMain/kotlin/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ suspend fun main() = Korge(
multithreaded = true,
//debugAg = true,
) {
mainFilterSwitch()
mainCircleColor()
//mainFilterSwitch()
//mainVectorFill()
//mainEasing()
//mainTweenPoint()
Expand Down Expand Up @@ -125,6 +126,11 @@ suspend fun main() = Korge(
// }
//}

suspend fun Stage.mainCircleColor() {
colorMul = Colors.RED.withAd(0.9)
circle(100.0)
}

suspend fun Stage.rotatedTexture() {
//val tex = resourcesVfs["korim.png"].readBitmapSlice().rotateRight()
//val tex = resourcesVfs["korim.png"].readBitmapSlice().flipY()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ open class GpuShapeView(
val mat = if (doRequireTexture) globalMatrix * ctx.bp.globalToWindowMatrix else globalMatrix
renderMat.copyFrom(mat)
renderMat.pretranslate(-anchorDispX, -anchorDispY)
gpuShapeViewCommands.render(ctx, renderMat, localMatrix, renderAlpha, applyScissor)
gpuShapeViewCommands.render(ctx, renderMat, localMatrix, applyScissor, renderColorMul)
}

private fun renderShape(shape: Shape) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import com.soywiz.korge.internal.KorgeInternal
import com.soywiz.korge.render.AgCachedBuffer
import com.soywiz.korge.render.RenderContext
import com.soywiz.korim.bitmap.Bitmap
import com.soywiz.korim.color.RGBA
import com.soywiz.korim.color.writeFloat
import com.soywiz.korma.geom.Matrix
import com.soywiz.korma.geom.Rectangle
import com.soywiz.korma.geom.applyTransform
Expand Down Expand Up @@ -94,8 +96,9 @@ class GpuShapeViewCommands {
}

private val decomposed = Matrix.Transform()
private val tempColorMul = FloatArray(4)
private val texturesToDelete = FastArrayList<AG.Texture>()
fun render(ctx: RenderContext, globalMatrix: Matrix, localMatrix: Matrix, globalAlpha: Double, applyScissor: Boolean) {
fun render(ctx: RenderContext, globalMatrix: Matrix, localMatrix: Matrix, applyScissor: Boolean, colorMul: RGBA) {
val vertices = this.vertices ?: return
ctx.agBufferManager.delete(verticesToDelete)
verticesToDelete.clear()
Expand All @@ -104,7 +107,8 @@ class GpuShapeViewCommands {
val ag = ctx.ag
ctx.useBatcher { batcher ->
batcher.updateStandardUniforms()
batcher.setTemporalUniform(GpuShapeViewPrograms.u_GlobalAlpha, globalAlpha.toFloat()) {
colorMul.writeFloat(tempColorMul)
batcher.setTemporalUniform(GpuShapeViewPrograms.u_ColorMul, tempColorMul) {
batcher.setViewMatrixTemp(globalMatrix) {
globalMatrix.decompose(decomposed)
// @TODO: Use this scale
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ object GpuShapeViewPrograms {
val u_ProgramType = Uniform("u_ProgramType", VarType.Float1)
val u_LineWidth = Uniform("u_LineWidth", VarType.Float1)
val u_Color = Uniform("u_Color", VarType.Float4)
val u_ColorMul = Uniform("u_ColorMul", VarType.Float4)
val u_GlobalAlpha = Uniform("u_GlobalAlpha", VarType.Float1)
val u_Transform = Uniform("u_Transform", VarType.Mat4)
val u_Gradientp0 = Uniform("u_Gradientp0", VarType.Float3)
Expand Down Expand Up @@ -146,6 +147,7 @@ object GpuShapeViewPrograms {

// Update global alpha
SET(out.a, out.a * u_GlobalAlpha)
SET(out, out * u_ColorMul)
IF(abs(v_Dist) ge LW1) {
//run {
val aaAlpha = 1f.lit - (abs(v_Dist) - LW1)
Expand Down
6 changes: 4 additions & 2 deletions korge/src/jvmTest/resources/korge/render/GpuShapeView.log
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ RenderBuffer[1].setSize(200, 200)
RenderBuffer[1].set()
clear(#00000000, 1.0, 0, true, true, true)
createBuffer():4
programCreate: 1, Program(name=GpuShapeViewPrograms.Combined, attributes=[a_Pos, a_Tex, a_Dist], uniforms=[u_ProjMat, u_ViewMat, u_ProgramType, u_LineWidth, u_Color, u_Tex, u_Transform, u_Gradientp0, u_Gradientp1, u_GlobalAlpha]), ProgramConfig(externalTextureSampler=false)
programCreate: 1, Program(name=GpuShapeViewPrograms.Combined, attributes=[a_Pos, a_Tex, a_Dist], uniforms=[u_ProjMat, u_ViewMat, u_ProgramType, u_LineWidth, u_Color, u_Tex, u_Transform, u_Gradientp0, u_Gradientp1, u_GlobalAlpha, u_ColorMul]), ProgramConfig(externalTextureSampler=false)
programCreate.fragment:#version 100 compatibility
#ifdef GL_ES
precision highp float;
Expand All @@ -25,6 +25,7 @@ uniform mat4 u_Transform;
uniform vec3 u_Gradientp0;
uniform vec3 u_Gradientp1;
uniform float u_GlobalAlpha;
uniform vec4 u_ColorMul;
varying mediump float v_Dist;
varying mediump vec2 v_Tex;
void main() {
Expand Down Expand Up @@ -76,6 +77,7 @@ void main() {
}
}
gl_FragColor.w = (gl_FragColor.w * u_GlobalAlpha);
gl_FragColor = (gl_FragColor * u_ColorMul);
if ((abs(v_Dist) >= (u_LineWidth - 1.0))) {
gl_FragColor.a = (gl_FragColor.a * (1.0 - (abs(v_Dist) - (u_LineWidth - 1.0))));
}
Expand Down Expand Up @@ -129,7 +131,7 @@ uboSet.uniform: Uniform(u_Tex0) = TextureUnit(texture=null, linear=false, trilin
uboSet.uniform: Uniform(u_Tex1) = TextureUnit(texture=null, linear=false, trilinear=null)
uboSet.uniform: Uniform(u_Tex2) = TextureUnit(texture=null, linear=false, trilinear=null)
uboSet.uniform: Uniform(u_Tex3) = TextureUnit(texture=null, linear=false, trilinear=null)
uboSet.uniform: Uniform(u_GlobalAlpha) = 1.0
uboSet.uniform: Uniform(u_ColorMul) = [1.0, 1.0, 1.0, 1.0]
uboUse: 1
uboCreate: 2
createStencil: 0
Expand Down
6 changes: 4 additions & 2 deletions korge/src/jvmTest/resources/korge/render/Graphics.log
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ RenderBuffer[1].setSize(200, 200)
RenderBuffer[1].set()
clear(#00000000, 1.0, 0, true, true, true)
createBuffer():4
programCreate: 2, Program(name=GpuShapeViewPrograms.Combined, attributes=[a_Pos, a_Tex, a_Dist], uniforms=[u_ProjMat, u_ViewMat, u_ProgramType, u_LineWidth, u_Color, u_Tex, u_Transform, u_Gradientp0, u_Gradientp1, u_GlobalAlpha]), ProgramConfig(externalTextureSampler=false)
programCreate: 2, Program(name=GpuShapeViewPrograms.Combined, attributes=[a_Pos, a_Tex, a_Dist], uniforms=[u_ProjMat, u_ViewMat, u_ProgramType, u_LineWidth, u_Color, u_Tex, u_Transform, u_Gradientp0, u_Gradientp1, u_GlobalAlpha, u_ColorMul]), ProgramConfig(externalTextureSampler=false)
programCreate.fragment:#version 100 compatibility
#ifdef GL_ES
precision highp float;
Expand All @@ -148,6 +148,7 @@ uniform mat4 u_Transform;
uniform vec3 u_Gradientp0;
uniform vec3 u_Gradientp1;
uniform float u_GlobalAlpha;
uniform vec4 u_ColorMul;
varying mediump float v_Dist;
varying mediump vec2 v_Tex;
void main() {
Expand Down Expand Up @@ -199,6 +200,7 @@ void main() {
}
}
gl_FragColor.w = (gl_FragColor.w * u_GlobalAlpha);
gl_FragColor = (gl_FragColor * u_ColorMul);
if ((abs(v_Dist) >= (u_LineWidth - 1.0))) {
gl_FragColor.a = (gl_FragColor.a * (1.0 - (abs(v_Dist) - (u_LineWidth - 1.0))));
}
Expand Down Expand Up @@ -251,7 +253,7 @@ uboSet.uniform: Uniform(u_Tex0) = TextureUnit(texture=null, linear=true, triline
uboSet.uniform: Uniform(u_Tex1) = TextureUnit(texture=null, linear=true, trilinear=null)
uboSet.uniform: Uniform(u_Tex2) = TextureUnit(texture=null, linear=true, trilinear=null)
uboSet.uniform: Uniform(u_Tex3) = TextureUnit(texture=null, linear=true, trilinear=null)
uboSet.uniform: Uniform(u_GlobalAlpha) = 1.0
uboSet.uniform: Uniform(u_ColorMul) = [1.0, 1.0, 1.0, 1.0]
uboUse: 1
uboCreate: 2
createStencil: 0
Expand Down
13 changes: 8 additions & 5 deletions korge/src/jvmTest/resources/korge/render/OpenGLShapeView.log
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ uniform mat4 u_Transform;
uniform vec3 u_Gradientp0;
uniform vec3 u_Gradientp1;
uniform float u_GlobalAlpha;
uniform vec4 u_ColorMul;
varying float v_Dist;
varying vec2 v_Tex;
void main() {
Expand Down Expand Up @@ -60,6 +61,7 @@ void main() {
}
}
gl_FragColor.w = (gl_FragColor.w * u_GlobalAlpha);
gl_FragColor = (gl_FragColor * u_ColorMul);
if ((abs(v_Dist) >= (u_LineWidth - 1.0))) {
gl_FragColor.a = (gl_FragColor.a * (1.0 - (abs(v_Dist) - (u_LineWidth - 1.0))));
}
Expand Down Expand Up @@ -122,18 +124,19 @@ getUniformLocation(1001, "u_Tex3") = 7006
activeTexture(33987)
bindTexture(3553, 0)
uniform1i(7006, 3)
getUniformLocation(1001, "u_GlobalAlpha") = 7007
uniform1f(7007, 1.0)
getUniformLocation(1001, "u_ColorMul") = 7007
uniform4f(7007, 1.0, 1.0, 1.0, 1.0)
clearStencil(0)
stencilMask(255)
clear(1024)
getUniformLocation(1001, "u_ProgramType") = 7008
uniform1f(7008, 0.0)
getUniformLocation(1001, "u_Color") = 7009
uniform4f(7009, 1.0, 1.0, 1.0, 0.49803922)
uniform1f(7007, 1.0)
getUniformLocation(1001, "u_LineWidth") = 7010
uniform1f(7010, 6.25)
getUniformLocation(1001, "u_GlobalAlpha") = 7010
uniform1f(7010, 1.0)
getUniformLocation(1001, "u_LineWidth") = 7011
uniform1f(7011, 6.25)
disable(2960)
stencilMask(0)
colorMask(true, true, true, true)
Expand Down

0 comments on commit c210a1f

Please sign in to comment.