mirror of
https://github.com/PCSX2/pcsx2.git
synced 2026-11-15 18:50:32 +01:00
At higher resolutions it takes too much time to save a screenshot at the maximum compression level. So let's allow the user to set the compression level. This re-uses the png_compression_level setting. The default compression level is 1 for speed, but if the user wishes to increase the compression level (without using an external tool) and doesn't mind if the screenshot takes more time to save then they can increase the compression level up to a maximum of 9 (which can take quite a while). Fixes #1527.
86 lines
2.3 KiB
C++
86 lines
2.3 KiB
C++
/*
|
|
* Copyright (C) 2011-2011 Gregory hainaut
|
|
* Copyright (C) 2007-2009 Gabest
|
|
*
|
|
* This Program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This Program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with GNU Make; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "GSTexture.h"
|
|
|
|
namespace PboPool {
|
|
inline void BindPbo();
|
|
inline void UnbindPbo();
|
|
inline void Sync();
|
|
|
|
inline char* Map(uint32 size);
|
|
inline void Unmap();
|
|
inline uptr Offset();
|
|
inline void EndTransfer();
|
|
|
|
void Init();
|
|
void Destroy();
|
|
}
|
|
|
|
class GSTextureOGL final : public GSTexture
|
|
{
|
|
private:
|
|
GLuint m_texture_id; // the texture id
|
|
int m_pbo_size;
|
|
GLuint m_fbo_read;
|
|
bool m_clean;
|
|
|
|
uint8* m_local_buffer;
|
|
// Avoid alignment constrain
|
|
//GSVector4i m_r;
|
|
int m_r_x;
|
|
int m_r_y;
|
|
int m_r_w;
|
|
int m_r_h;
|
|
|
|
// internal opengl format/type/alignment
|
|
GLenum m_int_format;
|
|
GLenum m_int_type;
|
|
uint32 m_int_shift;
|
|
|
|
// Allow to track size of allocated memory
|
|
uint32 m_mem_usage;
|
|
|
|
public:
|
|
explicit GSTextureOGL(int type, int w, int h, int format, GLuint fbo_read);
|
|
virtual ~GSTextureOGL();
|
|
|
|
bool Update(const GSVector4i& r, const void* data, int pitch) final;
|
|
bool Map(GSMap& m, const GSVector4i* r = NULL) final;
|
|
void Unmap() final;
|
|
bool Save(const string& fn, bool dds = false) final;
|
|
|
|
bool IsBackbuffer() { return (m_type == GSTexture::Backbuffer); }
|
|
bool IsDss() { return (m_type == GSTexture::DepthStencil); }
|
|
|
|
uint32 GetID() final { return m_texture_id; }
|
|
bool HasBeenCleaned() { return m_clean; }
|
|
void WasAttached() { m_clean = false; }
|
|
void WasCleaned() { m_clean = true; }
|
|
|
|
void Clear(const void* data);
|
|
void Clear(const void* data, const GSVector4i& area);
|
|
|
|
uint32 GetMemUsage();
|
|
};
|