Working on shader stuff
This commit is contained in:
@ -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.
|
||||
|
8
src/dusk/overworld/overworlddefs.h
Normal file
8
src/dusk/overworld/overworlddefs.h
Normal 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
|
@ -12,5 +12,6 @@ target_sources(${DUSK_TARGET_NAME}
|
||||
)
|
||||
|
||||
# Subdirs
|
||||
add_subdirectory(data)
|
||||
add_subdirectory(entityshader)
|
||||
add_subdirectory(fragments)
|
10
src/duskgl/display/shader/data/CMakeLists.txt
Normal file
10
src/duskgl/display/shader/data/CMakeLists.txt
Normal 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
|
||||
)
|
7
src/duskgl/display/shader/data/entities.h
Normal file
7
src/duskgl/display/shader/data/entities.h
Normal file
@ -0,0 +1,7 @@
|
||||
/**
|
||||
* Copyright (c) 2025 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
16
src/duskgl/display/shader/entityshader/entity.glsl
Normal file
16
src/duskgl/display/shader/entityshader/entity.glsl
Normal 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;
|
||||
};
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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() {
|
||||
|
@ -11,7 +11,7 @@
|
||||
typedef struct {
|
||||
shader_t shader;
|
||||
|
||||
// GLuint dataBlock;
|
||||
GLuint entitiesBlock;
|
||||
GLuint transformsBlock;
|
||||
// GLuint tilesetsBlock;
|
||||
|
||||
|
@ -6,5 +6,4 @@
|
||||
# Sources
|
||||
target_sources(${DUSK_TARGET_NAME}
|
||||
PRIVATE
|
||||
transforms.c
|
||||
)
|
@ -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
|
@ -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);
|
||||
}
|
@ -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
|
||||
|
@ -11,5 +11,7 @@
|
||||
|
||||
void overworldRender() {
|
||||
entityShaderUse();
|
||||
|
||||
// Set entity data.
|
||||
quadRender(1);
|
||||
}
|
Reference in New Issue
Block a user