mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-20 20:49:12 +12:00
Add UBO/BlendEquation/BlendFunc to GL state manager
This commit is contained in:
parent
219a560cbe
commit
a4ec770587
3 changed files with 67 additions and 7 deletions
|
@ -5,9 +5,20 @@ void GLStateManager::resetBlend() {
|
|||
logicOpEnabled = false;
|
||||
logicOp = GL_COPY;
|
||||
|
||||
blendEquationRGB = GL_FUNC_ADD;
|
||||
blendEquationAlpha = GL_FUNC_ADD;
|
||||
|
||||
blendFuncSourceRGB = GL_SRC_COLOR;
|
||||
blendFuncDestRGB = GL_DST_COLOR;
|
||||
blendFuncSourceAlpha = GL_SRC_ALPHA;
|
||||
blendFuncDestAlpha = GL_DST_ALPHA;
|
||||
|
||||
OpenGL::disableBlend();
|
||||
OpenGL::disableLogicOp();
|
||||
OpenGL::setLogicOp(GL_COPY);
|
||||
|
||||
glBlendEquationSeparate(blendEquationRGB, blendEquationAlpha);
|
||||
glBlendFuncSeparate(blendFuncSourceRGB, blendFuncDestRGB, blendFuncSourceAlpha, blendFuncDestAlpha);
|
||||
}
|
||||
|
||||
void GLStateManager::resetClearing() {
|
||||
|
@ -61,9 +72,12 @@ void GLStateManager::resetVAO() {
|
|||
glBindVertexArray(0);
|
||||
}
|
||||
|
||||
void GLStateManager::resetVBO() {
|
||||
void GLStateManager::resetBuffers() {
|
||||
boundVBO = 0;
|
||||
boundUBO = 0;
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, 0);
|
||||
}
|
||||
|
||||
void GLStateManager::resetProgram() {
|
||||
|
@ -79,7 +93,7 @@ void GLStateManager::reset() {
|
|||
resetDepth();
|
||||
|
||||
resetVAO();
|
||||
resetVBO();
|
||||
resetBuffers();
|
||||
resetProgram();
|
||||
resetScissor();
|
||||
resetStencil();
|
||||
|
|
|
@ -229,8 +229,8 @@ void RendererGL::setupBlending() {
|
|||
OpenGL::setBlendColor(float(r) / 255.f, float(g) / 255.f, float(b) / 255.f, float(a) / 255.f);
|
||||
|
||||
// Translate equations and funcs to their GL equivalents and set them
|
||||
glBlendEquationSeparate(blendingEquations[rgbEquation], blendingEquations[alphaEquation]);
|
||||
glBlendFuncSeparate(blendingFuncs[rgbSourceFunc], blendingFuncs[rgbDestFunc], blendingFuncs[alphaSourceFunc], blendingFuncs[alphaDestFunc]);
|
||||
gl.setBlendEquation(blendingEquations[rgbEquation], blendingEquations[alphaEquation]);
|
||||
gl.setBlendFunc(blendingFuncs[rgbSourceFunc], blendingFuncs[rgbDestFunc], blendingFuncs[alphaSourceFunc], blendingFuncs[alphaDestFunc]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -821,7 +821,7 @@ OpenGL::Program& RendererGL::getSpecializedShader() {
|
|||
|
||||
// Allocate memory for the program UBO
|
||||
glGenBuffers(1, &programEntry.uboBinding);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, programEntry.uboBinding);
|
||||
gl.bindUBO(programEntry.uboBinding);
|
||||
glBufferData(GL_UNIFORM_BUFFER, sizeof(PICA::FragmentUniforms), nullptr, GL_DYNAMIC_DRAW);
|
||||
|
||||
// Set up the binding for our UBO. Sadly we can't specify it in the shader like normal people,
|
||||
|
@ -869,7 +869,7 @@ OpenGL::Program& RendererGL::getSpecializedShader() {
|
|||
vec[3] = float((color >> 24) & 0xFF) / 255.0f;
|
||||
}
|
||||
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, programEntry.uboBinding);
|
||||
gl.bindUBO(programEntry.uboBinding);
|
||||
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(PICA::FragmentUniforms), &uniforms);
|
||||
|
||||
return program;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue