Shader working.
This commit is contained in:
@ -1,27 +0,0 @@
|
||||
#include "../fragments/header.glsl"
|
||||
#include "../fragments/transforms.glsl"
|
||||
|
||||
#define ENTITY_TILE_OFFSET_X (MAP_TILE_WIDTH - ENTITY_WIDTH) / 2
|
||||
#define ENTITY_TILE_OFFSET_Y (MAP_TILE_HEIGHT - ENTITY_HEIGHT) / 2
|
||||
|
||||
struct Entity {
|
||||
int x;
|
||||
int y;
|
||||
int tileset;
|
||||
int tile;
|
||||
};
|
||||
|
||||
layout(std140) uniform b_Data {
|
||||
Entity entities[MAP_ENTITY_COUNT_MAX];
|
||||
int entityCount;
|
||||
};
|
||||
|
||||
vec4 entityGetCoordinates(Entity ent) {
|
||||
int vx = (ent.x * MAP_TILE_WIDTH) + ENTITY_TILE_OFFSET_X;
|
||||
int vy = (ent.y * MAP_TILE_HEIGHT) + ENTITY_TILE_OFFSET_Y;
|
||||
return vec4(vx, vy, vx + ENTITY_WIDTH, vy + ENTITY_HEIGHT);
|
||||
}
|
||||
|
||||
vec4 entityGetUVs(Entity ent) {
|
||||
return tilesetGetUVsByIndex(ent.tileset, ent.tile);
|
||||
}
|
@ -1,18 +1,11 @@
|
||||
#include "entity.glsl"
|
||||
#include "../fragments/header.glsl"
|
||||
|
||||
// Inputs from vertex shader
|
||||
in vec2 v_TextureCoord;
|
||||
flat in int v_Entity;
|
||||
|
||||
// Frag pixel color
|
||||
out vec4 FragColor;
|
||||
|
||||
void main() {
|
||||
Entity e = entities[v_Entity];
|
||||
vec4 textureColor = tilesetGetColor(e.tileset, v_TextureCoord);
|
||||
|
||||
// We remove the pink color as transparent
|
||||
if(textureColor.r == 1.0 && textureColor.g == 0.0 && textureColor.b == 1.0) {
|
||||
discard;
|
||||
}
|
||||
|
||||
FragColor = textureColor;
|
||||
FragColor = vec4(1, 1, 1, 1);
|
||||
}
|
||||
|
@ -1,35 +1,17 @@
|
||||
#include "entity.glsl"
|
||||
#include "../fragments/header.glsl"
|
||||
#include "../fragments/transforms.glsl"
|
||||
#include "../fragments/quad.glsl"
|
||||
|
||||
// Outputs to fragment shader
|
||||
out vec2 v_TextureCoord;
|
||||
flat out int v_Entity;
|
||||
|
||||
void main() {
|
||||
int entityIndex = gl_InstanceID;
|
||||
int indiceIndex = gl_VertexID % 6;
|
||||
|
||||
Entity entity = entities[entityIndex];
|
||||
|
||||
vec4 quadPos = entityGetCoordinates(entity);
|
||||
vec4 quadUVs = entityGetUVs(entity);
|
||||
|
||||
vec2 vertex;
|
||||
vec2 uv;
|
||||
if(indiceIndex == 0 || indiceIndex == 4) {
|
||||
vertex = quadPos.xy;
|
||||
uv = quadUVs.xy;
|
||||
} else if(indiceIndex == 1) {
|
||||
vertex = quadPos.zy;
|
||||
uv = quadUVs.zy;
|
||||
} else if(indiceIndex == 2 || indiceIndex == 5) {
|
||||
vertex = quadPos.zw;
|
||||
uv = quadUVs.zw;
|
||||
} else if(indiceIndex == 3) {
|
||||
vertex = quadPos.xw;
|
||||
uv = quadUVs.xw;
|
||||
}
|
||||
uint instanceIndex = uint(gl_InstanceID);
|
||||
uint indiceIndex = uint(gl_VertexID % 6);
|
||||
|
||||
gl_Position = transforms.projection * transforms.view * vec4(vertex, 0.0, 1.0);
|
||||
vec2 vert = quadGetVertice(indiceIndex);
|
||||
vec2 uv = quadGetTextureCoordinate(indiceIndex);
|
||||
|
||||
gl_Position = transforms.projection * transforms.view * vec4(vert, 0.0, 1.0);
|
||||
v_TextureCoord = uv;
|
||||
v_Entity = entityIndex;
|
||||
}
|
@ -10,6 +10,7 @@
|
||||
#include "entityshader.h"
|
||||
#include "entity_vert.glsl.h"
|
||||
#include "entity_frag.glsl.h"
|
||||
#include "display/shader/fragments/transforms.h"
|
||||
|
||||
entityshader_t ENTITY_SHADER;
|
||||
|
||||
@ -23,10 +24,19 @@ void entityShaderInit() {
|
||||
);
|
||||
|
||||
// Uniform buffers
|
||||
ENTITY_SHADER.transformsBlock = shaderGetBlock(
|
||||
&ENTITY_SHADER.shader,
|
||||
TRANSFORMS_BLOCK_NAME
|
||||
);
|
||||
|
||||
// Uniforms
|
||||
}
|
||||
|
||||
void entityShaderUse() {
|
||||
shaderUse(&ENTITY_SHADER.shader);
|
||||
shaderBufferBindToBlock(&TRANSFORMS_BUFFER, ENTITY_SHADER.transformsBlock);
|
||||
}
|
||||
|
||||
void entityShaderDispose() {
|
||||
shaderDispose(&ENTITY_SHADER.shader);
|
||||
}
|
@ -12,7 +12,7 @@ typedef struct {
|
||||
shader_t shader;
|
||||
|
||||
// GLuint dataBlock;
|
||||
// GLuint transformsBlock;
|
||||
GLuint transformsBlock;
|
||||
// GLuint tilesetsBlock;
|
||||
|
||||
// GLuint uniformTilesetTextures;
|
||||
@ -25,6 +25,11 @@ extern entityshader_t ENTITY_SHADER;
|
||||
*/
|
||||
void entityShaderInit();
|
||||
|
||||
/**
|
||||
* Uses the entity shader.
|
||||
*/
|
||||
void entityShaderUse();
|
||||
|
||||
/**
|
||||
* Disposes of the entity shader.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user