void GL::GeometryBuffer::Init() { memset(&bufferTextureIDs[0], 0, sizeof(bufferTextureIDs)); memset(&bufferAttachments[0], 0, sizeof(bufferAttachments)); // NOTE: // Lua can toggle drawDeferred and might be the // first to call us --> initial buffer size must // be (0, 0) so prevSize != currSize (when !init) prevBufferSize = GetWantedSize(false); currBufferSize = GetWantedSize(true); }
bool GL::GeometryBuffer::Update(const bool init) { currBufferSize = GetWantedSize(true); // FBO must be valid from point of construction if (!buffer.IsValid()) return false; // buffer isn't bound by calling context, can not call // GetStatus to check for GL_FRAMEBUFFER_COMPLETE here // if (HasAttachments()) { // technically a buffer can not be complete yet during // initialization, however the GL spec says that FBO's // with only empty attachments are complete by default // assert(!init); // FBO was already initialized (during init or from Lua) // so it will have attachments -> check if they need to // be regenerated, eg. if a window resize event happened if (prevBufferSize == currBufferSize) return true; DetachTextures(init); } return (Create(prevBufferSize = currBufferSize)); }
void GL::GeometryBuffer::Init(bool ctor) { // if dead, this must be a non-ctor reload assert(!dead || !ctor); memset(&bufferTextureIDs[0], 0, sizeof(bufferTextureIDs)); memset(&bufferAttachments[0], 0, sizeof(bufferAttachments)); // NOTE: // Lua can toggle drawDeferred and might be the // first to call us --> initial buffer size must // be (0, 0) so prevSize != currSize (when !init) prevBufferSize = GetWantedSize(false); currBufferSize = GetWantedSize(true); dead = false; bound = false; }