mirror of https://github.com/bjornbytes/lovr.git
Pass:fill;
This commit is contained in:
parent
0a3ccb4f8a
commit
5c43ad0792
|
@ -1,7 +1,7 @@
|
|||
#include "shaders/unlit.vert.h"
|
||||
#include "shaders/unlit.frag.h"
|
||||
|
||||
#include "shaders/font.frag.h"
|
||||
#include "shaders/fill.vert.h"
|
||||
|
||||
#include "shaders/lovr.glsl.h"
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
#version 460
|
||||
#extension GL_EXT_multiview : require
|
||||
#extension GL_GOOGLE_include_directive : require
|
||||
|
||||
#include "lovr.glsl"
|
||||
|
||||
void main() {
|
||||
FragColor = VertexColor * Color;
|
||||
float x = -1 + float((VertexIndex & 1) << 2);
|
||||
float y = -1 + float((VertexIndex & 2) << 1);
|
||||
FragUV = vec2(x, y) * .5 + .5;
|
||||
Position = vec4(x, y, 0., 1.);
|
||||
PointSize = 1.f;
|
||||
}
|
|
@ -553,6 +553,13 @@ static int l_lovrPassText(lua_State* L) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int l_lovrPassFill(lua_State* L) {
|
||||
Pass* pass = luax_checktype(L, 1, Pass);
|
||||
Texture* texture = luax_totype(L, 2, Texture);
|
||||
lovrPassFill(pass, texture);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_lovrPassMesh(lua_State* L) {
|
||||
Pass* pass = luax_checktype(L, 1, Pass);
|
||||
Buffer* vertices = !lua_toboolean(L, 2) ? NULL : luax_totype(L, 2, Buffer);
|
||||
|
@ -803,6 +810,7 @@ const luaL_Reg lovrPass[] = {
|
|||
{ "sphere", l_lovrPassSphere },
|
||||
{ "torus", l_lovrPassTorus },
|
||||
{ "text", l_lovrPassText },
|
||||
{ "fill", l_lovrPassFill },
|
||||
{ "mesh", l_lovrPassMesh },
|
||||
{ "multimesh", l_lovrPassMultimesh },
|
||||
|
||||
|
|
|
@ -177,6 +177,7 @@ typedef enum {
|
|||
VERTEX_SHAPE,
|
||||
VERTEX_POINT,
|
||||
VERTEX_GLYPH,
|
||||
VERTEX_EMPTY,
|
||||
VERTEX_FORMAT_COUNT
|
||||
} VertexFormat;
|
||||
|
||||
|
@ -479,6 +480,16 @@ bool lovrGraphicsInit(bool debug, bool vsync) {
|
|||
.attributes[4] = { 1, 14, 0, GPU_TYPE_F32x4 }
|
||||
};
|
||||
|
||||
state.vertexFormats[VERTEX_EMPTY] = (gpu_vertex_format) {
|
||||
.bufferCount = 2,
|
||||
.attributeCount = 5,
|
||||
.attributes[0] = { 1, 10, 0, GPU_TYPE_F32x2 },
|
||||
.attributes[1] = { 1, 11, 0, GPU_TYPE_F32x4 },
|
||||
.attributes[2] = { 1, 12, 0, GPU_TYPE_F32x2 },
|
||||
.attributes[3] = { 1, 13, 16, GPU_TYPE_F32x4 },
|
||||
.attributes[4] = { 1, 14, 0, GPU_TYPE_F32x4 }
|
||||
};
|
||||
|
||||
state.defaultMaterial = lovrMaterialCreate(&(MaterialInfo) {
|
||||
.data.color = { 1.f, 1.f, 1.f, 1.f },
|
||||
.texture = state.defaultTexture
|
||||
|
@ -1346,6 +1357,11 @@ Shader* lovrGraphicsGetDefaultShader(DefaultShader type) {
|
|||
info.stages[1] = lovrBlobCreate((void*) lovr_shader_font_frag, sizeof(lovr_shader_font_frag), "Font Fragment Shader");
|
||||
info.label = "font";
|
||||
break;
|
||||
case SHADER_FILL:
|
||||
info.stages[0] = lovrBlobCreate((void*) lovr_shader_fill_vert, sizeof(lovr_shader_fill_vert), "Fill Vertex Shader");
|
||||
info.stages[1] = lovrBlobCreate((void*) lovr_shader_unlit_frag, sizeof(lovr_shader_unlit_frag), "Unlit Fragment Shader");
|
||||
info.label = "fill";
|
||||
break;
|
||||
default: lovrUnreachable();
|
||||
}
|
||||
|
||||
|
@ -3393,6 +3409,16 @@ void lovrPassText(Pass* pass, Font* font, const char* text, uint32_t length, flo
|
|||
}
|
||||
}
|
||||
|
||||
void lovrPassFill(Pass* pass, Texture* texture) {
|
||||
lovrPassDraw(pass, &(Draw) {
|
||||
.mode = VERTEX_TRIANGLES,
|
||||
.shader = SHADER_FILL,
|
||||
.material = texture ? lovrTextureGetMaterial(texture) : NULL,
|
||||
.vertex.format = VERTEX_EMPTY,
|
||||
.count = 3
|
||||
});
|
||||
}
|
||||
|
||||
void lovrPassMesh(Pass* pass, Buffer* vertices, Buffer* indices, float* transform, uint32_t start, uint32_t count, uint32_t instances) {
|
||||
if (count == ~0u) {
|
||||
count = (indices ? indices : vertices)->info.length - start;
|
||||
|
|
|
@ -251,6 +251,7 @@ const SamplerInfo* lovrSamplerGetInfo(Sampler* sampler);
|
|||
typedef enum {
|
||||
SHADER_UNLIT,
|
||||
SHADER_FONT,
|
||||
SHADER_FILL,
|
||||
DEFAULT_SHADER_COUNT
|
||||
} DefaultShader;
|
||||
|
||||
|
@ -481,6 +482,7 @@ void lovrPassCircle(Pass* pass, float* transform, DrawStyle style, float angle1,
|
|||
void lovrPassSphere(Pass* pass, float* transform, uint32_t segmentsH, uint32_t segmentsV);
|
||||
void lovrPassTorus(Pass* pass, float* transform, uint32_t segmentsT, uint32_t segmentsP);
|
||||
void lovrPassText(Pass* pass, Font* font, const char* text, uint32_t length, float* transform, float wrap, HorizontalAlign halign, VerticalAlign valign);
|
||||
void lovrPassFill(Pass* pass, Texture* texture);
|
||||
void lovrPassMesh(Pass* pass, Buffer* vertices, Buffer* indices, float* transform, uint32_t start, uint32_t count, uint32_t instances);
|
||||
void lovrPassMultimesh(Pass* pass, Buffer* vertices, Buffer* indices, Buffer* indirect, uint32_t count, uint32_t offset, uint32_t stride);
|
||||
void lovrPassCompute(Pass* pass, uint32_t x, uint32_t y, uint32_t z, Buffer* indirect, uint32_t offset);
|
||||
|
|
Loading…
Reference in New Issue