Working on shader stuff

This commit is contained in:
2025-02-25 16:30:35 -06:00
parent 4ff3cf6c5c
commit c29d435b06
17 changed files with 157 additions and 22 deletions

View File

@ -7,15 +7,14 @@
#pragma once
#include "entity.h"
#define OVERWORLD_ENTITY_COUNT_MAX 32
#include "overworlddefs.h"
typedef struct {
entity_t entities[OVERWORLD_ENTITY_COUNT_MAX];
uint8_t entityCount;
} overworld_t;
extern overworld_t overworld;
extern overworld_t OVERWORLD;
/**
* Initializes the overworld.

View File

@ -0,0 +1,8 @@
/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#define OVERWORLD_ENTITY_COUNT_MAX 32

View File

@ -12,5 +12,6 @@ target_sources(${DUSK_TARGET_NAME}
)
# Subdirs
add_subdirectory(data)
add_subdirectory(entityshader)
add_subdirectory(fragments)

View File

@ -0,0 +1,10 @@
# Copyright (c) 2025 Dominic Masters
#
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT
# Sources
target_sources(${DUSK_TARGET_NAME}
PRIVATE
transforms.c
)

View File

@ -0,0 +1,7 @@
/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/

View File

@ -0,0 +1,16 @@
// Copyright (c) 2025 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#include "../fragments/quad.glsl"
#include "../../../../dusk/overworld/overworlddefs.h"
struct Entity {
vec2 position;
};
layout(std140) uniform b_Entities {
Entity entities[OVERWORLD_ENTITY_COUNT_MAX];
uint entityCount;
};

View File

@ -1,4 +1,10 @@
// Copyright (c) 2025 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#include "../fragments/header.glsl"
#include "entity.glsl"
// Inputs from vertex shader
in vec2 v_TextureCoord;

View File

@ -1,6 +1,12 @@
// Copyright (c) 2025 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#include "../fragments/header.glsl"
#include "../fragments/transforms.glsl"
#include "../fragments/quad.glsl"
#include "entity.glsl"
// Outputs to fragment shader
out vec2 v_TextureCoord;

View File

@ -10,7 +10,7 @@
#include "entityshader.h"
#include "entity_vert.glsl.h"
#include "entity_frag.glsl.h"
#include "display/shader/fragments/transforms.h"
#include "display/shader/data/transforms.h"
entityshader_t ENTITY_SHADER;
@ -30,11 +30,13 @@ void entityShaderInit() {
);
// Uniforms
// Bind
shaderBufferBindToBlock(&TRANSFORMS_BUFFER, ENTITY_SHADER.transformsBlock);
}
void entityShaderUse() {
shaderUse(&ENTITY_SHADER.shader);
shaderBufferBindToBlock(&TRANSFORMS_BUFFER, ENTITY_SHADER.transformsBlock);
}
void entityShaderDispose() {

View File

@ -11,7 +11,7 @@
typedef struct {
shader_t shader;
// GLuint dataBlock;
GLuint entitiesBlock;
GLuint transformsBlock;
// GLuint tilesetsBlock;

View File

@ -6,5 +6,4 @@
# Sources
target_sources(${DUSK_TARGET_NAME}
PRIVATE
transforms.c
)

View File

@ -1,6 +1,6 @@
#version 330 core
// Copyright (c) 2025 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
// https://opensource.org/licenses/MIT
#version 330 core

View File

@ -6,26 +6,81 @@
*/
#include "shadermanager.h"
#include "display/shader/fragments/transforms.h"
#include "assert/assert.h"
#include "display/shader/data/transforms.h"
#include "display/shader/entityshader/entityshader.h"
void shaderManagerInit() {
// Initialize the shader buffers
transformsInit();
shadermanagerdatacallback_t SHADER_MANAGER_DATA_CALLBACKS[] = {
{ transformsInit, transformsUpdate, transformsDispose }
};
// Initialize the shaders
entityShaderInit();
shadermanagershadercallback_t SHADER_MANAGER_SHADER_CALLBACKS[] = {
{ entityShaderInit, entityShaderDispose }
};
void shaderManagerInit() {
size_t i;
assertTrue(
SHADER_MANAGER_SHADER_CALLBACKS_SIZE > 0,
"No Shader Callbacks Defined"
);
assertTrue(
SHADER_MANAGER_DATA_CALLBACKS_SIZE > 0,
"No Data Callbacks Defined"
);
i = 0;
do {
assertNotNull(
SHADER_MANAGER_DATA_CALLBACKS[i].init,
"Data Callback is NULL"
);
SHADER_MANAGER_DATA_CALLBACKS[i++].init();
} while(i < SHADER_MANAGER_DATA_CALLBACKS_SIZE);
i = 0;
do {
assertNotNull(
SHADER_MANAGER_SHADER_CALLBACKS[i].init,
"Shader Callback is NULL"
);
SHADER_MANAGER_SHADER_CALLBACKS[i++].init();
} while(i < SHADER_MANAGER_SHADER_CALLBACKS_SIZE);
}
void shaderManagerUpdate() {
// Update shader buffers
transformsUpdate();
assertTrue(
SHADER_MANAGER_DATA_CALLBACKS_SIZE > 0,
"No Data Callbacks Defined"
);
size_t i = 0;
do {
assertNotNull(
SHADER_MANAGER_DATA_CALLBACKS[i].update,
"Data Callback is NULL"
);
SHADER_MANAGER_DATA_CALLBACKS[i++].update();
} while(i < SHADER_MANAGER_DATA_CALLBACKS_SIZE);
}
void shaderManagerDispose() {
// Dispose the shaders
entityShaderDispose();
assertTrue(
SHADER_MANAGER_SHADER_CALLBACKS_SIZE > 0,
"No Shader Callbacks Defined"
);
assertTrue(
SHADER_MANAGER_DATA_CALLBACKS_SIZE > 0,
"No Data Callbacks Defined"
);
// Dispose the shader buffers
transformsDispose();
size_t i = 0;
do {
assertNotNull(
SHADER_MANAGER_SHADER_CALLBACKS[i].dispose,
"Shader Callback is NULL"
);
SHADER_MANAGER_SHADER_CALLBACKS[i++].dispose();
} while(i < SHADER_MANAGER_SHADER_CALLBACKS_SIZE);
}

View File

@ -6,6 +6,30 @@
*/
#pragma once
#include "dusk.h"
typedef struct {
void (*init)();
void (*update)();
void (*dispose)();
} shadermanagerdatacallback_t;
typedef struct {
void (*init)();
void (*dispose)();
} shadermanagershadercallback_t;
extern shadermanagerdatacallback_t SHADER_MANAGER_DATA_CALLBACKS[];
extern shadermanagershadercallback_t SHADER_MANAGER_SHADER_CALLBACKS[];
#define SHADER_MANAGER_DATA_CALLBACKS_SIZE ( \
sizeof(SHADER_MANAGER_DATA_CALLBACKS) / sizeof(shadermanagerdatacallback_t) \
)
#define SHADER_MANAGER_SHADER_CALLBACKS_SIZE ( \
sizeof(SHADER_MANAGER_SHADER_CALLBACKS) / \
sizeof(shadermanagershadercallback_t) \
)
/**
* Initializes the Shader Manager

View File

@ -11,5 +11,7 @@
void overworldRender() {
entityShaderUse();
// Set entity data.
quadRender(1);
}