Simplify fill shaders;

Now there's 2 instead of 3!  Behavior is the same, fill goes
layer-by-layer onto each view until either the texture or canvas run out
of layers.
This commit is contained in:
bjorn 2023-04-26 22:18:06 -07:00
parent ad20289595
commit 8f654ed408
6 changed files with 6 additions and 36 deletions

View File

@ -7,7 +7,6 @@
#include "shaders/equirect.frag.h"
#include "shaders/fill.vert.h"
#include "shaders/fill_array.frag.h"
#include "shaders/fill_layer.frag.h"
#include "shaders/animator.comp.h"
#include "shaders/blender.comp.h"
#include "shaders/timewizard.comp.h"

View File

@ -1,11 +1,12 @@
#version 460
#extension GL_EXT_multiview : require
#extension GL_GOOGLE_include_directive : require
#extension GL_EXT_samplerless_texture_functions : require
#include "lovr.glsl"
layout(set = 1, binding = 1) uniform texture2DArray ArrayTexture;
vec4 lovrmain() {
return Color * getPixel(ArrayTexture, UV, ViewIndex);
return Color * getPixel(ArrayTexture, UV, min(ViewIndex, textureSize(ArrayTexture, 0).z - 1));
}

View File

@ -1,11 +0,0 @@
#version 460
#extension GL_EXT_multiview : require
#extension GL_GOOGLE_include_directive : require
#include "lovr.glsl"
layout(set = 1, binding = 1) uniform texture2DArray ArrayTexture;
vec4 lovrmain() {
return Color * getPixel(ArrayTexture, UV, 0);
}

View File

@ -56,9 +56,8 @@ StringEntry lovrDefaultShader[] = {
[SHADER_FONT] = ENTRY("font"),
[SHADER_CUBEMAP] = ENTRY("cubemap"),
[SHADER_EQUIRECT] = ENTRY("equirect"),
[SHADER_FILL] = ENTRY("fill"),
[SHADER_FILL_2D] = ENTRY("fill2d"),
[SHADER_FILL_ARRAY] = ENTRY("fillarray"),
[SHADER_FILL_LAYER] = ENTRY("filllayer"),
[SHADER_LOGO] = ENTRY("logo"),
{ 0 }
};

View File

@ -1760,7 +1760,7 @@ ShaderSource lovrGraphicsGetDefaultShaderSource(DefaultShader type, ShaderStage
[STAGE_VERTEX] = { lovr_shader_cubemap_vert, sizeof(lovr_shader_cubemap_vert) },
[STAGE_FRAGMENT] = { lovr_shader_equirect_frag, sizeof(lovr_shader_equirect_frag) }
},
[SHADER_FILL] = {
[SHADER_FILL_2D] = {
[STAGE_VERTEX] = { lovr_shader_fill_vert, sizeof(lovr_shader_fill_vert) },
[STAGE_FRAGMENT] = { lovr_shader_unlit_frag, sizeof(lovr_shader_unlit_frag) }
},
@ -1768,10 +1768,6 @@ ShaderSource lovrGraphicsGetDefaultShaderSource(DefaultShader type, ShaderStage
[STAGE_VERTEX] = { lovr_shader_fill_vert, sizeof(lovr_shader_fill_vert) },
[STAGE_FRAGMENT] = { lovr_shader_fill_array_frag, sizeof(lovr_shader_fill_array_frag) }
},
[SHADER_FILL_LAYER] = {
[STAGE_VERTEX] = { lovr_shader_fill_vert, sizeof(lovr_shader_fill_vert) },
[STAGE_FRAGMENT] = { lovr_shader_fill_layer_frag, sizeof(lovr_shader_fill_layer_frag) }
},
[SHADER_LOGO] = {
[STAGE_VERTEX] = { lovr_shader_unlit_vert, sizeof(lovr_shader_unlit_vert) },
[STAGE_FRAGMENT] = { lovr_shader_logo_frag, sizeof(lovr_shader_logo_frag) }
@ -5693,22 +5689,9 @@ void lovrPassSkybox(Pass* pass, Texture* texture) {
}
void lovrPassFill(Pass* pass, Texture* texture) {
DefaultShader shader;
if (!texture || texture->info.layers == 1) {
shader = SHADER_FILL;
} else if (pass->viewCount > 1 && texture->info.layers > 1) {
lovrCheck(texture->info.layers == pass->viewCount, "Texture layer counts must match to fill between them");
shader = SHADER_FILL_ARRAY;
} else if (pass->viewCount == 1 && texture->info.layers > 1) {
shader = SHADER_FILL_LAYER;
} else {
lovrUnreachable();
}
lovrPassDraw(pass, &(Draw) {
.mode = MESH_TRIANGLES,
.shader = shader,
.shader = texture && texture->info.type == TEXTURE_ARRAY ? SHADER_FILL_ARRAY : SHADER_FILL_2D,
.material = texture ? lovrTextureGetMaterial(texture) : NULL,
.vertex.format = VERTEX_EMPTY,
.count = 3

View File

@ -281,9 +281,8 @@ typedef enum {
SHADER_FONT,
SHADER_CUBEMAP,
SHADER_EQUIRECT,
SHADER_FILL,
SHADER_FILL_2D,
SHADER_FILL_ARRAY,
SHADER_FILL_LAYER,
SHADER_LOGO,
SHADER_ANIMATOR,
SHADER_BLENDER,