Some checks failed
Build Dusk / run-tests (pull_request) Failing after 24s
Build Dusk / build-linux (pull_request) Failing after 18s
Build Dusk / build-psp (pull_request) Failing after 18s
Build Dusk / build-gamecube (pull_request) Failing after 15s
Build Dusk / build-wii (pull_request) Failing after 16s
109 lines
2.5 KiB
C
109 lines
2.5 KiB
C
/**
|
|
* Copyright (c) 2026 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#pragma once
|
|
#include "error/errorgl.h"
|
|
|
|
typedef struct {
|
|
#ifdef DUSK_OPENGL_LEGACY
|
|
void *nothing;
|
|
#else
|
|
GLuint shaderProgramId;
|
|
GLuint vertexShaderId;
|
|
GLuint fragmentShaderId;
|
|
#endif
|
|
|
|
#if DUSK_OPENGL_LEGACY
|
|
mat4 view;
|
|
mat4 proj;
|
|
mat4 model;
|
|
#endif
|
|
} shadergl_t;
|
|
|
|
typedef struct {
|
|
#ifdef DUSK_OPENGL_LEGACY
|
|
void *nothing;
|
|
#else
|
|
const char_t *vert;
|
|
const char_t *frag;
|
|
#endif
|
|
} shaderdefinitiongl_t;
|
|
|
|
#if DUSK_OPENGL_LEGACY
|
|
typedef struct {
|
|
shadergl_t *boundShader;
|
|
uint_fast8_t dirty;
|
|
} shaderlegacygl_t;
|
|
|
|
extern shaderlegacygl_t SHADER_LEGACY;
|
|
|
|
#define SHADER_LEGACY_DIRTY_PROJ (1 << 0)
|
|
#define SHADER_LEGACY_DIRTY_VIEW (1 << 1)
|
|
#define SHADER_LEGACY_DIRTY_MODEL (1 << 2)
|
|
#endif
|
|
|
|
/**
|
|
* Initializes a shader.
|
|
*
|
|
* @param shader The shader to initialize.
|
|
* @param def The definition of the shader to initialize with.
|
|
* @return An errorret_t indicating success or failure.
|
|
*/
|
|
errorret_t shaderInitGL(shadergl_t *shader, const shaderdefinitiongl_t *def);
|
|
|
|
/**
|
|
* Binds a shader for use in rendering.
|
|
*
|
|
* @param shader The shader to bind.
|
|
* @return An errorret_t indicating success or failure.
|
|
*/
|
|
errorret_t shaderBindGL(shadergl_t *shader);
|
|
|
|
/**
|
|
* Retrieves the location of a shader uniform parameter.
|
|
*
|
|
* @param shader The shader to query.
|
|
* @param name The name of the uniform parameter.
|
|
* @param location Output parameter to receive the location of the uniform.
|
|
* @return An errorret_t indicating success or failure.
|
|
*/
|
|
errorret_t shaderParamGetLocationGL(
|
|
shadergl_t *shader,
|
|
const char_t *name,
|
|
GLint *location
|
|
);
|
|
|
|
/**
|
|
* Sets a mat4 uniform parameter in the shader.
|
|
*
|
|
* @param shader The shader to update.
|
|
* @param name The name of the uniform parameter.
|
|
* @param mat The 4x4 matrix data to set.
|
|
* @return An errorret_t indicating success or failure.
|
|
*/
|
|
errorret_t shaderSetMatrixGL(
|
|
shadergl_t *shader,
|
|
const char_t *name,
|
|
mat4 matrix
|
|
);
|
|
|
|
/**
|
|
* Disposes of a shader, freeing any associated resources.
|
|
*
|
|
* @param shader The shader to dispose.
|
|
*/
|
|
errorret_t shaderDisposeGL(shadergl_t *shader);
|
|
|
|
#ifdef DUSK_OPENGL_LEGACY
|
|
/**
|
|
* During mesh rendering, this is requesting the legacy system to push all
|
|
* shaders necessary to render the currently bound shader's matrices.
|
|
*
|
|
* @return Any error state.
|
|
*/
|
|
errorret_t shaderLegacyMatrixUpdate();
|
|
#endif |