Working on shader stuff
This commit is contained in:
@ -7,15 +7,14 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "entity.h"
|
#include "entity.h"
|
||||||
|
#include "overworlddefs.h"
|
||||||
#define OVERWORLD_ENTITY_COUNT_MAX 32
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
entity_t entities[OVERWORLD_ENTITY_COUNT_MAX];
|
entity_t entities[OVERWORLD_ENTITY_COUNT_MAX];
|
||||||
uint8_t entityCount;
|
uint8_t entityCount;
|
||||||
} overworld_t;
|
} overworld_t;
|
||||||
|
|
||||||
extern overworld_t overworld;
|
extern overworld_t OVERWORLD;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the 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
|
# Subdirs
|
||||||
|
add_subdirectory(data)
|
||||||
add_subdirectory(entityshader)
|
add_subdirectory(entityshader)
|
||||||
add_subdirectory(fragments)
|
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 "../fragments/header.glsl"
|
||||||
|
#include "entity.glsl"
|
||||||
|
|
||||||
// Inputs from vertex shader
|
// Inputs from vertex shader
|
||||||
in vec2 v_TextureCoord;
|
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/header.glsl"
|
||||||
#include "../fragments/transforms.glsl"
|
#include "../fragments/transforms.glsl"
|
||||||
#include "../fragments/quad.glsl"
|
#include "../fragments/quad.glsl"
|
||||||
|
#include "entity.glsl"
|
||||||
|
|
||||||
// Outputs to fragment shader
|
// Outputs to fragment shader
|
||||||
out vec2 v_TextureCoord;
|
out vec2 v_TextureCoord;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#include "entityshader.h"
|
#include "entityshader.h"
|
||||||
#include "entity_vert.glsl.h"
|
#include "entity_vert.glsl.h"
|
||||||
#include "entity_frag.glsl.h"
|
#include "entity_frag.glsl.h"
|
||||||
#include "display/shader/fragments/transforms.h"
|
#include "display/shader/data/transforms.h"
|
||||||
|
|
||||||
entityshader_t ENTITY_SHADER;
|
entityshader_t ENTITY_SHADER;
|
||||||
|
|
||||||
@ -30,11 +30,13 @@ void entityShaderInit() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Uniforms
|
// Uniforms
|
||||||
|
|
||||||
|
// Bind
|
||||||
|
shaderBufferBindToBlock(&TRANSFORMS_BUFFER, ENTITY_SHADER.transformsBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void entityShaderUse() {
|
void entityShaderUse() {
|
||||||
shaderUse(&ENTITY_SHADER.shader);
|
shaderUse(&ENTITY_SHADER.shader);
|
||||||
shaderBufferBindToBlock(&TRANSFORMS_BUFFER, ENTITY_SHADER.transformsBlock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void entityShaderDispose() {
|
void entityShaderDispose() {
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
shader_t shader;
|
shader_t shader;
|
||||||
|
|
||||||
// GLuint dataBlock;
|
GLuint entitiesBlock;
|
||||||
GLuint transformsBlock;
|
GLuint transformsBlock;
|
||||||
// GLuint tilesetsBlock;
|
// GLuint tilesetsBlock;
|
||||||
|
|
||||||
|
@ -6,5 +6,4 @@
|
|||||||
# Sources
|
# Sources
|
||||||
target_sources(${DUSK_TARGET_NAME}
|
target_sources(${DUSK_TARGET_NAME}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
transforms.c
|
|
||||||
)
|
)
|
@ -1,6 +1,6 @@
|
|||||||
#version 330 core
|
|
||||||
|
|
||||||
// Copyright (c) 2025 Dominic Masters
|
// Copyright (c) 2025 Dominic Masters
|
||||||
//
|
//
|
||||||
// This software is released under the MIT License.
|
// 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 "shadermanager.h"
|
||||||
#include "display/shader/fragments/transforms.h"
|
#include "assert/assert.h"
|
||||||
|
#include "display/shader/data/transforms.h"
|
||||||
#include "display/shader/entityshader/entityshader.h"
|
#include "display/shader/entityshader/entityshader.h"
|
||||||
|
|
||||||
void shaderManagerInit() {
|
shadermanagerdatacallback_t SHADER_MANAGER_DATA_CALLBACKS[] = {
|
||||||
// Initialize the shader buffers
|
{ transformsInit, transformsUpdate, transformsDispose }
|
||||||
transformsInit();
|
};
|
||||||
|
|
||||||
// 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() {
|
void shaderManagerUpdate() {
|
||||||
// Update shader buffers
|
assertTrue(
|
||||||
transformsUpdate();
|
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() {
|
void shaderManagerDispose() {
|
||||||
// Dispose the shaders
|
assertTrue(
|
||||||
entityShaderDispose();
|
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
|
size_t i = 0;
|
||||||
transformsDispose();
|
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
|
#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
|
* Initializes the Shader Manager
|
||||||
|
@ -11,5 +11,7 @@
|
|||||||
|
|
||||||
void overworldRender() {
|
void overworldRender() {
|
||||||
entityShaderUse();
|
entityShaderUse();
|
||||||
|
|
||||||
|
// Set entity data.
|
||||||
quadRender(1);
|
quadRender(1);
|
||||||
}
|
}
|
Reference in New Issue
Block a user