mirror of https://github.com/bjornbytes/lovr.git
Improve Pass:fill;
It can now fill an array texture to a multiview pass, copying to the corresponding layers.
This commit is contained in:
parent
d655daf213
commit
5a2fe54c04
|
@ -1,11 +1,12 @@
|
|||
#include "shaders/unlit.vert.h"
|
||||
#include "shaders/unlit.frag.h"
|
||||
#include "shaders/font.frag.h"
|
||||
#include "shaders/fill.vert.h"
|
||||
#include "shaders/cubemap.vert.h"
|
||||
#include "shaders/cubemap.frag.h"
|
||||
#include "shaders/equirect.frag.h"
|
||||
#include "shaders/stereoblit.frag.h"
|
||||
#include "shaders/fill.vert.h"
|
||||
#include "shaders/fill_array.frag.h"
|
||||
#include "shaders/fill_stereo.frag.h"
|
||||
#include "shaders/animator.comp.h"
|
||||
#include "shaders/timewizard.comp.h"
|
||||
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
#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, ViewIndex);
|
||||
}
|
|
@ -157,7 +157,6 @@ layout(location = 14) in vec3 Tangent;
|
|||
vec4 getPixel(texture2D t, vec2 uv) { return texture(sampler2D(t, Sampler), uv); }
|
||||
vec4 getPixel(texture3D t, vec3 uvw) { return texture(sampler3D(t, Sampler), uvw); }
|
||||
vec4 getPixel(textureCube t, vec3 dir) { return texture(samplerCube(t, Sampler), dir); }
|
||||
vec4 getPixel(texture2DArray t, vec2 uv, uint layer) { return texture(sampler2DArray(t, Sampler), vec3(uv, layer)); }
|
||||
vec4 getPixel(texture2DArray t, vec2 uv, float layer) { return texture(sampler2DArray(t, Sampler), vec3(uv, layer)); }
|
||||
#endif
|
||||
|
||||
|
|
|
@ -58,7 +58,6 @@ StringEntry lovrDefaultShader[] = {
|
|||
[SHADER_CUBEMAP] = ENTRY("cubemap"),
|
||||
[SHADER_EQUIRECT] = ENTRY("equirect"),
|
||||
[SHADER_FILL] = ENTRY("fill"),
|
||||
[SHADER_STEREOBLIT] = ENTRY("stereoblit"),
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
|
|
|
@ -1618,9 +1618,13 @@ ShaderSource lovrGraphicsGetDefaultShaderSource(DefaultShader type, ShaderStage
|
|||
{ lovr_shader_fill_vert, sizeof(lovr_shader_fill_vert) },
|
||||
{ lovr_shader_unlit_frag, sizeof(lovr_shader_unlit_frag) }
|
||||
},
|
||||
[SHADER_STEREOBLIT] = {
|
||||
[SHADER_FILL_ARRAY] = {
|
||||
{ lovr_shader_fill_vert, sizeof(lovr_shader_fill_vert) },
|
||||
{ lovr_shader_stereoblit_frag, sizeof(lovr_shader_stereoblit_frag) }
|
||||
{ lovr_shader_fill_array_frag, sizeof(lovr_shader_fill_array_frag) }
|
||||
},
|
||||
[SHADER_FILL_STEREO] = {
|
||||
{ lovr_shader_fill_vert, sizeof(lovr_shader_fill_vert) },
|
||||
{ lovr_shader_fill_stereo_frag, sizeof(lovr_shader_fill_stereo_frag) }
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -4989,10 +4993,20 @@ void lovrPassSkybox(Pass* pass, Texture* texture) {
|
|||
}
|
||||
|
||||
void lovrPassFill(Pass* pass, Texture* texture) {
|
||||
DefaultShader shader = SHADER_FILL;
|
||||
if (texture && texture->info.layers == 2) {
|
||||
shader = SHADER_STEREOBLIT;
|
||||
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) {
|
||||
lovrCheck(texture->info.layers == 2, "To draw an array texture to a mono texture, it must have 2 layers");
|
||||
shader = SHADER_FILL_STEREO;
|
||||
} else {
|
||||
lovrUnreachable();
|
||||
}
|
||||
|
||||
lovrPassDraw(pass, &(Draw) {
|
||||
.mode = MESH_TRIANGLES,
|
||||
.shader = shader,
|
||||
|
|
|
@ -273,7 +273,8 @@ typedef enum {
|
|||
SHADER_CUBEMAP,
|
||||
SHADER_EQUIRECT,
|
||||
SHADER_FILL,
|
||||
SHADER_STEREOBLIT,
|
||||
SHADER_FILL_ARRAY,
|
||||
SHADER_FILL_STEREO,
|
||||
DEFAULT_SHADER_COUNT
|
||||
} DefaultShader;
|
||||
|
||||
|
|
Loading…
Reference in New Issue