[Feat] (...): Add ProgramState while implementing these gl functions. Rename some functions in MG_State.

This commit is contained in:
BZLZHH
2025-05-03 02:26:03 +08:00
parent 282e2496da
commit 00140d8b57
16 changed files with 602 additions and 74 deletions
+76 -4
View File
@@ -9,6 +9,7 @@ TextureState* MG_State_T::textureState = nullptr;
CommonState* MG_State_T::commonState = nullptr;
BufferState* MG_State_T::bufferState = nullptr;
VertexArrayState* MG_State_T::vertexArrayState = nullptr;
ProgramState* MG_State_T::programState = nullptr;
namespace MG_State {
void Init() {
@@ -16,6 +17,7 @@ namespace MG_State {
MG_State_T::commonState = new CommonState();
MG_State_T::bufferState = new BufferState();
MG_State_T::vertexArrayState = new VertexArrayState();
MG_State_T::programState = new ProgramState();
}
void Destroy() {
@@ -23,6 +25,7 @@ namespace MG_State {
delete MG_State_T::commonState;
delete MG_State_T::bufferState;
delete MG_State_T::vertexArrayState;
delete MG_State_T::programState;
}
void SetError(GLenum error) {
@@ -88,8 +91,8 @@ namespace MG_State {
return MG_State_T::textureState->DeleteN(n, textures);
}
GLenum GetTextureLevelPropertyIntVector(GLenum target, GLint level, GLenum pname, GLint* params) {
return MG_State_T::textureState->GetLevelPropertyIntVector(target, level, pname, params);
GLenum QueryTextureLevelPropertyIntVector(GLenum target, GLint level, GLenum pname, GLint* params) {
return MG_State_T::textureState->QueryLevelPropertyIntVector(target, level, pname, params);
}
// Common
@@ -97,8 +100,8 @@ namespace MG_State {
return MG_State_T::commonState->SetPixelStoreInt(pname, param);
}
GLint MG_State::GetPixelStoreInt(GLenum pname) {
return MG_State_T::commonState->GetPixelStoreInt(pname);
GLint MG_State::QueryPixelStoreInt(GLenum pname) {
return MG_State_T::commonState->QueryPixelStoreInt(pname);
}
// Buffer
@@ -180,4 +183,73 @@ namespace MG_State {
index, size, type, GL_FALSE, stride, pointer, true, currentBuffer
);
}
// Program
GLenum CreateShader(GLenum type, GLuint* shader) {
return MG_State_T::programState->CreateShader(type, shader);
}
GLenum CreateProgram(GLuint* program) {
return MG_State_T::programState->CreateProgram(program);
}
GLenum DeleteShader(GLuint shader) {
return MG_State_T::programState->DeleteShader(shader);
}
GLenum DeleteProgram(GLuint program) {
return MG_State_T::programState->DeleteProgram(program);
}
GLenum LinkShaderToProgram(GLuint program, GLuint shader) {
return MG_State_T::programState->LinkShaderToProgram(program, shader);
}
GLenum UploadShaderSource(GLuint shader, GLsizei count, const GLchar** string, const GLint* length) {
return MG_State_T::programState->UploadShaderSource(shader, count, string, length);
}
GLenum BuildShaderStage(GLuint shader) {
return MG_State_T::programState->BuildShaderStage(shader);
}
GLenum FinalizeProgramPipeline(GLuint program) {
return MG_State_T::programState->FinalizeProgramPipeline(program);
}
GLenum ActivateRenderProgram(GLuint program) {
return MG_State_T::programState->ActivateRenderProgram(program);
}
GLenum DefineProgramAttributeBinding(GLuint program, GLuint index, const GLchar* name) {
return MG_State_T::programState->DefineProgramAttributeBinding(program, index, name);
}
GLint QueryProgramAttributeBinding(GLuint program, const GLchar* name) {
return MG_State_T::programState->QueryProgramAttributeBinding(program, name);
}
GLint QueryProgramUniformLocation(GLuint program, const GLchar* name) {
return MG_State_T::programState->QueryProgramUniformLocation(program, name);
}
GLenum QueryProgramStateIntVector(GLuint program, GLenum pname, GLint* params) {
return MG_State_T::programState->QueryProgramStateIntVector(program, pname, params);
}
GLenum QueryShaderStateIntVector(GLuint shader, GLenum pname, GLint* params) {
return MG_State_T::programState->QueryShaderStateIntVector(shader, pname, params);
}
GLuint GetCurrentProgram() {
return MG_State_T::programState->GetCurrentProgram();
}
bool SetProgramStatus(GLuint program, GLboolean status) {
return MG_State_T::programState->SetProgramStatus(program, status);
}
bool SetShaderStatus(GLuint shader, GLboolean status) {
return MG_State_T::programState->SetShaderStatus(shader, status);
}
}
+23 -3
View File
@@ -13,6 +13,7 @@ struct MG_State_T {
static CommonState* commonState;
static BufferState* bufferState;
static VertexArrayState* vertexArrayState;
static ProgramState* programState;
};
namespace MG_State {
@@ -36,11 +37,11 @@ namespace MG_State {
GLenum SetTexturePropertyFloat(GLenum target, GLenum pname, GLfloat param);
GLenum DeleteTexture(GLuint texture);
GLenum DeleteTextures(GLsizei n, const GLuint* textures);
GLenum GetTextureLevelPropertyIntVector(GLenum target, GLint level, GLenum pname, GLint* params);
GLenum QueryTextureLevelPropertyIntVector(GLenum target, GLint level, GLenum pname, GLint* params);
// Common
GLenum SetPixelStoreInt(GLenum pname, GLint param);
GLint GetPixelStoreInt(GLenum pname);
GLint QueryPixelStoreInt(GLenum pname);
// Buffer
GLenum AcquireBufferMemory(GLenum target, GLenum access, void** mappedPtr);
@@ -54,7 +55,6 @@ namespace MG_State {
GLenum QueryBufferPropertyIntVector(GLenum target, GLenum pname, GLint* params);
// VertexArray
GLenum CreateVertexArray(GLuint* array);
GLenum CreateVertexArrays(GLsizei n, GLuint* arrays);
GLenum BindVertexArray(GLuint array);
@@ -65,6 +65,26 @@ namespace MG_State {
const void* pointer);
GLenum SetVertexAttributeLayoutInt(GLuint index, GLint size, GLenum type,
GLsizei stride, const void* pointer);
// Program
GLenum CreateShader(GLenum type, GLuint* shader);
GLenum CreateProgram(GLuint* program);
GLenum DeleteShader(GLuint shader);
GLenum DeleteProgram(GLuint program);
GLenum LinkShaderToProgram(GLuint program, GLuint shader);
GLenum UploadShaderSource(GLuint shader, GLsizei count, const GLchar** string, const GLint* length);
GLenum BuildShaderStage(GLuint shader);
GLenum FinalizeProgramPipeline(GLuint program);
GLenum ActivateRenderProgram(GLuint program);
GLenum DefineProgramAttributeBinding(GLuint program, GLuint index, const GLchar* name);
GLint QueryProgramAttributeBinding(GLuint program, const GLchar* name);
GLint QueryProgramUniformLocation(GLuint program, const GLchar* name);
GLenum QueryProgramStateIntVector(GLuint program, GLenum pname, GLint* params);
GLenum QueryShaderStateIntVector(GLuint shader, GLenum pname, GLint* params);
GLuint GetCurrentProgram();
bool SetProgramStatus(GLuint program, GLboolean status);
bool SetShaderStatus(GLuint shader, GLboolean status);
}