mirror of
https://github.com/thunderbrewhq/thunderbrew
synced 2025-12-12 11:12:29 +00:00
feat(gx): add incomplete 'CGxDeviceGLSDL' (#2)
* chore(build): add vendored SDL 3.0.0 library * chore(build): add vendored glew-cmake-2.2.0 library * feat(console): in the presence of -opengl launch flag, change GxApi to OpenGl * feat(gx): add uncompleted CGxDeviceGLSDL targeting Windows and Linux * chore(build): change SDL3 linkage from shared (bad) to to static (good)
This commit is contained in:
parent
934e0fb600
commit
706c8903a1
2043 changed files with 663533 additions and 5 deletions
150
src/gx/glsdl/GLFramebuffer.cpp
Normal file
150
src/gx/glsdl/GLFramebuffer.cpp
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
#include "gx/glsdl/GLFramebuffer.hpp"
|
||||
#include "gx/glsdl/GLSDLDevice.hpp"
|
||||
#include "gx/glsdl/GLMipmap.hpp"
|
||||
#include "gx/glsdl/GLPool.hpp"
|
||||
#include "gx/glsdl/GLTypes.hpp"
|
||||
#include <bc/Debug.hpp>
|
||||
|
||||
GLFramebuffer* GLFramebuffer::Create(bool a1) {
|
||||
GLFramebuffer* framebuffer = new GLFramebuffer(a1);
|
||||
|
||||
if (!a1) {
|
||||
// TODO
|
||||
// BLIZZARD_ASSERT(framebuffer->m_FramebufferID >= PoolStats<GLFramebuffer>::NAME_POOL_FIRST_NAME);
|
||||
}
|
||||
|
||||
BLIZZARD_ASSERT(framebuffer->m_NumAttach == 0);
|
||||
|
||||
framebuffer->m_Width = 0;
|
||||
framebuffer->m_Height = 0;
|
||||
framebuffer->m_Device = GLSDLDevice::Get();
|
||||
|
||||
return framebuffer;
|
||||
}
|
||||
|
||||
GLFramebuffer::GLFramebuffer(bool a1) : GLObject() {
|
||||
if (!a1) {
|
||||
this->m_FramebufferID = GLPool<GLFramebuffer>::Get()->GetNextName();
|
||||
}
|
||||
}
|
||||
|
||||
void GLFramebuffer::Attach(GLMipmap* image, GLenum a3, int32_t a4) {
|
||||
BLIZZARD_ASSERT(this->m_Device == GLSDLDevice::Get());
|
||||
|
||||
if (!image) {
|
||||
this->Detach(a3);
|
||||
return;
|
||||
}
|
||||
|
||||
if (a3 == GL_DEPTH_STENCIL) {
|
||||
BLIZZARD_ASSERT(image->GetFormat() == GLTF_D24S8);
|
||||
|
||||
this->Attach(image, GL_DEPTH_ATTACHMENT, 0);
|
||||
this->Attach(image, GL_STENCIL_ATTACHMENT, 0);
|
||||
|
||||
(*image->m_AttachPoints)[this->m_FramebufferID].point = GL_DEPTH_STENCIL;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int32_t index;
|
||||
|
||||
if (a3 == GL_DEPTH_ATTACHMENT) {
|
||||
index = 4;
|
||||
} else if (a3 == GL_STENCIL_ATTACHMENT) {
|
||||
index = 5;
|
||||
} else {
|
||||
index = a3 - GL_COLOR_ATTACHMENT0;
|
||||
}
|
||||
|
||||
BLIZZARD_ASSERT(index < MAX_ATTACHMENT);
|
||||
|
||||
GLMipmap* oldImage = this->m_Attachments[index];
|
||||
|
||||
if (image != oldImage) {
|
||||
if (oldImage) {
|
||||
oldImage->Detach(this, a3, true);
|
||||
} else {
|
||||
++this->m_NumAttach;
|
||||
}
|
||||
|
||||
this->m_Attachments[index] = image;
|
||||
|
||||
this->m_Width = image->m_Width;
|
||||
this->m_Height = image->m_Height;
|
||||
|
||||
image->Attach(this, a3, a4);
|
||||
this->m_Device->Sub38460(0);
|
||||
}
|
||||
|
||||
BLIZZARD_ASSERT((*image->m_AttachPoints)[m_FramebufferID].framebuffer == this);
|
||||
}
|
||||
|
||||
void GLFramebuffer::Detach(GLenum a2) {
|
||||
int32_t v2 = a2;
|
||||
int32_t index;
|
||||
|
||||
if (a2 == GL_DEPTH_STENCIL) {
|
||||
index = 5;
|
||||
v2 = GL_STENCIL_ATTACHMENT;
|
||||
this->Detach(GL_DEPTH_ATTACHMENT);
|
||||
} else if (a2 == GL_DEPTH_ATTACHMENT) {
|
||||
index = 4;
|
||||
} else if (a2 == GL_STENCIL_ATTACHMENT) {
|
||||
index = 5;
|
||||
} else {
|
||||
index = a2 - GL_COLOR_ATTACHMENT0;
|
||||
}
|
||||
|
||||
BLIZZARD_ASSERT(index < MAX_ATTACHMENT);
|
||||
|
||||
GLMipmap* oldImage = this->m_Attachments[index];
|
||||
|
||||
if (oldImage) {
|
||||
oldImage->Detach(this, v2, 0);
|
||||
|
||||
--this->m_NumAttach;
|
||||
|
||||
this->m_Attachments[index] = 0;
|
||||
|
||||
if (this->m_Device == GLSDLDevice::Get()) {
|
||||
this->m_Device->Sub38460(0);
|
||||
}
|
||||
|
||||
if (this->m_NumAttach == 0) {
|
||||
this->m_Width = 0;
|
||||
this->m_Height = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GLMipmap* GLFramebuffer::GetAttachment(GLEnum a2) {
|
||||
int32_t index;
|
||||
|
||||
if (a2 == GL_DEPTH_ATTACHMENT) {
|
||||
index = 4;
|
||||
} else if (a2 == GL_STENCIL_ATTACHMENT) {
|
||||
index = 5;
|
||||
} else {
|
||||
index = a2 - GL_COLOR_ATTACHMENT0;
|
||||
}
|
||||
|
||||
BLIZZARD_ASSERT(index < MAX_ATTACHMENT);
|
||||
|
||||
return this->m_Attachments[index];
|
||||
}
|
||||
|
||||
int32_t GLFramebuffer::GetSampleCount() {
|
||||
return this->m_FramebufferID
|
||||
? 1
|
||||
: this->m_Device->m_Context.GetSampleCount();
|
||||
}
|
||||
|
||||
bool GLFramebuffer::IsValid() {
|
||||
auto status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER);
|
||||
return status == GL_FRAMEBUFFER_COMPLETE;
|
||||
}
|
||||
|
||||
void GLFramebuffer::ReleaseObject() {
|
||||
// TODO
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue